유니티에서는 프로파일러(Ctrl+7)를 통해 런타임 중 어느 메서드에서 시간을 많이 소요하는지, 드로우콜이 많이 발생하는지 체크할 수 있음
어디서 어떤 항목에 병목이 발생하는지에 따라 해결 방법도 천차만별이므로 많이 경험할 수밖에 없음..
CPU Usage에서 주로 많은 것을 확인할 수 있음
내 PC의 경우 GPU Usage를 확인할 수 없었기에 CPU Usage에서 체크
Gfx.WaitForPresent 함수가 CPU 사용 프로파일러에서 가장 오래 걸린다면, 이는 CPU가 GPU를 기다리고 있다는 뜻. 즉, 이 시점에서 게임이 GPU 바운드가 된 상태
<< 최적화를 위해 주의할 사항 >>
1. 움직이는 오브젝트에는 리지드바디 포함할 것
리지드바디가 포함되지 않은 오브젝트는 유니티에서 정적인 가능성이 높은 객체로 간주
>> 리지드바디를 붙일 경우 언제든 움직일 수 있다고 인지한 상태이므로 움직임과 연산에 필요한 것들을 미리 할당해둔 상태여서 움직일 때 그렇지 않은 오브젝트에 비해 연산량이 적음
2. 개방된 환경에서는 오클루전이 큰 효과를 얻지 못함. 다만, 건물, 지형 등 변곡이 있다면 여전히 효과 유효
3. LOD : 랜더링 관련인데 멀리 떨어진 오브젝트 요소들에 대해 랜더링 해상도를 뭉갠다던지 랜더링하지 않는다(Cull 단계)던지 간략화하여 그래픽 성능 최적화. LOD0 는 적당히 낮추는 것이 중요 (유니티 LODGroup)
4. 그림자 : 빛의 영향을 받는 모든 객체가 버퍼에 랜더링. 빛에 맞은 객체가 여러번 랜더링 >> 탄을 발사할 때 Light가 포함되어 있으니 이에 따라 많은 드로우콜이 발생 >> light 효과가 미미하면 빼는 것이 상책
그 외 불필요한 light 조명들이 있다면 최대한 없애도록
+ 실시간 계산 대신 라이트맵을 구워두고 쓰거나
+ Quality 설정에서 pixel light count를 제한할 수 있음
>> 확인해보니 각 씬에는 Light 컴포넌트가 단 하나. 그러나 이펙트마다 존재 >> 이펙트에서 Light, Glow 관련 지우고 봐도 크게 퀄리티 차이를 느끼지 못해 비활성화부터 시작하는 중
5. 드로우콜: 최대한 줄이도록 노력해야 함 >> 단순한 매시로 사용(캡슐, 구, 육면체 등으로 비슷하게 대체), 여러 매시 결합하여 한번에 드로우
1) 정적 배칭(로드할 때)
Static 체크 시 메모리 증가 가능(배치된 메쉬 복제)
Runtime에서 위치 변경하면 Static이 깨져서 재배칭 비용 발생
2) 동적 배칭(런타임 중에 생성하는 것들에 대해 결합)
그러나 제약이 많아 실전에서 큰 효과 보기가 힘듦
대부분 GPU Instancing + Texture Atlas 조합을 사용
적은 종류의 머티리얼, Atlas 텍스쳐들을 사용(가능한 한 돌려쓰기) >> 동일한 소재의 측정값만 배칭하고 함께 랜더링 가능
텍스쳐를 하나의 텍스쳐로 결합 >> 이를 머티리얼에서 사용하는 큰 Atlas 텍스쳐 생성 (?) : 방법은 아직 모르겠으나 이렇게 설명
# 프로그래밍 기법으로 드로우콜을 줄이기 위해 어떻게 해야하나?
1) 오브젝트 풀링 >> 이미 적극 활용 중 >> 유도탄 생성 / 파괴가 성능 소모가 클 수 있기에 이를 풀링으로 바꾸면 좀 더 향상 가능성 있음
2) Update() 남용 금지 >> Update(), FixedUpdate() 등 반복하는 이벤트 함수들 중 빈 함수들 or 줄일 수 있는 것들은 다 확인하고 삭제해주기
3) GC.Alloc 0 만들기 >> 프로파일러 - CPU - GC.Alloc 꼭 확인
줄이는 방법
(1) string.Format 지양 -> StringBuilder 사용
(2) .ToString() 남발 금지 (로컬라이징에 많이 써서 반성..) >> 줄일 수 있는 방안 모색하기
(3) foreach에서 종종 GC 발생(var 타입) >> for 권장
(4) LINQ 대부분 할당 발생
(5) new 생성 반복 금지 >> 구조체 or 풀링 or 미리 생성해두고 이용
'Unity 3D > Inkoid' 카테고리의 다른 글
| Inkoid 튜토리얼 제작 (0) | 2026.01.11 |
|---|---|
| Inkoid 최적화 내용 정리 (0) | 2025.11.30 |
| 지스타 2025 출품 이후 Inkoid 무기 개편 (0) | 2025.11.25 |