<div align="center">
<img src="https://packsquash.aylas.org/logo/kawaii.png" alt="PackSquash" width="600"><br><a href="https://github.com/ComunidadAylas/PackSquash/actions?query=workflow%3ACI"><img alt="CI workflow status" src="https://github.com/ComunidadAylas/PackSquash/actions/workflows/ci.yml/badge.svg"></a><a href="https://github.com/ComunidadAylas/PackSquash/releases/latest"><img alt="Latest version" src="https://img.shields.io/github/v/release/ComunidadAylas/PackSquash?label=Latest%20version"></a><img alt="Total downloads" src="https://img.shields.io/github/downloads/ComunidadAylas/PackSquash/total?label=Downloads"><a href="https://discord.gg/bGUSamzJYp"><img alt="Discord server online count" src="https://img.shields.io/discord/85364538328768512?label=Discord&logo=discord"></a>
</div>
PackSquash는 Minecraft: Java Edition의 리소스 및 데이터 팩 최적화 도구로, 최고의 압축률, 성능, 보호 기능을 달성하여 팩 배포, 저장 공간, 게임 내 로딩 시간을 개선하는 것을 목표로 합니다.
일화적인 증거에 따르면, 기본 옵션을 사용했을 때 v0.2.1 버전은 Floo Network (버전 1.6.2)의 Witchcraft & Wizardary 리소스 팩 ZIP 파일 크기를 118 MiB에서 57 MiB로 줄여 51.69%의 크기 감소를 달성했으며, 시간이 지남에 따라 더 좋아졌습니다.
🔎 개요
PackSquash는 디렉터리 내에서 인식하는 팩 파일들을 순회하며, 파일별로 설정 가능한 손실 압축(lossy) 및 비손실 압축(lossless) 기술을 적용하고, 게임이 직접 사용할 수 있는 ZIP 파일을 구축합니다. 현재 PackSquash가 적용할 수 있는 특정 기술은 다음과 같습니다:
- PNG 이미지의 경우: 색상 팔레트 생성을 위한 색 양자화(color quantization), 손실 없는 비트 깊이(lossless bit depth), 압축 및 색상 유형 감소, 메타데이터 제거, 단색 텍스처 크기 축소 등의 최적화를 수행합니다. 양자화는 일반적인 텍스처 크기의 경우 매우 미묘하거나 심지어 불필요할 수 있지만, 손실 없는 품질을 원한다면 비활성화할 수 있습니다. 크기 축소 또한 끌 수 있습니다. 이러한 최적화 중 일부는 잘 알려진
imagequant (pngquant에서 사용) 및 oxipng 라이브러리에 의해 수행됩니다.
- Ogg(.ogg 및 .oga), MP3, M4A, FLAC, WAV 파일의 경우: 채널 혼합(channel mixing), 다운샘플링(downsampling), 최첨단 Vorbis 인코더를 사용한 트랜스코딩(transcoding), 피치 시프팅(pitch shifting), 태그 제거(tag removal), 무음 구간 절단(silence truncation), 그리고 OptiVorbis를 이용한 2단계 최적화 및 검증을 수행합니다. 기본 설정은 게임 내 음악에 충분히 좋도록 설계되어, 대부분의 청취자가 품질이 좋고 방해가 되지 않는다고 생각할 것입니다. 채널 혼합이 Minecraft 사운드 엔진이 위치 효과(positional effects)를 계산하는 방식(MC-146721 참고)을 변경할 수 있기 때문에, PackSquash는 기본적으로 이를 수행하지 않습니다.
- JSON 파일(.json, .jsonc, .mcmeta 및 .mcmetac; OptiFine 모드 지원이 활성화된 경우 .jem, .jemc, .jpm 및 .jpmc): 불필요한 공백을 제거하여 최소화(minification)합니다. 부가적으로, 최소화는 파싱(parsing)이 필요하므로 PackSquash는 엄격한 JSON 파일 검증기 역할도 수행합니다. 주석은 허용되는 유일한 구문 확장이며 기본적으로 폐기되지만, 확장자가 'c' 문자로 끝나지 않는 파일에서는 거부될 수도 있습니다. 이 검증은 Minecraft가 혼란스러워할 수 있는 모든 가능한 오류를 잡아내지는 못합니다.
- 셰이더 파일(.vsh, .fsh 및 .glsl)의 경우: 불필요한 공백을 제거하여 최소화하고 전처리기 지시문(preprocessor directives)의 해상도 및 확장을 수행합니다. JSON 파일과 마찬가지로 PackSquash는 이에 대한 기본적인 검증을 수행할 것입니다.
참고로, PackSquash의 현재 설계상의 한계로 인해 일부 셰이더는 조정(tweaking)이 필요할 수 있습니다(https://github.com/ComunidadAylas/PackSquash/issues/187#issuecomment-1499365532). 이러한 한계는 향후 개선될 예정입니다.
- 구조 파일(.nbt)의 경우: Zopfli를 사용한 재압축, Gzip 멤버 연결(concatenation), 메타데이터 제거를 수행합니다.
- 레거시 언어 파일(.lang; Minecraft 1.12.2 이하에서 사용): 축소화(minification)를 통해 공백 줄과 주석을 제거합니다. 중복 키나 주석이 아니면서 키-값 구분자를 포함하지 않는 비공백 줄은 오류로 처리되어, 실수 발견에 도움을 주고 파일 정리를 유지할 수 있게 합니다.
- OptiFine 속성 파일(Java .properties; OptiFine 모드 지원 활성화 시에만): 불필요한 공백을 제거하여 축소화합니다. JSON 파일과 마찬가지로 축소화를 수행하려면 파일을 구문 분석해야 하므로, PackSquash는 기본적인 유효성 검사 오류를 표시할 것입니다.
- BlockBench 모델 파일(.bbmodel; Minecraft Transit Railway 3 지원 활성화 시에만): 불필요한 공백과 키를 제거하여 축소화합니다. 이 과정은 환경별 메타데이터가 포함된 일부 키를 제거하기 때문에 개인 정보 보호 측면에서도 개선될 수 있습니다.
이러한 기술 외에도, 설계상 이미 압축되지 않은 파일(즉, Ogg 및 PNG 파일)은 Google에서 만든 최첨단 DEFLATE 인코더인 Zopfli 알고리즘을 사용하여 무손실로 압축됩니다. 이 알고리즘은 성능 저하를 감수하는 대신 매우 높은 공간 절약률에 맞춰 조정되었으며 모든 DEFLATE 디코더와 호환됩니다. 더 높은 절약률을 원한다면 이미 압축된 파일을 압축하거나 압축 반복 횟수를 늘릴 수 있지만, 이는 프로세스를 상당히 느리게 만듭니다. 반대로, 더 빠른 실행 속도를 위해 낮은 절약률이 허용된다면, 압축 반복 횟수를 줄이거나 아예 건너뛸 수도 있습니다.
PackSquash는 또한 다음 작업을 수행할 수 있지만, 사용자로부터 정보가 담긴 결정이 필요하기 때문에 기본적으로 비활성화되어 있습니다:
- 이전에 생성한 ZIP 파일을 재사용하여 실행 간에 변경되지 않은 파일의 압축을 건너뛰고, 각 번에 몇 개의 파일만 변경되는 증분 워크플로우(incremental workflows)에서 속도를 크게 높일 수 있습니다.
- 생성된 ZIP 파일 내의 동일한 파일 중복 제거: 여러 번 반복되는 파일 내용은 한 번만 저장됩니다.
- 생성된 ZIP 파일을 보호하여 대부분의 ZIP 조작 프로그램으로 읽기 어렵게 만들고, 이러한 ZIP 파일 내부에 저장된 일부 파일도 보호합니다.
🔗 다운로드 및 사용법
PackSquash는 여러 운영 체제와 환경을 위해 배포되는 명령줄 애플리케이션입니다. PackSquash를 이용하는 여정을 시작하는 방법에 대한 자세한 내용은 시작 가이드(getting started guide)를 확인하세요.
대안으로, 다음과 같은 PackSquash와 통합되는 타사 도구에 관심이 있을 수 있습니다:
- Nexo: 사용자 지정 아이템, 블록, 방어구 등을 생성하는 Minecraft 서버 플러그인입니다.
- Git Pack Manager: git을 사용하여 서버의 리소스 팩(resource pack)을 관리하는 Minecraft 서버 모드/플러그인입니다.
✉️ 문의 및 지원
라이선스에 명시된 바와 같이, 이 소프트웨어는 어떠한 보증 없이 제공되며 유용하게 사용하시기를 바랍니다. 하지만 이것이 제가 건설적인 피드백, 제안, 축하 또는 PackSquash 사용에 대한 도움을 환영하지 않는다는 의미는 아닙니다(제가 할 수 있고 원한다면). PackSquash와 관련된 어떤 이유로든 저에게 연락하고 싶다면 Discord에서 _alextmjugador_에게 연락할 수 있습니다.
또한 영어 채팅 및 지원을 위한 전용 공간 등 다양한 주제를 다루는 커뮤니티 _Comunidad Aylas_의 Discord 서버에 참여할 수 있습니다 (https://discord.gg/bGUSamzJYp). 자신을 소개하는 것을 잊지 마세요!
PackSquash를 원하시는 모든 용도로 무료로 사용하실 수 있으며, 항상 그렇게 할 수 있을 것입니다. 제가 무료 소프트웨어를 만드는 것에서 가장 즐거움을 느끼는 부분 중 하나는 다른 사람들에게 무언가 좋고 유용한 것을 하고 있다는 느낌입니다. 그렇다고 하더라도, PackSquash는 논란의 여지 없이 혁신적이며, 일부 기능은 Minecraft 내부 지식에 대한 원래 이해 덕분에 구현할 수 있었습니다. 이 지식은 디난독스(deobfuscated)된 코드를 정적으로 분석(static analysis)하여 얻었으며, 이는 일반적으로 리버스 엔지니어링(reverse engineering)이라고 불리는 활동입니다. 이 작업은 시간이 많이 소요되며, 회사에 다니는 엔지니어들은 이러한 일을 하고 대가를 받습니다. 만약 말로 표현할 수 없거나 제가 프로젝트에 계속 전념하고 로드맵을 발전시키는 데 동기를 부여할 수 있는 방식으로
이 멋진 분들과 프로젝트들(emoji key) 덕분입니다: