자원의 이중 압축 방지


13

내가 사용하고 .png내 텍스처들과의 가상 파일 시스템을 사용하고 .zip내 게임 프로젝트 파일. 이것은 텍스처가 두 번 압축 및 압축 해제되었음을 의미합니다. 이 이중 압축 문제에 대한 해결책은 무엇입니까? 내가 들었던 한 가지 해결책 .tga은 텍스처에 s 를 사용하는 것이지만 들었으므로 오래 전부터 보입니다. 또 다른 해결책은 압축 해제를 구현 GPU하는 것입니다. 빠르기 때문에 오버 헤드를 잊어 버립니다.


2
관련 : jpeg를 사용하면 자체 형식의 많은 zip 프로그램이 20 %까지 압축 할 수 있으므로 반드시 그렇게 나쁘지는 않습니다. 이중 압축에서 가장 걱정하는 점은 무엇입니까? 너무 오래 걸리나요? 많은 형식은 이미 압축 된 데이터를 그대로 그대로 저장하고 압축을 풀지 않습니다.
PlasmaHH

답변:


17

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에 의해 추가로 향상되었습니다.

수축 및 다른 압축 강도 설정 이외의 다른 알고리즘을 실험 해 보는 것이 좋습니다. 최상의 결과를 얻을 수있는 조합은 텍스처 스타일에 따라 다릅니다. 그러나 게임의 자산 로딩을 벤치마킹하고 감압 성능이 사용하는 설정에 대한 결정에 영향을 줄 수도 있습니다.

하단 라인 : 당신은 여전히 낮은 파일 크기, 중 하나를 사용하면서 이중 압축을 피하려는 경우 PNGStore압축 알고리즘 또는 BMP압축 압축 알고리즘을.


5
나는 내 사진과 BMP 이미지의 PNG (압축 수준 9) 비트 압축 (초 압축 수준)을 항상 약 20 % 정도했습니다. 따라서 메타 정보와 같은 효과가 있어야합니다.
Trilarion

3
png에는 압축률이 떨어지는 인터레이스 옵션 이 있지만 이미지 파일의 첫 부분에서 저해상도 이미지를 추출 할 수 있습니다 (연결이없는 낮은 밴드를 통해 다운로드 할 때와 같이). 벽에 활성화되어 있습니까? 그 외에도 png는 이미 압축을 위해 수축을 사용합니다.
ratchet freak

불량한 png 압축기를 사용하고 PNGOUT을 통해 파일을 실행 한 것으로 보이며 압축 된 bmp 파일로 구타되지 않는 결과를 가져와야합니다.
aaaaaaaaaaaa

BMP 또는 TGA가 24 비트 또는 32 비트입니까? 특히 BMP를 사용하면 24 비트 일 가능성이 높으며 압축되지 않은 TGA 크기는 24 비트이기도합니다. 당신은 아마 여기 같은 것을 비교하지 않을 것입니다.
Maximus Minimus

@JimmyShelter TGA와 BMP는 모두 알파 채널을 사용하는 32 비트입니다.
Philipp

7

걱정하지 마십시오.

.zip 파일에 사용 된 "deflate"알고리즘이 .png 이미지의 픽셀 데이터와 같이 이미 압축 된 데이터 블록을 발견하면 효과적으로 압축 할 수 없다는 것을 발견하고이를 리터럴로 저장합니다. 비 압축 데이터. 압축을 풀려면 압축을 풀 때 약간의 오버 헤드가 발생합니다.

http://en.wikipedia.org/wiki/DEFLATE


3
때로는 간단하지만 인식 된 문제가 반드시 실제 문제는 아닙니다. 실제로 두 번 압축 해제의 오버 헤드가 있었지만 압축을 풀면 수축이 정말 빠릅니다. 오버 헤드는 단지 측정 가능할 것입니다.
aaaaaaaaaaaa

겠습니까 압축 끝은 파일을 압축 할 수없는 것을 깨닫게하는 데 시간이 오래 걸릴?
user253751

상대적으로 그렇습니다. 휴리스틱의 일반적인 .zip 압축기가 블록의 인코딩을 선택하는 데 사용하는 방법을 모르지만 모든 인코딩을 시도하고 최상의 결과를 유지하는 것만 큼 간단 할 수 있습니다. 당신이 경우 개발 과정에서 해야한다 을 .zip에서 데이터를 가지고, 당신은 아마 사용하는 모든 것을 강제로 할 것 store대신 deflate저장 시간, 다음 deflate릴리스에 대한 모든 빌드.
Russell Borogove

2

매우 좋은 답변이 이미 제공 된 것 같지만 한 가지 더 줄 것이라고 생각했습니다.

What are the solutions to this double compression problem?

해결책 : 아무것도하지 마십시오.

이론적 근거 : 언급 된 문제는 없습니다. 예, 정보를 두 번 압축하고 있는데 왜 이것이 걱정됩니까? 데이터 크기가 너무 큽니까? 감압이 너무 느립니까? 현재이 시점에서 추가, 정제, 테스트 및 / 또는 디버깅 할 수있는 수십 가지 기능보다 더 중요합니까?


불필요하게 두 번 무언가를하는 것은 그 자체로 문제입니다. 적어도 나는 그것을 그렇게 인식했습니다. 물론, 당신은 당신의 제안에도 옳습니다. 상용 게임을 작성하지 않기 때문에 메모리와 압축 해제 속도 모두 문제가 될 수 있습니다.
user1095108

나는 전문 게임 개발자이며, 실제로 문서화 된 성능 문제가 없다면 걱정할 필요가 없습니다.이 문제에 대해 두 번째로 많은 $ 0.99 구매 또는 광고 노출이 필요합니다. 이 문제를 올바르게 '수정'하는 데 몇 시간이 걸립니다. 무언가를 두 번하는 것은 문제가되지 않지만 비효율적 일 수 있습니다. 이 경우 동일한 작업을 두 번 수행하지는 않지만 압축을 위해 PNG로 저장되는 이미지 데이터와 함께 보관되는 전체 파일이 있습니다.
NPSF3000

사실이지만 일단 완료되면 여러 프로젝트에서 완료됩니다. DEFLATE 알고리즘을 생각하면 80 년대 이후로 동일하게 유지됩니다. 프로그래밍을하면 구식이 될 수 있지만 알고리즘을 알고 있다면 GPU에서 알고리즘을 구현하고 여러 프로젝트에서 초고속 압축 해제 속도를 즐길 수 있습니다.
user1095108

Deflate on GPU를 구현하기 위해 한 달에 2 주 정도 소비하십니까? 그런 다음 Y보다는 플랫폼 X에 배포하려고하고 Z를 통해 알고리즘을 깨뜨 리려고한다는 것을 알고 있습니다. 게임에 초점을 맞추고 게임을 만들고 싶다면 성능 저하와 같은 불필요한 것들에 대해 걱정하지 마십시오.
NPSF3000

알고리즘을 다시 구현하면 알고 있어야합니다. 2 주 또는 한 달이 아닌 스냅. 그것이 내가 말하고 싶은 것입니다. 80 년대 이래로 주변에 있었고 시간을 투자하는 것이 가치가있을 것입니다.
user1095108 12

1

PNG 및 OGG와 같은 특수 형식을 사용하는 경우 ZIP 압축이 필요하지 않습니다.

PNG, OGG 및 기타 압축 된 형식은 ZIP으로 다시 압축하면 크기가 훨씬 작아지지 않습니다. 압축 된 PNG의 100MB는 여전히 ~ 100MB입니다.

스크립트, 구성 파일 및 기타 텍스트 기반 형식은 압축의 이점이 크지 만 일반적으로 크기가 작기 때문에 많은 데이터를 저장하지 않습니다. 게임이 100MB라면 텍스트 파일이 전체 게임의 1MB를 차지할 수 있습니다. 압축을 통해 100KB로 만들 수 있다고해도 1 % 미만의 900KB 만 이겨도 노력할 가치는 거의 없습니다.

가상 우편 기반 파일 시스템을 사용하는 대신 파일 시스템을 직접 사용할 수도 있습니다. 패치 작업이 매우 쉬워집니다. 수정 한 파일을 스왑하면됩니다.


2
.zip파일 사용 여부와 관련하여 선택 사항이없는 경우가 있습니다 . 예를 들어, 안드로이드 플랫폼에서 파일은 리소스를 포함 할 수 .apk있는 .zip파일입니다.
user1095108

3
또한, 아카이브 를 사용하면 확실한 이점이 있으며 ZIP 파일은 압축 및 아카이브 구조를 모두 제공합니다.
MrCranky

예, 나는 단지 네이티브 파일 시스템을 사용하는 것 역시 장점이 있다는 것을 알고 있습니다. 나는 "간단한 유지"옹호자입니다.
API-Beast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.