[영상]
https://www.youtube.com/watch?v=52ehLUfk3DQ&list=PL7g8Lh8G4gEfPhXO06haByx6KNzCrEoXR&index=10
[정리]
[1. 오디오]
[2. Mesh]
[3.Shader Variants]
- 쉐이더 관련 메모리 프로파일링 할때는 유니티 에디터에서 말고 실제 핸드폰에 연결해서 해야함. 동작 방식이 다름
- URP에셋에서 사용하지 않는 기능들은 그냥 꺼주는게 좋다. URP Feature에 따라서도 쉐이더의 variants가 파생될 수 있다.
* 물론 shader variants가 무조건 나쁜 것은 아니다. 여러 가지 쉐이더를 런타임에 교체하면서 렌더링 해줘야한다면, 프레임 hiccup현상 (툭툭 튀는 것)을 방지하기 위해 미리 로드를 해놓고 사용해야하는데 그렇게 된다면 그만큼 메모리를 선점하기 때문에 트레이드 오프라고 생각하면 됨.
[4. Text Mesh Pro]
Text Mesh Pro의 기본적인 원리는 글자들을 미리 만들어놓고 아틀라스로 묶은 뒤 사용할 때 글자를 가져와 렌더링 하는 방식이다. 그러므로 지원하는 글자가 많다면, 특히 한글, 그만큼 메모리를 많이 차지하기 때문에 사내에서 정책을 정해 어느 정도 까지 지원을 할지 결정해야 한다.
(ex. 사람들이 잘 쓰지 않는 쀓,꿺,빦 같은 글자도 지원을 해야하는지를 의미함)
[5. Texture]
- Reflection Probe 같은 경우 하나의 정육면체 텍스쳐로 이루어져있다. 과도하게 사용할 경우 메모리에 큰 영향을 미친다.
- 텍스처 같은 경우 타겟 플랫폼에 따른 적절한 컴프레션 포맷을 사용해야하고, 불필요한 경우, 텍스처 또한 Read/Write Enabled를 해제 해줘야 한다. 옵션이 활성화 되어있으면 CPU/GPU 메모리 양쪽에 존재하게 된다.
* 만약 텍스처 포맷이 하드웨어와 호환되지 않는다면, 텍스처 원본이 생으로 메모리에 올라가게 된다.
* 예로 8MB의 텍스처가 적절히 압축이 되었다면 1MB로 줄일 수 있지만, 포맷을 잘못 설정할 경우 원본 사이즈 그대로 메모리에 올라간다.
- 모바일은 ASTC를 사용해라. 옛날에는 AOS, IOS에 따라 ETC2, PVRTC를 별도로 지정해줬는데 비교적 최근에 나온 ASTC는 자동 적용해줄 뿐더러 성능이 좋음. (4x4는 원본과 거의 다를게 없음)
* 하지만 옛날 폰에서는 지원이 안되는 경우도 있다. 그럴 경우에는 원본 텍스처를 그대로 올리기 때문에 메모리가 터질 수 있다. 그러므로 타겟 시장에 맞춰 ASTC를 사용할지 결정 해야햔다.
- ASTC는 POT뿐만 아니라 NPOT도 지원이 된다. 하지만 작업을 하다보면 POT를 쓰게 될 수 밖에 없다.
* 이유
(1) 3D게임은 Mipmap을 사용해야함.
(2) UI 또한 최적화를 위해 Sprite Atlas를 사용하는데 아틀라스는 POT만 지원한다.
'개발 (Game) > Unity' 카테고리의 다른 글
[Unity] UGUI 성능 최적화 (0) | 2024.09.17 |
---|---|
[Android] R8, Proguard 난독화 (0) | 2023.03.25 |
[Shader] 쉐이더를 처음으로 직접 작성해보다. (0) | 2021.09.01 |
[Shader] Rendering Pipeline - 래스터라이저 & 프래그먼트 쉐이더 (0) | 2021.09.01 |
[Shader] Rendering PipeLine - 버텍스 셰이더 (0) | 2021.09.01 |