[내배캠] 최종 프로젝트 #14. 유니티 렌더링과 최적화

Sungchan Ahn(안성찬)·2024년 12월 23일

내일배움캠프

목록 보기
87/104

유니티 렌더링

1. Draw Call

  • GPU에 특정 객체를 그리도록 요청하는 명령
  • 객체마다 메쉬, 머티리얼, 쉐이더 등의 설정이 필요
  • 성능에 미치는 영향
    • Draw Call이 많아지면 CPU가 병목 상태에 빠짐
    • CPU가 렌더링 명령을 처리하는 데 많은 시간을 소모
    • GPU는 CPU에서 Draw Call 명령이 전달되기 전까지 다음 렌더링 작업을 시작하지 못해 대기 시간이 증가하여 효율성이 저하됨
  • 프레임 드랍, 렌더링 지연, 배터리 소모 증가

2. SetPass Call

  • GPU에 특정 쉐이더와 머티리얼 상태를 설정하도록 요청하는 명령
  • 쉐이더와 머티리얼이 변경될 때마다 SetPass Call이 발생 => 비용이 큼

3. Batches

  • GPU로 데이터를 전달하는 작업 단위

  • 쉽게 Draw Call + SetPass Call이라고 보면 됨

  • 종류:

    • Static Batching: 움직이지 않는 객체를 묶어 처리 (맵의 배경 등 / Inspector 창에서 Static을 체크하면 활성화)
    • Dynamic Batching: 작은 동적 객체들을 묶어 처리
    • GPU Instancing: 동일한 메쉬와 머티리얼을 사용하는 객체를 한 번의 드로우로 처리
  • 최적화 방법
    1. Batching 활용
    Static Batching과 Dynamic Batching을 잘 구분해서 사용

    2. 머티리얼 최적화
    동일한 머티리얼 사용, 아틀라스 사용

    3. GPU Instancing 사용
    material의 Enable Instancing 옵션 활성화
    커스텀 쉐이더 확인 필요

    4. 오브젝트 병합 및 분리
    병합: 작은 메쉬를 병합하여 Batch 줄이기
    분리: 너무 큰 메쉬나 동일 머티리얼을 공유하지 않는 객체를 분리

    5. Occlusion Culling 사용
    카메라에 보이지 않는 객체를 렌더링하지 않도록 하는 것
    설정: Window > Rendering > Occlusion Culling

    6. LOD(Level of Detail) 적용
    멀리 있는 객체는 저해상도 메쉬와 텍스처 사용
    LOD Group 컴포넌트 사용

    7. 쉐이더와 렌더링 설정
    비용 적은 쉐이더 사용: Mobile/Unlit 등
    Forward Rendering 사용: 필요 시 사용

    8. 조명 최적화
    정적 조명 사용: Baked Lighting
    조명 종류와 개수 줄이기: 쉐도우 품질 낮추기

    9. 스크립트 및 물리 엔진 최적화
    성능 병목 최적화: 스크립트나 물리 연산 최적화


성능 확인

Window > Analysis

  • 유니티 Profiler
  • Frame Debugger

게임 뷰 > Stats에서 FPS, Batches, SetPass Call 확인

profile
게임 개발 기록

0개의 댓글