빌트인 렌더 파이프라인에서 런타임 시 카메라가 일부 지오메트리를 렌더링하는 데 사용하는 셰이더를 변경하도록 지시할 수 있습니다. 이를 수행하여 에지 감지와 같은 시각적 효과를 얻을 수 있습니다.
Shader replacement is done from scripts with either the Camera.RenderWithShader or Camera.SetReplacementShader function. Both functions take a shader and a replacementTag.
It works like this: the camera renders the scene as it normally would. The objects still use their materials, but the shader they use changes:
따라서 만약 모든 셰이더가 “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”인 셰이더가 있는 모든 오브젝트는 두 번째 대체 서브셰이더를 사용합니다. 대체 셰이더에 있는 지정 키와 일치하는 태그 값이 셰이더에 없는 모든 오브젝트는 렌더링되지 않습니다.