Unity의 렌더링 파이프라인을 이른바 “커맨드 버퍼”로 확장할 수 있습니다. 커맨드 버퍼는 렌더 타겟 설정, 드로우 메시 등 렌더링 커맨드의 리스트를 포함하며 카메라 렌더링 중 여러 지점에서 실행하도록 설정할 수 있습니다.
예를 들어 모든 일반 오브젝트가 완료된 후에 일부 추가 오브젝트를 디퍼드 셰이딩 G 버퍼로 렌더링할 수 있습니다.
Unity에서 카메라가 씬을 렌더링하는 고급 레벨의 개요는 아래와 같습니다. 초록색 점으로 표시된 각 지점마다 커맨드를 실행하기 위한 커맨드 버퍼를 추가할 수 있습니다.
자세한 내용은 CommandBuffer 스크립팅 클래스와 CameraEvent 열거를 참조하십시오.
또한 커맨드 버퍼는 이미지 이펙트를 대신하거나 함께 사용될 수 있습니다.
다음은 커맨드 버퍼로 가능한 기술을 보여주는 프로젝트 예제입니다. RenderingCommandBuffers.zip.
이 씬은 “흐릿한 굴절” 기술을 보여줍니다.
불투명한 오브젝트와 스카이박스가 렌더링된 후 현재 이미지가 임시 렌더 타겟으로 복사되고 흐릿해지며 전역 셰이더 프로퍼티를 설정합니다. 그런 다음, 글래스 오브젝트의 셰이더는 흐릿한 이미지를 샘플링합니다. UV 좌표는 노멀 맵에 따라 오프셋되어 굴절을 시뮬레이션합니다.
GrabPass 셰이더가 하는 일과 비슷하지만 블러링과 같은 더 많은 커스텀 작업을 수행할 수 있습니다.
이 씬은 “커스텀 디퍼드 광원”, 구체 모양의 광원, 튜브 모양의 광원의 구현을 보여주고 있습니다.
일반적인 디퍼드 셰이딩 광원 패스가 완료된 후 각 커스텀 광원에 구체가 그려지고 조명을 계산하는 셰이더와 함께 이를 조명 버퍼에 추가합니다.
이 씬은 “디퍼드 데칼”의 기본적인 구현 방법을 보여줍니다.
기본적인 개념은 G 버퍼가 완료된 후 각 데칼(박스 모양)의 “모양”을 드로우한 후 G 버퍼 콘텐츠를 수정하는 것입니다. 이는 광원이 디퍼드 셰이딩에서 처리되는 것과 매우 비슷하지만 조명을 축적하는 대신 G 버퍼 텍스처를 수정한다는 점이 다릅니다.
각 데칼은 여기 있는 박스로 구현되며 박스 영역의 모든 지오메트리에 영향을 줍니다.