-
[Memo] 최적화 ABCUnity/3D 2020. 5. 8. 23:12
최적화는 크게 3단계에서 봐야할 것 같다.
(1) Baked: 미리 준비되어야 할 것들이 잘 구워졌는가?(2) 용량: 지나치게 용량이 큰 파일이 없는가
(3) Tris & Verts : 삼각형과 꼭지점, 즉, 메쉬(Mesh)를 너무 많이 부른 것은 아닌가?
(1)-1) 라이트맵
라이트맵(Light Map)은 정적(Static) 광원이 정적(Static) 오브젝트(Objects)에게 어떻게 빛을 비추는지 미리 계산해서 텍스처(Textures)로 만드는 것이다. 왜 광원을 미리 저장해서 하냐면, 동적 광원의 경우 Tris & Verts 값을 뻥튀기 시키기 때문이다. 가령 배경 포함해서 tris가 10만인 맵에 동적 광원 하나 쏴주면, tris가 20만까지 치솟는다.
https://docs.unity3d.com/kr/current/Manual/Lightmapping.html
라이트매핑: 시작하기 - Unity 매뉴얼
이 페이지에서는 Unity의 라이트매핑에 대해 소개합니다. 라이트매핑은 씬의 표면 밝기를 미리 계산하고 계산 결과를 나중에 사용하기 위해 차트 또는 “라이트맵”에 저장하는 프로세스입니다.
docs.unity3d.com
- 라이트 프로브(Light Probes) & 리플렉션 프로브(Reflection Probes)
다만 정적 광원이 동적 오브젝트에 아무런 영향을 못준다면 굉장한 어색함을 느낄 것이다. 그것을 방지 하기 위해 정점(probe)를 기준으로 각 방향에서 들어오는 빛과 반사를 미리 저장 해놓고, 동적 오브젝트들이 근처에 왔을 때 가까운 프로브들의 값을 참조하여 광원효과를 낸다.
https://docs.unity3d.com/kr/current/Manual/LightProbes.html라이트 프로브 - Unity 매뉴얼
라이트 프로브(Light Probes) 를 통해 씬의 빈 공간을 지나가는 빛에 대한 정보를 파악해서 사용합니다.
docs.unity3d.com
https://docs.unity3d.com/kr/current/Manual/ReflectionProbes.html
반사 프로브 - Unity 매뉴얼
CG 필름 및 애니메이션에서는 일반적으로 매우 실감나는 반사 효과를 보여주는데, 이는 씬에 있는 오브젝트 간의 “상호 작용”을 표현하는 데 중요한 역할을 하는 요소입니다. 하지만 이러한 반사의 정확도를 향상시키려면 작업을 처리하는 데 더 많은 시간이 소요됩니다. 영화 제작의 경우 시간 비용이 크게 문제가 되지 않지만, 게임의 오브젝트에 반사 효과를 실시간으로 적용하려면 시간적인 제한이 따를 수 밖에 없습니다.
docs.unity3d.com
(2)-1) 빌드 용량 확인: 텍스처
빌드를 하게되면 각각의 파일이 얼마나 용량을 차지하는지 확인을 할 수 있다. 콘솔 탭에서 우클릭하여 Open Editor Log를 클릭한다.
Used Assets and files from the Resources folder, sorted by uncompressed size: 13.0 mb 1.7% Resources/unity_builtin_extra 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/VolleyballNet01ColumnOld_Metallic.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse02Old_Metallic.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse01Old_Metallic.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportBasketHoop01Old_Metallic.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/VolleyballNet01ColumnOld_NM.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse02Old_NM.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse01Old_NM.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportTrampline01Old_Metallic.png 5.3 mb 0.7% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportMattress01Old_Metallic.png
대충 다음과 같은 로그를 찾을 수 있다. 위는 최적화 전의 용량으로 각각의 텍스처 이미지가 5.3mb를 차지함을 알 수 있다. 모든 텍스처를 고해상도(2048)로 써서 유저에게 미려한 그래픽을 보여주면 얼마나 좋겠냐만은... 현실적으로 그러는 것은 무리가 있기 때문에 이를 적정하게 줄여주어야 한다.
2048에서 1024로 줄어든다면, 용량은 4분의 1로 줄어든다. 512면 16분의 1로 줄어드는 셈.341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/VolleyballNet01ColumnOld_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse02Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportVaultingHorse01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportBasketHoop01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Textures/Surfaces/Tile/TileArmstrong01_04OldSpec.tga 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportTrampline01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/SportMattress01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Sport/Textures/PingPongTable01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/Furniture/Textures/SchoolLocker01Old_Metallic.png 341.5 kb 0.0% Assets/TirgamesAssets/SchoolScene/Models/Interior/BathToilet/Textures/ToiletCabinet01Old_Metallic.png
이것만으로도 빌드 후 용량을 780메가에서 160메가로 대폭 줄였다. 물론 막무가내로 줄일 수는 없고, 비교적 안 중요한 오브젝트 위주로 텍스처를 팍팍 줄여주자.
(2)-2) 빌드 용량 확인: 셰이더(Shader)
https://docs.unity3d.com/kr/2018.4/Manual/OptimizingGraphicsPerformance.html
그래픽스 퍼포먼스 최적화 - Unity 매뉴얼
훌륭한 퍼포먼스는 많은 게임의 성공을 결정짓는 중요한 요소입니다. 게임의 렌더링 속도를 최대로 끌어올리는 간단한 가이드라인을 아래에 소개합니다.
docs.unity3d.com
Shader Variants가 지나치게 많이 만들어지지 않는지 확인한다. 솔직히 이부분은 좀 더 공부가 필요할 것 같다. Mtoon 쉐이더의 경우, 막무가내로 모든 조합을 컴파일해 무려 2500개가 넘는 Shader Variants를 생성했었는데, 몇몇 설정을 조절해줌으로써 74개로 극적으로 줄였다. 물론 여전히 많다고 생각하지만...
조정 전의 셰이더 용량 (142.7mb)
Build Report Uncompressed usage by category (Percentages based on user generated assets only): Textures 64.8 mb 21.0% Meshes 16.3 mb 5.3% Animations 6.1 mb 2.0% Sounds 628.2 kb 0.2% Shaders 142.7 mb 46.3% Other Assets 7.2 mb 2.3% Levels 7.6 mb 2.5% Scripts 1.5 mb 0.5% Included DLLs 13.3 mb 4.3% File headers 48.1 mb 15.6% Total User Assets 308.4 mb 100.0% Complete build size 665.0 mb Used Assets and files from the Resources folder, sorted by uncompressed size: 102.5 mb 15.4% Resources/unity_builtin_extra 39.1 mb 5.9% Assets/VRM/MToon/MToon/Resources/Shaders/MToon.shader 3.8 mb 0.6% Assets/TirgamesAssets/SchoolScene/Scenes/SchoolSceneAssets/SchoolTerrainAbandoned.asset
조정 후의 셰이더 용량 (48.1mb)Build Report Uncompressed usage by category (Percentages based on user generated assets only): Textures 64.8 mb 30.3% Meshes 16.3 mb 7.6% Animations 6.1 mb 2.9% Sounds 628.2 kb 0.3% Shaders 48.1 mb 22.5% Other Assets 7.2 mb 3.4% Levels 7.6 mb 3.6% Scripts 1.5 mb 0.7% Included DLLs 13.3 mb 6.2% File headers 48.1 mb 22.5% Total User Assets 213.8 mb 100.0% Complete build size 479.3 mb Used Assets and files from the Resources folder, sorted by uncompressed size: 46.8 mb 9.8% Resources/unity_builtin_extra 3.8 mb 0.8% Assets/TirgamesAssets/SchoolScene/Scenes/SchoolSceneAssets/SchoolTerrainAbandoned.asset ... 597.5 kb 0.1% Assets/VRM/MToon/MToon/Resources/Shaders/MToon.shader
모바일의 경우, standard 대신에 mobile이나 unlit 카테고리에서 셰이더를 선택하는 것도 하나의 방법인 듯하다.(3)-1) tris & verts 최적화: 폴리곤 줄이기
지나치게 많은 폴리곤을 가지고 있는 모델은 폴리곤 수를 줄인다. 유니티 Free Asset 중에 Mesh Optimizer가 있다. 나름 쓸만하다.
https://assetstore.unity.com/packages/tools/modeling/mesh-optimizer-154517
Mesh Optimizer | 모델링 | Unity Asset Store
Get the Mesh Optimizer package from IndieChest and speed up your game development process. Find this & other 모델링 options on the Unity Asset Store.
assetstore.unity.com
(3)-2) Terrain Trees & Details
나무와 잔디 같은 악세사리가 생각보다 Draw Call을 많이 야기하는 경우가 있다. 모바일 환경에서는 함부로 쓰기 어려운 녀석인 듯하다.
(3)-3) Occlusion 사용하기
(3)-4) Mesh Combine 사용하기
동일한 머테리얼을 사용하는 메쉬는 메시 컴바인 기능을 사용해서 하나의 메시처럼 활용할 수 있다. 드로우콜을 확 줄여준다고 한다.
(3)-5) LOD 사용하기거리에 따라 보여주는 것을 달리한다. 가령 멀리 있을 땐 골대 그물은 안보여 주다가 가까이 다가가면 보여주는 방식으로 조절을 할 수 있다.
'Unity > 3D' 카테고리의 다른 글
[Tip] Vroid 와 Unity의 연동 (0) 2020.04.28