Search Unity

현재 베타 버전으로 제공 중인 Unity 2021.1에서는 프로젝트에서 더욱 빠른 속도로 반복 작업을 수행할 수 있도록 에디터 성능 영역에 중점을 두어 텍스처 임포트와 압축 최적화 기능을 개선하고 있습니다.

다른 게임 에셋에 비해 텍스처는 일반적으로 하드 디스크 공간의 대부분을 차지하며, 전체 임포트 시간의 3분의 2를 소요합니다. 따라서 복잡한 프로젝트를 진행하는 경우 텍스처 임포트나 압축을 대기하느라 소중한 시간을 잃게 됩니다. Unity Accelerator와 같은 팀 작업을 위한 Unity 툴을 사용하면 이 문제를 완화할 수 있지만, 유니티는 보다 근본적인 해결책을 마련하고자 텍스처 임포트와 압축 프로세스의 최적화 작업에 착수했습니다.

아래의 시간은 SSD 디스크에 프로젝트 폴더를 두고 AMD ThreadRipper 1950X CPU가 탑재된 PC에서 텍스처 임포트 시간을 테스트한 결과입니다. 다른 구성(예: Mac)에서도 비슷한 수준으로 시간이 단축된 것을 확인했습니다. 테스트에 사용한 Unity 버전은 Unity 2020.2(알파 21)와 Unity 2021.1 베타 5 버전입니다.

보트 어택(Boat Attack) 프로젝트(텍스처 118개, 720MB)의 모든 텍스처를 임포트하는 데 걸린 시간은 다음과 같습니다.

  • PC 플랫폼: 102초 → 94초(1.1배 속도 향상)
  • Android 플랫폼, ETC2 압축: 203초 → 101초(2.0배 속도 향상)
  • Android 플랫폼, ASTC 압축: 536초 → 172초(3.1배 속도 향상)
  • PC 플랫폼(Android 플랫폼과 동일한 텍스처 크기 설정): 30초 → 22초(1.4배 속도 향상). 프로젝트에서 사용되는 텍스처 중 다수는 PC 플랫폼에서 Android 플랫폼보다 더 큰 크기의 텍스처를 사용합니다.

사자의 서: 환경(Book of the Dead: Environment)과 같은 대규모 프로젝트에서 모든 텍스처(텍스처 425개, 1.9GB)를 임포트하는 데 걸린 시간은 다음과 같습니다.

  • PC 플랫폼: 161초 → 133초(1.2배 속도 향상)
  • Android 플랫폼, ETC2 압축: 1,140초 → 494초(2.3배 속도 향상)
  • Android 플랫폼, ASTC 압축: 3,162초 → 1,204초(2.6배 속도 향상)

속도 향상을 위해 다음 두 영역에서 최적화가 이루어졌습니다.
1) 텍스처 임포트 프로세스 중에 픽셀 데이터 변환과 복사를 수행하고 속도가 느린 부분에는 SIMD 또는 스레딩 최적화를 추가(예: sRGB 변환, 파노라믹 레이아웃 큐브맵 프로세싱 등)
2) 최신 버전의 압축 라이브러리로 업데이트하거나 압축 라이브러리 자체를 최적화하여 텍스처 압축

ETC 형식 압축 최적화(1.4배 속도 향상)에서 오류를 일으킬 위험이 적은 구성 요소는 2020.2.0, 2020.1.15, 2019.4.16 버전에도 반영되었습니다.

향후 계획

Unity 2021.2의 텍스처 임포트 시간과 압축은 앞으로 더욱 개선될 예정이므로, 베타 테스트 페이지베타 포럼을 통해 다음 공개 릴리스 소식을 확인하세요. 

Unity 2021.1 베타

Unity 2021.1을 사용하면서 임포트 시간을 크게 절약할 수 있기를 바랍니다. 최신 베타 버전은 Unity Hub나 유니티 다운로드 페이지에서 다운로드하실 수 있습니다. 현재까지 1,900개 이상의 수정이 이루어졌으며 260개 이상의 기능이 추가 및 변경되었습니다. 사용 중에 문제가 발생할 경우 버그 리포트를 제출해 주세요. 울트라와이드 IPS 34인치 144Hz 모니터를 받을 수 있는 기회가 주어집니다. 총 4대가 마련되어 있으며, 전체 규정은 여기를 참고하세요. 베타 버전은 정식 제작 단계의 프로젝트에는 권장되지 않습니다. 진행 중인 프로젝트에 베타 버전을 사용해볼 예정이라면 먼저 기존 프로젝트를 백업하시기 바랍니다.

Unity 2021.1를 사용한 후 텍스처 임포트에 소요되는 시간이 어떻게 개선되었는지 포럼 스레드에 알려주시기 바랍니다.

25 replies on “Unity 2021.1의 텍스처 최적화”

This is great! Unrelated request, but that would be a great improvement: being able to run Texture2D.Compress (or something similar) on a separate thread. Improvements on mesh manipulations a couple years back were great news. Being able to compress textures at runtime without spikes would be awesome!

Would it be possible to move texture importing to a background process?
Most of the time we do not need (the full resolution version of) most textures immediately after dragging them into the project folder or after updating our Unity version (or anything else that triggers an asset reimport).

So ideally Unity should only create a placeholder texture which can already be used (applied to a Material) but which gets replaced with higher and higher resolution versions as it continues being imported in the background. With mipmapping enabled the lower resolution versions could even be reused (I think).
And to finish it off, add a new EdiorWindow which shows a reorderable list of texture-import tasks so that *when* a specific texture if required faster it can be moved to the top of the priority list.

Please fix the bad global illumination and verify the realtime global illumination.
Can we use deferred renderer in urp on upcoming unity version?

Performance improvements in the editor are always welcome. Great job Aras, Florian, and anyone else involved. I would love to see more blog posts like this. Thank you!

Very nice improvements! Thanks

Any news about only compressing the textures that are used in the build at build time?
and not all the textures in the project folder?

You may want to see how the compression (crunch) affect the graphics while in editor. How much space it takes etc.

Well it could be configurable / on-demand. Although the editor isn’t comparable to the runtime in many ways already.

really nice but… what’s the value of importing textures faster if Book of the Dead: Environment doesn’t work since 2018 versions?

Comments are closed.