3D 그래픽을 최적화하는 과정은 랜더링 파이프라인을 단순화하는 것에서 시작됩니다. 불필요한 연산을 줄이고 효율적인 랜더링을 수행하는 것이 핵심입니다.
1. 문제 진단: 프로파일링
최적화를 하기 전, 먼저 현재 성능의 병목 현상이 어디서 발생하는지를 분석해야 합니다. Unity의 Profiler와 Frame Debugger를 활용하여 CPU와 GPU의 부하를 확인하고, 최적화가 필요한 부분을 파악합니다.
2. 덜 그리기 (Draw Call 줄이기)
랜더링 성능을 높이기 위해 가장 중요한 것은 불필요한 오브젝트를 그리지 않는 것입니다.
2.1 카메라 절두체 줄이기
- 카메라의 절두체(Fustum) 크기를 조정하여 너무 멀리 있는 오브젝트를 렌더링하지 않도록 설정합니다.
- 너무 짧게 설정하면 화면에서 갑자기 오브젝트가 사라지는 문제가 발생할 수 있으므로 적절한 균형을 맞추는 것이 중요합니다.
2.2 안개(Fog) 활용
- 절두체를 줄이면 먼 거리의 오브젝트가 갑자기 사라지는 문제가 발생할 수 있음
- 이 문제를 해결하기 위해 먼 거리에 안개를 추가하여 부드럽게 오브젝트가 사라지도록 처리합니다.
2.3 오클루전 컬링(Occlusion Culling)
- 큰 오브젝트 뒤에 있는 오브젝트를 렌더링하지 않도록 설정하는 기법
- Unity의 Occlusion Culling 기능을 사용하여 카메라에서 보이지 않는 오브젝트를 자동으로 렌더링하지 않게 설정할 수 있습니다.
- 오클루더 스태틱(Occluder Static) : 뒤의 오브젝트를 가리는 역할을 하는 오브젝트
- 오클루디 스태틱(Occludee Static) : 가려져서 렌더링되지 않는 오브젝트
- 단, 모든 프로젝트에서 오클루전 컬링이 무조건 성능 향상을 가져오는 것은 아니므로 주의해야 합니다.
3. 같이 그리기 (Batching 최적화)
Draw Call이 많아지면 성능이 저하됩니다. 이를 줄이기 위해 배칭(Batching) 기법을 활용해야 합니다.
3.1 정적 배칭 (Static Batching)
- 움직이지 않는 오브젝트들은 개별적으로 그리지 않고, 하나의 메쉬로 합쳐서 한 번의 Draw Call로 처리할 수 있습니다.
- Unity에서는 Static 옵션을 활성화하면 자동으로 정적 배칭을 적용할 수 있습니다.
3.2 동적 배칭 (Dynamic Batching)
- 작은 오브젝트들은 한 번에 렌더링할 수 있도록 동적으로 배칭할 수 있습니다.
- 하지만 동적 배칭을 활용하려면 쉐이더와 머티리얼이 동일해야 하며, 폴리곤 수가 너무 많으면 오히려 성능이 저하될 수 있습니다.
4. 라이트 최적화
- **리얼타임 라이팅(Realtime Lighting)**은 성능 부담이 크므로, 가능하면 **베이크드 라이팅(Baked Lighting)**을 활용합니다.
- 그림자가 필요한 오브젝트만 Shadow Caster를 설정하고, 불필요한 경우 그림자를 꺼서 성능을 최적화합니다.
- 라이트의 수가 많아지면 GPU 부하가 증가하므로, 최소한의 라이트로 효과적인 조명을 연출하는 것이 중요합니다.
5. 텍스처 최적화
- Unity 자체적으로 텍스처를 최적화하는 데는 한계가 있으며, 제작자가 직접 최적화해야 합니다.
- **텍스처 아틀라스(Texture Atlas)**를 활용하여 여러 개의 텍스처를 하나의 큰 텍스처로 합치면 Draw Call을 줄일 수 있습니다.
- 필요 이상의 해상도를 사용하는 텍스처는 용량과 성능을 잡아먹으므로, 적절한 해상도를 유지하는 것이 중요합니다.
결론
3D 최적화를 위해서는 덜 그리고, 한번에 그리며, 조명을 효율적으로 사용하고, 텍스처를 최적화하는 과정이 필수적입니다. 프로젝트에 따라 최적화 방식이 다를 수 있으므로, 먼저 프로파일링을 통해 병목 현상을 파악한 후, 적절한 최적화 기법을 적용하는 것이 중요합니다.
'내일배움캠프 > Unity' 카테고리의 다른 글
Unity 3D 사다리 구현 (0) | 2025.03.10 |
---|---|
Unity 버프 UI 및 타이머 시스템 구현하기 (0) | 2025.03.07 |
Unity 3D 점프 발사대 구현 (0) | 2025.03.06 |
Unity AI Navigation (0) | 2025.03.05 |
Unity Input System (Send Messges / Invok Unity Events 차이점) (0) | 2025.03.04 |