내가 사용하고 .png
내 텍스처들과의 가상 파일 시스템을 사용하고 .zip
내 게임 프로젝트 파일. 이것은 텍스처가 두 번 압축 및 압축 해제되었음을 의미합니다. 이 이중 압축 문제에 대한 해결책은 무엇입니까? 내가 들었던 한 가지 해결책 .tga
은 텍스처에 s 를 사용하는 것이지만 들었으므로 오래 전부터 보입니다. 또 다른 해결책은 압축 해제를 구현 GPU
하는 것입니다. 빠르기 때문에 오버 헤드를 잊어 버립니다.
내가 사용하고 .png
내 텍스처들과의 가상 파일 시스템을 사용하고 .zip
내 게임 프로젝트 파일. 이것은 텍스처가 두 번 압축 및 압축 해제되었음을 의미합니다. 이 이중 압축 문제에 대한 해결책은 무엇입니까? 내가 들었던 한 가지 해결책 .tga
은 텍스처에 s 를 사용하는 것이지만 들었으므로 오래 전부터 보입니다. 또 다른 해결책은 압축 해제를 구현 GPU
하는 것입니다. 빠르기 때문에 오버 헤드를 잊어 버립니다.
답변:
zip 형식은 여러 가지 다른 압축 알고리즘을 지원합니다. 아카이브의 각 파일에 대해 다른 알고리즘을 사용할 수 있습니다. zip- 아카이브에 추가 압축 (예 : PNG)의 이점이없는 이미 압축 된 파일을 저장하려는 경우 전혀 압축되지 않는 "저장된"알고리즘으로 이러한 파일을 인코딩 할 수 있습니다. 7-zip 의 "아카이브에 추가"대화창 통해 "압축 강도"에서이를 선택할 수 있습니다.
그러나 아카이브에 이미지뿐만 아니라 압축 가능한 다른 리소스가있는 경우 모든 단일 파일에 대해 알고리즘을 선택하는 것이 매우 지루할 수 있습니다. 이 경우 압축 아카이브에서 압축되지 않은 이미지 형식을 선택할 수 있습니다.
TGA 형식은 다양한 모드를 알고 있으며, 일부 모드는 압축되고 일부는 압축되지 않습니다. 압축을 사용하지 않으려면 사용중인 그래픽 편집기의 내보내기 옵션에서 올바른 것을 선택하십시오. 압축되지 않은 다른 이미지 형식은 BMP (Windows Bitmap)입니다.
여기 내가 만든 테스트가 있습니다. 동일한 이미지 (현재 프로젝트의 자산)를 여러 형식으로 여러 번 zip- 아카이브에 추가했습니다. 일부는 정상 강도에 "deflate"-알고리즘이 있고 다른 하나는 "store"가 있습니다. 독일어 GUI가 유감입니다. 두 번째 열은 압축되지 않은 크기이고, 세 번째 열은 압축 알고리즘이며, 네 번째 열은 압축 된 크기입니다.
보시다시피, PNG를 압축 인코딩하면 압축률이 0.3 %에 불과한 반면, 압축 인코딩 된 BMP는 원본 파일의 10 분의 1로 줄어 듭니다. 이는 PNG 버전보다 훨씬 작습니다. 이것은 나를 놀라게했다. ZIP이 아닌 PNG의 압축 방법은 이미지 데이터에 맞게 최적화되어야하기 때문에 PNG가 더 작을 것으로 예상했습니다. 아마도 내 이미지 편집기 (GIMP)는 PNG 파일에 BMP와 관련이없는 메타 정보를 상당히 많이 추가했다고 설명합니다.
압축되지 않은 TGA는 압축 이전 버전과 압축 후의 파일 크기와 관련하여 BMP와 유사하게 작동하지만 압축 된 TGA 파일의 압축은 압축되지 않은 버전만큼 많지는 않지만 ZIP에 의해 추가로 향상되었습니다.
수축 및 다른 압축 강도 설정 이외의 다른 알고리즘을 실험 해 보는 것이 좋습니다. 최상의 결과를 얻을 수있는 조합은 텍스처 스타일에 따라 다릅니다. 그러나 게임의 자산 로딩을 벤치마킹하고 감압 성능이 사용하는 설정에 대한 결정에 영향을 줄 수도 있습니다.
하단 라인 : 당신은 여전히 낮은 파일 크기, 중 하나를 사용하면서 이중 압축을 피하려는 경우 PNG
와 Store
압축 알고리즘 또는 BMP
압축 압축 알고리즘을.
걱정하지 마십시오.
.zip 파일에 사용 된 "deflate"알고리즘이 .png 이미지의 픽셀 데이터와 같이 이미 압축 된 데이터 블록을 발견하면 효과적으로 압축 할 수 없다는 것을 발견하고이를 리터럴로 저장합니다. 비 압축 데이터. 압축을 풀려면 압축을 풀 때 약간의 오버 헤드가 발생합니다.
store
대신 deflate
저장 시간, 다음 deflate
릴리스에 대한 모든 빌드.
매우 좋은 답변이 이미 제공 된 것 같지만 한 가지 더 줄 것이라고 생각했습니다.
What are the solutions to this double compression problem?
해결책 : 아무것도하지 마십시오.
이론적 근거 : 언급 된 문제는 없습니다. 예, 정보를 두 번 압축하고 있는데 왜 이것이 걱정됩니까? 데이터 크기가 너무 큽니까? 감압이 너무 느립니까? 현재이 시점에서 추가, 정제, 테스트 및 / 또는 디버깅 할 수있는 수십 가지 기능보다 더 중요합니까?
PNG 및 OGG와 같은 특수 형식을 사용하는 경우 ZIP 압축이 필요하지 않습니다.
PNG, OGG 및 기타 압축 된 형식은 ZIP으로 다시 압축하면 크기가 훨씬 작아지지 않습니다. 압축 된 PNG의 100MB는 여전히 ~ 100MB입니다.
스크립트, 구성 파일 및 기타 텍스트 기반 형식은 압축의 이점이 크지 만 일반적으로 크기가 작기 때문에 많은 데이터를 저장하지 않습니다. 게임이 100MB라면 텍스트 파일이 전체 게임의 1MB를 차지할 수 있습니다. 압축을 통해 100KB로 만들 수 있다고해도 1 % 미만의 900KB 만 이겨도 노력할 가치는 거의 없습니다.
가상 우편 기반 파일 시스템을 사용하는 대신 파일 시스템을 직접 사용할 수도 있습니다. 패치 작업이 매우 쉬워집니다. 수정 한 파일을 스왑하면됩니다.
.zip
파일 사용 여부와 관련하여 선택 사항이없는 경우가 있습니다 . 예를 들어, 안드로이드 플랫폼에서 파일은 리소스를 포함 할 수 .apk
있는 .zip
파일입니다.