화면에 게임 오브젝트를 그리려면 엔진이 그래픽스 API(OpenGL, Direct3D 등)에 그려달라고 요청을 보내야 한다.
이를 DrawCall이라고 한다. 이 값이 적을수록 가벼운 게임이라 할 수 있다.
Batch는 DrawCall을 포함 하는 상위 개념이다. (Batch = Draw Call + Set Transform + Set Pass Call + Set VB/IB)
Set Pass Call: Material과 Shader와 관련괸 것들에 대한 Batch를 말한다. DrawCall이 실행되었을 때 material이 변한지를 먼저 체크한다. 만약 material의 변화가 없다면 Set Pass Call없이 렌더링을 진행한다. 따라서 Batch의 갯수를 줄이기엔 한계가 있기 때문에 보통은 Set Pass Call을 줄이는 방식으로 최적화가 진행된다.
드로우 콜에는 리소스가 많이 사용되고, 그래픽스 API가 모든 드로우 콜에 중요 작업을 수행함으로 인해 CPU성능이 많이 사용될 수 있다.
이를 해결하기 위해 Unity에서는 두 가지 기법을 사용한다.
- 동적배칭: material을 공유하고, 특정 조건들들 만족하는 메시들을 묶어서 DrawCall하는 방법이다. 이를 통해 한번의 배치로 렌더할 수 있다. 하지만 각 메시들과 별개로 메시들을 합친 새로운 메시 형태의 메모리가 추가적으로 필요하다.
- 정적배칭: Static 체크가 되어 있는 경우(물체의 움직임이 없는 경우) 동일한 Material을 공유할때 일어난다. 메쉬를 강제적으로 합쳐서 넘겨주는 방식이라 메모리에 부담을 준다. 하지만 눈에 띄는 효과가 나오기 때문에 CPU파워를 줄여햐 할 경우 정적 배칭을 사용한다.
배칭은 복수의 Draw Call을 하나의 Draw Call로 묶어서 처리하는 작업을 말한다.
위의 두 배칭의 차이는 Static체크박스의 체크 여부에 따라 달라진다.
그 외에도 최적화 기법이 몇가지 더 존재한다.
- 텍스쳐 아틀라스(Texture Atlas): 여러 이미지들을 한 묶음으로 만드는 기법. 아틀라스로 텍스쳐들을 하나로 묶어주면 메테리얼들을 일괄적으로 처리 가능해서 드로우 콜을 줄일 수 있다.
- 라이트 맵: 미리 맵을 이미지로 만드는 것.(Baked) 이렇게 구워진 맵을 라이트 맵이라고한다.
- 오클루젼 컬링(Occulusion Culliung): 어떤 오즈젝트에 완전히 가져린 오브젝트의 렌더링을 무효화 하는 기법. 적용 오브젝트에 static체크를 해주어야 하며 따로 static 설정을 해줄 수 있다.
'TIL' 카테고리의 다른 글
2024/03/02 TIL (MonoBehaviour의 주요 이벤트 함수) (0) | 2024.03.11 |
---|---|
2024/02/25 TIL (MVC모델) (0) | 2024.02.25 |
2024/02/25 TIL (Light Probe) (0) | 2024.02.25 |
2024/02/25 TIL (Localization 사용법) (0) | 2024.02.25 |
2024/02/06 TIL (1) | 2024.02.07 |