본문으로 바로가기

Draw call 과 Batching, culling

category Technical Report/Unity Shader 2013. 2. 4. 12:21
반응형

Draw call


 화면상에 그려지는 메쉬에 대한 정보(Texture + shader + 기타 설정값)를 비디오 카드에 보낼때 1번의 Draw call 발생. 이를 Draw call이라 정의(메쉬 변화에 따른 부하는 크지 않으나 Texture 혹 shader 변화에 따른 부하는 크게 발생하는듯)




Batching


 하나의 Material을 공유하는 여러개의 메쉬를 합쳐서 연산할경우 Draw call에 대한 부담을 줄일수 있게 된다. 이렇게 여러개의 오브젝트를 하나의 Draw call로 처리할수 있게 처리하는것을 Batching이라고 한다.


- Dynamic Batching : 한번의 Drawcall로 여러번 그릴수 있어 UI쪽에 많이 쓰이나 vertex 수 제한이나 scale 제한 등의 조건이 까다로워 사용하기 어려운 면이 존재.(Unity의 경우 Static flag 체크가 안된, 300 vertex 이하의 물체에 대해서만 Dynamic batching을 적용해줌)


- Static Batching : 같은 Material을 사용하는 오브젝트들의 Mesh를 하나로 만들어 Draw call을 줄이는 방법. 단, 구역별로 오브젝트의 Material을 묶어줘야 효율적.(전체로 묶여있으면 보이지 않는 부분까지 culling 되지 않고 그려버리기 때문. Unity에서는 Static flag가 체크된 오브젝트에 대해). 대신 많은수의 오브젝트를 하나로 합쳐놓았을 경우 메모리 소모가 커지므로 임의로 mesh를 쪼개주는것이 보다 효율적일 수 있다.


메쉬별로 대충 1500~4000개의 폴리곤이 렌더링 퍼포먼스에 최적화된 폴리숫자는 이정도 영역이라 보통 말한다.


Unity Batching에 대한 기술문서 : http://forum.unity3d.com/threads/138929-batching-trees-%96-and-speed-up-rendering


Optimizing Graphic's Performance : http://chulin28ho.tistory.com/8



- 이미지에서 확인할 수 있듯 89개의 Draw call, Batching : 0 인 오브젝트가 13개의 Draw call, Batching : 0 까지 줄어든걸 확인 할 수 있다.(물론 script로 처리한 결과이기는 하지만~)





Culling


 연산을 줄이기 위해 불필요한 부분을 그리지 않는 것.


Frustum Culling : 카메라 영역안에 있는 오브젝트만을 렌더링 하는 방식


Occlusion culling : 오브젝트에 의해 가려진 부분은 그리지 않고 카메라 시야에 보이는 부분만을 그려주는 방식. 오브젝트가 복잡하게 많이 배치된 경우 차폐 연산자체가 무거워져 이 부분에 대한 코스트가 증가해서 비효율적이 될 수 있음. 상황에 따른 적절한 셋팅이 중요함.(열린 형태의 맵에서는 효율이 떨어지므로 좁거나 시야를 많이 가리는 형태의 맵에서는 유용하게 사용될 수 있다.). 또한 맵 로딩방식이 seamless인지 zone loading인지도 고려해야 할 사항.


-------------------------------------------------------------------------------------------


즉, 하나의 큰 맵에서 동일한 material을 사용한 오브젝트를 여러개로 나눌것인지, 하나로 합칠것인지는 씬의 카메라 이동과 맵 크기에 따라 적절히 조절하는것이 Draw call을 줄일수 있는 방법이 될 것이다.


너무 잘게 쪼개어 놓을경우 batching 카운터가 증가하며, 큰 화면에 모든 오브젝트를 하나로 합칠경우 화면에 보이지 않는 오브젝트에 대해서도 culling이 되지 않으므로 적절히 분배하는것이 퍼포먼스 향상에 도움이 될듯.


Batching을 적절히 나누어 주면 좋으나 너무 잘게 쪼개어 버리면 이걸로 또 코스트가 증가하니 씬에 따라 적절히 분배해서 배치하는게 가장 효율적으로 보임.

반응형