不少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爲空,則輸出爲全黃色。測試