Graphic Optimization

Ricon·2025년 3월 10일

Unity

목록 보기
5/7

Batching이란?

Batching이란 여러 개의 렌더링 요청을 하나로 묶어서 처리하는 기법

→ CPU와 GPU간의 통신 횟수를 줄여 성능을 최적화 하는 기법


왜 Batching이 필요한가

Unity에서 많은 개체를 렌더링 하면 당연하게 성능이 저하됨

  • Draw Call : CPU가 GPU에게 “이거 그려줘”라고 명령하는 과정
  • Draw Call이 많으면 CPU의 부담이 커짐 → Frame 낮아짐
  • Batching을 통해 Draw Call을 줄이면 성능이 향상됨

Draw Call 최적화

Static Batching(정적 배칭)

  • 움직이지 않는 Object들을 하나의 메쉬로 결합하여 Draw Call을 줄이는 방식
  • GameObject의 Static 옵션을 활성화하면 자동 적용


  • 한 번 Batching되면 개별 Object를 이동, 회전, 스케일 조절 불가능
  • 개별 오브젝트가 하나의 큰 Mesh로 결합되므로 메모리 사용량 증가 → Memory Overhead

Dynamic Batching(동적 배칭)

  • 작은 오브젝트들을 한 번에 묶어 배치하는 방식
  • 개별적으로 이동, 회전, 스케일을 조절할 수 있지만 일정 크기 이하(Vertices 300개 이하, Indices 900개 이하)여야 함
  • Frame마다 Batching을 계산해줘야 하므로 실시간 처리 부담 증가 → CPU Overhead

SRP Batcher(Scriptable Render Pipeline Batcher)

  • SRP Batcher는 Shader 연산을 최적화해서 Draw Call을 줄히는 방식
  • Unity의 URP, HDRP에서 지원함
  • 기본적으로 GPU Instancing과 함께 사용 가능
  • SRP Batcher가 활성화되면 기본 Batching보다 더 빠름
  • URP 사용 시 자동 활성화됨
  • Shader에서 #pragma multi_compile_instancing 추가

Occlusion Culling

  • Camera에 보이지 않는 Object는 Rendering하지 않도록 최적화
  • Camera가 가려진 Object는 연산에서 제외됨
  • 큰 맵에서 성능 향상에 효과적

LOD(Level Of Detail)

  • 거리에 따라 Low-Quality Model을 사용하여 성능 최적화
  • 가까이 있는 Object는 고해상도, 멀리 있는 오브젝트는 저해상도
  • LOD Group을 활용해서 자동으로 관리 가능
  • 삼각형 개수를 줄여 GPU 부하를 낮춤

Frustum Culling

  • 카메라 뷰(FOV) 밖의 Object는 렌더링 하지 않음
  • Unity에서 자동 지원
  • Object가 카메라 시야 밖이면 렌더링 안함

Shader, GPU Optimization

GPU Instancing

  • 동일한 Mesh와 Material을 사용하는 Object들을 GPU에서 한 번에 렌더링
  • CPU가 아닌 GPU에서 처리하므로 수천 개의 오브젝트도 빠르게 렌더링 가능
  • Material이 GPU Instancing을 지원해야 함

Compute Shader 활용(GPU 병렬 연산)

  • 복잡한 연산을 CPU가 아닌 GPU에서 병렬 처리하는 Shader

Compute Shader의 필요성

  • Compute Shader는 Visual 연산뿐만 아니라, 물리, AI, Particle등 다양한 GPU 연산 수행 가능
  • CPU 연산보다 빠름(대량 데이터 병렬 처리)
  • Unity에서 ComputeBuffer를 사용해 CPU ↔ GPU 데이터 교환 가능

0개의 댓글