본문 바로가기

- GameProgramming/- Unity 3D

★ 5. 드로우 콜 (Draw Call)

반응형

드로우 콜 (Draw Call)




드로우 콜 (Draw Call)은 Unity 5.x 이후부터 game - state - Batches로 확인이 가능합니다.


 - 드로우 콜이란?

CPU에서 그래픽 API 호출을 통해 GPU에 렌더링을 명령하는 것

유니티가 기본적으로 3D 게임 엔진이기 때문에 씬에 있는 버텍스들을 그리기 위해
GPU에 보내는 요청이다. 이런 버텍스들은 데이터를 가지고 있는데 위치, 노멀, UV데이터, 재질 등을 가지고
변형과 이동에 대한 계산을 위해 버텍스 버퍼에 추가된다.
버텍스 버퍼가 추가되면 그 안에 데이터가 담겨 있게 되고 화면에 그려야 될 때 그 데이터들을 처리하기 위해
복사 과정을 거치는데 만약 이런 데이터의 종류가 많아질 수록 드로우 콜이 많아진다고 생각하면 된다.

 - 드로우 콜을 줄이기 위한 기법

배칭 - 많은 명령을 합산시켜 배치를 최적화하는 작업을 뜻한다.
   (CPU가 GPU에 렌더링 요청을 할 때 데이터 처리를 위한 작업을 한꺼번에 해줘서 gpu의 부담을 줄이게 해주는 것)

 - 다이나믹(동적) 배칭

동일한 머터리얼을 공유하고 다른 조건을 만족하면 Unity는 자동으로 움직이고 있는 오브젝트를 배칭함.
동적 배칭이 자동으로 처리되므로 어떤 노력이 필요하다는 것이 아님

동적 배칭의 기본적인 규칙은
재질을 기준으로 오브젝트들의 그룹으로 묶어 관리한다.
이렇게하면 재질별로 오브젝트의 변형을 적용하고 그 결과를 내부 동적 버텍스 버퍼에 저장한 뒤
그룹으로 설정된 재질과 쉐이더를 한번에 지정하고 한번에 그려버린다.
그러나 이런 경우는 300 이하의 버텍스로 이루어진 경우에 유용하다.
왜냐하면 그리기 전 과정을 cpu에서 처리를 하는데 벡터 부동 소수점이라는 VFP 프로세서를 이용하게 된다.
그런데 버텍스가 300개 이상이라면 정적 배칭을 할시 처리 시간이 드로우 콜 시간보다 더 걸리기 때문에 그냥 하는 것이 더 좋다.

 - 스태틱(정적) 배칭

같은 Material을 사용하는 오브젝트들의 Mesh를 하나로 만들어 Draw Call을 줄이는 방법

정적 배칭을 이용하려면 오브젝트가 게임 중 움직이거나 회전하거나 스케일 하는 것이 "없다"는 것을 명시적으로 설정해야 한다.
Inspector의 Static 확인 란을 선택하면 해당 설정
주의 - 정적 배칭을 사용하면 결합된 형상 정보를 저장하는 메모리가 좀 더 많이 필요해진다. 즉, 경우에 따라서는 작은 메모리
사용량을 유지하기 위해 정적 배칭을 피하고 렌더링 성능을 희생해야 하는 경우도 있을 것이다.



반응형