不少Shader中都会定义RenderType这个类型,可是一直搞不明白究竟是干吗的,官方文档是这样结解释的:Rendering with Replaced Shadershtml
shader经过camera中 Camera.RenderWithShader 和 Camera.SetReplacementShader实现替换功能,这两个方法都接受两个参数:Shader和replacementTag ,根据状况:app
Shader "Unlit/BlueShader" { Properties { _Color("Color",Color) = (0,0,0,1) } SubShader { Tags { "RenderType"="transparent" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata {float4 vertex : POSITION;}; struct v2f{ float4 vertex : SV_POSITION; }; fixed4 _Color ; v2f vert (appdata v){ v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);return o; } fixed4 frag (v2f i) : SV_Target{ fixed4 col = _Color;return col; } ENDCG } } }
Shader "Unlit/RedShader" { Properties { _Color("Color",Color) = (0,0,0,1) } SubShader { Tags { "RenderType"="transparent" } pass {} } }
Shader "Unlit/ReplacementShader" { Properties { _Color("Color",Color) = (0,0,0,1) } SubShader { Tags { "RenderType"="transparent" } pass { ... //输出为黄色,若是替换了输出为黄色 fixed4 frag (v2f i) : SV_Target { fixed4 col = fixed4(1,1,0,0); return col; } ... } } }
public class ReplaceMent : MonoBehaviour { public Shader rpShader; // Use this for initialization void Start () { //所有替换渲染 //GetComponent<Camera> ().SetReplacementShader(rpShader,""); //RenderType="rpShader中RenderType"的sunshader进行渲染, GetComponent<Camera> ().SetReplacementShader(rpShader,"RenderType"); } }
执行前
执行后
函数
若是在SetReplacementShader函数中tag为空,则输出为全黄色。测试