커맨드 버퍼를 통해 Unity의 빌트인 렌더 파이프라인을 확장할 수 있습니다. 커맨드 버퍼에는 카메라 렌더링 동안 다양한 지점에서 실행되는 렌더링 커맨드 리스트가 들어 있습니다. 커맨드 버퍼가 실행할 Unity 빌트인 렌더 파이프라인의 포지션을 지정하려면 CameraEvent 열거형을 사용하십시오.
예를 들어 AfterGBuffer CameraEvent가 포함된 커맨드 버퍼를 사용하면 파이프라인이 모든 불투명 게임 오브젝트를 처리한 후 추가 게임 오브젝트를 디퍼드 파이프라인으로 렌더링할 수 있습니다.
아래에는 카메라가 포워드 또는 디퍼드 파이프라인을 사용하여 Unity의 씬을 렌더링하는 고급 레벨의 개요가 나와 있습니다.
자세한 내용은 CommandBuffer 클래스와 CameraEvent 열거형을 참조하십시오. 또한 커맨드 버퍼를 이미지 효과와 함께 또는 대신 사용할 수도 있습니다.
다음 예제 Unity 프로젝트는 커맨드 버퍼를 통해 만들 수 있는 일부 효과를 보여줍니다. RenderingCommandBuffers.zip.
이 씬은 흐릿한 굴절을 만들기 위해 사용할 수 있는 방법을 보여줍니다. Unity 불투명 오브젝트와 스카이박스를 렌더링하고 나면 현재 이미지를 임시 렌더 타겟으로 복사한 후 흐릿하게 만듭니다. 그런 다음 글래스 셰이더가 흐릿해진 이미지를 샘플링하고, 노멀 맵을 사용하여 굴절을 시뮬레이션하기 위한 UV 좌표를 오프셋합니다. 이 방법은 셰이더 GrabPass와 유사합니다.
이 씬은 커스텀 디퍼드 구체 모양 및 튜브 모양 광원을 만들기 위한 방법을 보여줍니다. Unity가 일반 디퍼드 라이트 패스를 처리하고 나면 각 커스텀 광원에 대한 구체를 그립니다. 그런 다음 각 구체는 셰이더를 사용하여 조명을 계산한 후 라이팅 버퍼에 추가합니다.
이 씬은 디퍼드 데칼을 처리하기 위한 기본 방식을 보여줍니다. Unity가 G버퍼를 처리하고 나면 각 데칼을 그리고 G버퍼의 콘텐츠를 수정합니다. 이 방법은 Unity가 디퍼드 파이프라인에서 광원을 처리하는 방식과 유사하지만, 조명을 축적하는 것이 아니라 G버퍼 텍스처를 수정한다는 점에서는 차이가 있습니다. 이 방법은 각 데칼을 상자로 처리하고, 상자 영역 내 지오메트리에만 영향을 줍니다.