본문 바로가기
개발/UNITY

[UNITY]AssetBundle 압축 종류

by MNMNMNMN 2020. 10. 6.
728x90
  • BuildAssetBundleOptions.None: 이 번들 옵션은 직렬화된 데이터 파일의 압축된 단일 LZMA 스트림인 LZMA 압축 포맷을 사용합니다. LZMA 압축 포맷은 번들을 사용하기 전에 전체 번들의 압축을 풀어야 합니다. 따라서 파일 크기는 가장 작아지지만, 압축 해제 때문에 로드 시간이 조금 길어지게 됩니다. BuildAssetBundleOptions를 사용하는 경우 번들의 에셋을 사용하기 위해 모든 번들의 압축을 풀어야 합니다.
    번들의 압축이 풀린 이후에는 디스크에서 LZ4 압축 포맷을 사용하여 다시 압축됩니다. LZ4는 번들의 에셋을 사용하기 위해서 모든 번들의 압축을 풀 필요가 없습니다. 이 옵션은 번들의 에셋을 사용하기 위해서 모든 에셋을 로드해야 하는 경우 사용하기에 적합합니다. 이러한 경우의 예제로 캐릭터나 씬에 대한 모든 에셋을 묶는 경우가 있습니다.
    LZMA 압축 포맷을 사용하는 것은 파일 크기가 작다는 점을 고려했을 때, 외부 호스트에서 에셋 번들을 최초로 다운로드 받을 때만 권장합니다. UnityWebRequestAssetBundle을 통해 로드된 LZMA 압축 에셋 번들은 자동으로 LZ4 압축으로 재압축되어 로컬 파일 시스템에서 캐시됩니다. 번들을 다른 방법으로 다운로드하고 저장하는 경우 AssetBundle.RecompressAssetBundleAsync API로 재압축할 수 있습니다.

  • BuildAssetBundleOptions.UncompressedAssetBundle: 이 번들 옵션은 데이터가 전혀 압축되지 않는 방식으로 번들을 빌드합니다. 이 옵션의 단점은 데이터가 압축되지 않았기 때문에 다운로드할 파일 크기가 크다는 점입니다. 하지만 다운로드된 파일을 로드하는 속도는 비교적 빠릅니다.

  • BuildAssetBundleOptions.ChunkBasedCompression: 이 번들 옵션은 LZ4 압축 메서드를 사용합니다. 메서드는 LZMA 압축 포맷보다 압축된 파일 크기가 크지만 LZMA 포맷과는 다르게 에셋을 사용하기 전에 모든 번들의 압축을 풀 필요는 없습니다. LZ4 압4축 포맷은 청크 기반 알고리즘을 사용하여 에셋 번들이 부분적으로 또는 “청크” 단위로 로드될 수 있도록 합니다. 단일 청크의 압축을 풀면 에셋 번들에서 다른 청크의 압축을 풀지 않아도 해당 청크에 포함된 에셋을 사용할 수 있습니다.

ChunkBasedCompression 옵션을 사용하면 압축되지 않은 번들과 비슷한 로드 속도를 가지게 되지만 디스크의 용량은 적게 차지합니다.

 

*압축률은 LZMA가 LZ4 보다 높으나, 실제 앱내에서 사용할때에는 압축을 풀때에는 LZMA가 LZ4보다 압축해제 속도가 느리다.

 

[출처]docs.unity3d.com/kr/2018.4/Manual/AssetBundles-Building.html

 

에셋 번들 빌드 - Unity 매뉴얼

AssetBundle 워크플로 문서에서는 BuildPipeline.BuildAssetBundles 함수에 3개의 인수를 전달하는 코드 예제를 보았습니다. 이제 조금 더 깊게 알아보도록 하겠습니다.

docs.unity3d.com

 

 

 

728x90
반응형

댓글