Drawcall 땜시 고생좀 하다가 삽질하면서 알아낸 결과물입니다.

1. Drawcall이란?

화면에 Material을 1개 그리면 1DrawCall이 됩니다.
예를 들어, Mesh1과 Material1을 그리면 Drawcall 1입니다.
Mesh1, Mesh2를 Material1로 그리면 Drawcall 1입니다만, Mesh1은 Material1, Mesh2는 Material2로하면 Drawcall이 2가됩니다.
이는 DirectX든 OpenGL이든 똑같습니다.

* 인터넷에서 퍼온 Drawcall관련 자료입니다.
Mesh는 재각각이지만, Material이 1개이기 때문에 Drawcall 숫자는 1로 찍힙니다.
사용자 삽입 이미지


2. Drawcall이 증가하는게 왜 문제인가?

성능과 직결되는 문제이기 때문입니다. 예를 들어 위의 설명했지만, Mesh 데이터보다 텍스쳐로 사용되는 데이터의 크기가 더 큽니다. 만약 압축이 되어 있다면 압축을 해제해야 하는 문제도 생기겠죠? 암튼, Material을 GPU로 전송하는 수가 작을 수록 더 훌륭한 속도가 보장됩니다.
* PC기준이지만 좋은 자료 : http://www.slideshare.net/egohim/unity ··· imzation

3. 어떻게 해야하나?
자주 호출하는 것보다 VBO같은곳에 모아서 한꺼번에 찍어대면 Drawcall하는 횟수가 줄어서 궁극적으로는 성능이 개선될 수 있습니다. 배치방법은 2가지 방식으로 유니티에서는 지원하더군요.
- Dynamic Batch (움직이거나, 회전하거나, 커지거나, 작아지는!)
  . 300 Tris이하의 오브젝트 (만약에 자식 오브젝트로 등록하더라도... 똑같이 적용됩니다. 무조건 300 Tris)
  . Material을 1개의 Atlas에 다 때려넣어 주세요.
    (추천하는 Plugin은 Atlas 3D : http://u3d.as/content/tracki-studio/at ··· ui%2F5a0 단, NGUI사용자여야 합니다.)
  . Skinned Mesh 또는 실시간 그림자를 받는 녀석은 안됩니다.
- Static Batch (꿈쩍하지 않는녀석)
  . 우측상단에 Staic 체크해두면 알아서 돕니다.



2013/11/08 00:33 2013/11/08 00:33

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다