압축, 어디에 여러 레이어에 여러 가지 방법으로 발생하고, 할 수있는 방법은 전적으로 의존하고 사용하는 것을 그 목적 & 목표는 압축 공간을 절약 대해 항상 아닙니다 (이다 디스크에).
기본적으로 최상위 수준에서 모든 자산은 대량 아카이브로 압축 될 수 있습니다 (읽기 속도가 빨라지므로 HDD에서 읽는 것이 적으므로이 경우 처리 능력을 희생합니다. DMA를 사용하여 CPU를 전혀 사용하지 않는 압축되지 않은 파일을 읽음), 거의 항상 메모리에서 메모리로 읽습니다. HDD로 다시 읽으면 성능이 저하되고 여러 가지 문제가 발생할 수 있습니다 (어떤 경우에는 이전 세대 콘솔 에서처럼 불가능).
두 번째 단계는 자산 자체에서 수행 할 수 있습니다. 예를 들어, 텍스처를 여러 가지 방법으로 압축 할 수 있지만 요즘 압축 해제 (S3TC/DXTn, BCn)는 압축 해제가 지원됨에 따라 주로 사용됩니다 (또는 드라이버에 의해 에뮬레이션 된) 하드웨어에서, 일단 아카이브/디스크에 대한 읽을 때, 더 이상의 압축 해제가 필요하지 않습니다.
압축 전략은 특히, 메모리 레이아웃에 매우 민감 제한된 자원을 가지고 C와 ZLIB 같은 라이브러리 (또는 다른) 사용 등
작은 캐시가 콘솔에, 플랫폼에 따라 다를 ++ ,이 런타임 압축 해제는 어떻게 수행됩니까?
은 일반적으로 당신은 잘 자세한 내용 here,이 블리자드 엔터테인먼트에 의해 사용되는 MPQ format (이다 않는 문서화 된 AAA 아카이브 시스템의 좋은 예를 RAM에 보관의 메모리 매핑 된 파일을 사용하고 직접 압축을 풀), 그것은 디아블로 I, zlib for Warcraft III, bzip2 for World와 같은 다양한 압축 알고리즘을 사용합니다. 그리고 그들은 SCII와 같은 최신 게임을 위해 LZ와 스파 스 컴프레션을 추가했습니다.
1 월 Wassenberg의 논문 (Optimizing File Accesses via Ordering and Caching
)에는 파일 관리에 대한 좋은 분석이 있습니다.
나도 몰라 찾을 수 있습니다 그가이 모든 과정을 설명 QuakeCon 2011에서 기조 연설을 한 무슨 '자산'은 여기에 구체적으로 의미가 있지만 별도의 압축 파일이 많은 경우 요청시 압축을 풀고 일부 캐싱을 시도해 볼 수 있습니다. 따라서 파일은 필요할 때만 메모리에서 압축 해제 된 다음 캐시됩니다. 다른 파일을 압축 해제해야하는 경우 캐시에서 시간이 필요하지 않은 경우 캐시가 너무 커지지 않도록 삭제됩니다. – sashoalm
자산별로 게임, 이미지, 메쉬, 재료, 쉐이더와 같은 것들을 필요로 함을 의미합니다. – Constan7ine
"Game Coding Complete"에는 거의 포화가 설명 된 방법이 있습니다. – risingDarkness