빌트인 렌더 파이프라인에서 런타임 시 카메라가 일부 지오메트리를 렌더링하는 데 사용하는 셰이더를 변경하도록 지시할 수 있습니다. 이를 통해 에지 감지 같은 시각 효과를 구현할 수 있습니다.
셰이더 교체는 Camera.RenderWithShader 또는 Camera.SetReplacementShader 함수를 사용하는 스크립트에서 수행됩니다. 두 함수 모두 셰이더 및 replacementTag 를 사용합니다.
이는 다음과 같이 작동합니다. 카메라는 일반적으로 씬을 렌더링합니다. 오브젝트는 여전히 머티리얼을 사용하지만 사용하는 셰이더가 변경됩니다.
예를 들어 모든 셰이더에 ‘Opaque’, ‘Transparent’, ‘Background’, ‘Overlay’ 같은 값이 있는 ‘RenderType’ 태그가 있다면 RenderType=Solid 태그가 있는 서브셰이더를 사용하여 솔리드 오브젝트만 렌더링하는 대체 셰이더를 작성할 수 있습니다. 대체 셰이더에서 다른 태그 유형은 찾을 수 없으므로 오브젝트가 렌더링되지 않습니다. 또는 서로 다른 ‘RenderType’ 태그 값의 여러 서브셰이더를 작성할 수도 있습니다. 모든 빌트인 셰이더 오브젝트에는 ‘RenderType’ 태그가 설정되어 있습니다.
셰이더 대체를 사용할 때 씬은 카메라에 설정된 렌더 경로를 사용하여 렌더링됩니다. 즉, 교체에 사용되는 셰이더에는 그림자 및 조명 패스가 포함될 수 있습니다(셰이더 교체에 표면 셰이더를 사용할 수 있음). 이는 특수 효과의 렌더링과 씬 디버깅을 수행할 때 유용할 수 있습니다.
모든 빌트인 셰이더는 RenderType 태그 집합을 가지고 있으며 대체 셰이더로 렌더링할 때 사용할 수 있습니다. 태그 값은 다음과 같습니다.
카메라에는 일부 효과에 필요한 경우 뎁스 또는 뎁스+노멀 텍스처를 렌더링하는 빌트인 기능이 있습니다. 카메라 뎁스 텍스처 페이지를 참조하십시오. (하드웨어에 따라) 셰이더 대체를 사용하여 뎁스 및 뎁스+노멀 텍스처를 내부적으로 렌더링할 수도 있습니다. 따라서 셰이더에 올바른 ‘__RenderType__’ 태그가 있어야 합니다.
Start() 함수는 대체 셰이더를 지정합니다.
void Start() {
camera.SetReplacementShader (EffectShader, "RenderType");
}
이렇게 하면 EffectShader가 RenderType 키를 사용하도록 요청합니다. EffectShader에는 원하는 각 RenderType에 대한 키-값 태그가 포함됩니다. 이 셰이더는 다음과 같습니다.
Shader "EffectShader" {
SubShader {
Tags { "RenderType"="Opaque" }
Pass {
...
}
}
SubShader {
Tags { "RenderType"="SomethingElse" }
Pass {
...
}
}
...
}
SetReplacementShader는 씬의 모든 오브젝트를 살펴보고, 노멀 셰이더를 사용하는 대신 지정된 키의 값과 일치하는 첫 번째 서브셰이더를 사용합니다. 이 예시에서 셰이더에 Rendertype=“Opaque” 태그가 있는 모든 오브젝트는 EffectShader의 첫 번째 서브셰이더로 대체되고, RenderType=“SomethingElse” 셰이더가 있는 모든 오브젝트는 두 번째 대체 서브셰이더를 사용합니다. 교체 셰이더에서 지정한 키에 일치하는 태그 값을 가지지 않은 셰이더가 있는 오브젝트는 렌더링되지 않습니다.