화면에 지오메트리를 그리기 위해 Unity는 그래픽스 API에 드로우 콜을 전송합니다. 드로우 콜은 그래픽스 API가 무엇을 그리고 어떻게 그릴지 알려 줍니다. 각 드로우 콜에는 텍스처, 셰이더, 버퍼에 대한 정보 등 그래픽스 API가 화면에 그리는 데 필요한 모든 정보가 포함되어 있습니다. 드로우 콜은 리소스를 많이 소모할 수 있지만, 드로우 콜 준비가 드로우 콜 자체보다 리소스를 많이 소모하는 경우가 많습니다.
드로우 콜을 준비하기 위해 CPU는 GPU의 리소스를 설정하고 내부 설정을 변경합니다. 이러한 설정을 렌더 상태라고 합니다. 다른 머티리얼로 전환하는 등 렌더 상태를 변경하는 작업은 그래픽스 API가 수행하는 작업 중 가장 많은 리소스를 소모하는 작업입니다.
렌더 상태 변경은 리소스를 많이 소모하기 때문에 이를 최적화하는 것이 중요합니다. 렌더 상태 변경을 최적화하는 주요 방법은 렌더 상태 변경 사항의 수를 줄이는 것입니다. 두 가지 방법으로 옮길 수 있습니다.
드로우 콜과 렌더 상태 변경을 최적화하면 애플리케이션에 많은 이점이 있습니다. 주로 프레임 시간을 개선하지만 다음과 같은 이점도 있습니다.
동일한 씬에서 여러 드로우 콜 최적화 메서드를 사용할 수 있지만 Unity는 특정 순서에 따라 드로우 콜 최적화 메서드의 우선 순위를 지정합니다. 두 개 이상의 드로우 콜 최적화 방법을 사용하도록 게임 오브젝트에 표시하는 경우 Unity는 우선 순위가 가장 높은 메서드를 사용합니다.
유일한 예외는 URP(유니버설 렌더 파이프라인) 또는 HDRP(고해상도 렌더 파이프라인)의 SRP 배처입니다. SRP 배처를 사용하는 경우 Unity는 SRP 배처와 호환되는 게임 오브젝트에 대한 정적 배칭도 지원합니다. Unity는 드로우 콜 최적화를 다음 순서로 우선시합니다.
게임 오브젝트에 정적 배칭을 설정하고 Unity가 성공적으로 배칭하면 렌더러가 인스턴싱 셰이더를 사용하더라도 Unity는 해당 게임 오브젝트에 대한 GPU 인스턴싱을 비활성화합니다. 이 경우 인스펙터 창에 정적 배칭을 비활성화하라는 경고 메시지가 표시됩니다. 마찬가지로 Unity가 메시에 GPU 인스턴싱을 사용할 수 있는 경우 Unity는 해당 메시에 동적 배칭을 비활성화합니다.