[TIL] 그래픽 최적화

Dreamer·2024년 11월 25일

1. 오늘 주제

오늘 주제는 예전에 그래픽 최적화에 대해 이런 방법이 있습니다. 라고 짧게 설명을 들은게 있어서 일단 주제만 남겨본다.

그래픽적으로 흔히 유니티에서는 draw call (batches)을 줄이는 방법을 이야기 하는데 아래 이미지 내용에서 cpu가 얼마나 열일하는지에 대해 간략하게 알려준다.

결국 draw call을 줄이는 방법이 핵심인데, 유니티에서는 대략적으로 4가지 정도 자체 기능을 통해 최적화를 할 수 있다.

  1. static
  • Static은 객체가 움직이지 않고 항상 동일한 상태를 유지한다고 Unity에 알려주는 설정이다. Static으로 설정된 객체는 Unity가 렌더링 및 물리 계산 최적화하기 때문에 draw call을 효과적으로 줄일 수 있는 방법이기도 하다.
    움직이지 않는 정적 객체만 설정 할 수있기 때문에 움직이지 않는 지형 지물에 적용하는 것이 좋다.
  1. lightmap
  • mesh 옵션에 라이팅옵션을 켠 상태에서 lightmap을 Bake 하게 되면 정적인 조명 정보를 사전에 계산하여 저장한 텍스처가 생성이 되는데 이 텍스처를 통해서 런타임에 cpu와 gpu 연산의 부하를 줄일 수 있다. 다만 움직이는 객체는 Bake할 수 없고 양에 따라 Bake하는 시간이 엄청 오래 걸린다.
  1. level of detail (LOD)
  • LOD 기술은 고해상도 텍스처에서 부터 저해상도 Mesh를 준비하여 거리별로 나타내는 객체의 Mesh를 가까우면 고해상도로 멀면 저해상도를 사용해서 렌더링 한다.
    이 방법으로 최적화를 한다면 대규모의 씬이나 환경에서도 높은 프레임을 유지할 수 있고 메모리를 효율적으로 관리 할 수 있게 된다. 하지만 LOD 전환 중에 발생하는 튀는 현상(티어링)이나 품질저하가 발생 할 수 있다.
  1. Occlusion Culling
  • 카메라에서 보이지 않는 객체들을 렌더링 하지 않는 기술이다. 예를 들어 벽 뒤에 있는 객체나 카메라의 시야 범위 밖에 있는 객체는 렌더링 대상으로 하지 않는 방식이다. 정적인 객체는 미리 계산할 수 있으나 동적인 객체는 런타임에서 계산한다.
    이 기술을 적용하면 렌더링 할 객체의 수를 줄이기 때문에 CPU, GPU 부하를 줄이고 프레임 속도를 향상 시킬 수 있다. 단점으로는 동적 객체를 관리하는데 어려움이 있고 성능적인 부하가 생길 수 있다. 씬의 복잡도에 따라 Occlusion 데이터가 메모리를 차지하기도 하며 Culling 대상의 오차가 생길 수도 있다.
profile
새로운 시작

0개의 댓글