참치김밥은 최고의 한식이다

[유니티] 메모리 최적화를 위한 에셋 관리 본문

Unity/최적화

[유니티] 메모리 최적화를 위한 에셋 관리

l__j__h 2024. 2. 20. 16:47

해당 문서는 아래 영상을 토대로 작성하였음

https://www.youtube.com/watch?v=52ehLUfk3DQ

 

중복 리소스

  • 유니티는 중복 파일 체크 X
  • 실수로 동일한 파일을 다른 폴더에 넣는 경우 비일비재

Mesh

  • Mesh Compression은 저장 용량 관련임
  • → 메모리 사용량과는 무관함
  • Read/Write enable
    • 중복된 용량을 올려두므로 꺼두는게 좋음 (2019.3 부터는 기본 꺼짐)
  • 필요하지 않으면, 꺼두면 좋은 옵션들
    • Rig
      • 지금 사용하는 메시가 배경메시, 스태틱메시 즉 움직일 필요가 없으면 Rig 옵션은 꺼도 됨
    • BlendShapes
      • 마찬가지로 사용하려는 메시가 움직이지 않는 메시이면 꺼도
    • Normal
    • Tangent
    • Lightmap UVs
    • Generate Colliders

Shader Variants 최적화

Shader Stripping

If you disable a feature, HDRP strips any shader variants where the feature is enabled.

→ Lightmap Modes, Fog Modes 에서 Custom을 선택하면, 아래 여러 개의 체크박스가 토글로 뜬다. 디폴트로는 다 선택이 되어 있는데, 선택 해제를 하면 해당 feature에 대해서 Shader Stripping이 들어간다. 즉, 프로젝트에서 사용하지 않는 built-in fog shaders를 strip하고 싶다면, FogModes를 Custom으로 변경하고, Linear과 Exponential과 Exponential Squared를 체크 해제하면 된다.

→ Decals 관련 쉐이더 Variants를 비활성화 하고 싶다면, HDRP assets을 찾아 인스펙터에서 Decals를 꺼주면 된다.

→ HDRP가 사용하지 않는 Lightmaps를 strip하려면, 위의 Shader Stripping 설정에서 Lightmap Modes를 Custom으로 하고, Baked Directional 외에 모두 체크 해제해주면 된다.

다른 유용한 경우는 아래 문서의 Strip feature shader variants 섹션에 표로 잘 나와 있다.

https://docs.unity.cn/Packages/com.unity.render-pipelines.high-definition@12.1//manual/Shader-Stripping.html

 

Reduce shader variants in your build | High Definition RP | 12.1.12

Reduce shader variants in your build The standard shaders in the High Definition Render Pipeline (HDRP) support a lot of different features, which can mean Unity compiles a lot of shader variants. To avoid your build growing too big, HDRP automatically exc

docs.unity.cn

 

Text Mesh Pro

  • 글자들을 미리 텍스처로 제작함
  • 영미권 언어는 큰 문제 없음 알파벳 몇십글자만 구우면 되니깐
  • 근데 한글은 초성 중성 종성 조합 방식… → 한글 2350자, 추가 129자로 합해서 약 2500글자들을 텍스처 아틀라스로 미리 구워놓음 → 당연히 메모리 차지 빵빵함
  • Font Asset Creator 에서..
    • Atlas Resolution : 생성된 문자 텍스처 아틀라스의 크기가 몇이냐. 4096x4096으로 설정을 많이 하는데, 크기 짱 크니 주의 필

TMP의 종류

  • Static
    • 사용될 모든 문자 아틀라스를 미리 생성
    • 런타임시 원본 폰트가 필요 없음
    • NPC의 대화 스크립트 등, 개발자가 예측 가능한 문자에 유용함
  • Dynamic
    • 실시간으로 필요한 폰트 아틀라스 갱신
    • 런타임시 원본 폰트 필요
    • 채팅 등, 사용 문자들의 범위 예측 불가능 시 유용
    • 런타임 메모리에 영향을 줌
    • 좀 느려짐
728x90