イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Shader ステンシルバッファ

f:id:arumogina:20190610192300p:plain

 

Shader "Custom/HideStencil" {
	Properties{
		_MainTex ("Texture",2D) = "white" {}
	}
	SubShader{
		Tags { "RenderType"="Opaque"
						"Queue"="Transparent+1"}
		Pass{
			Stencil{
				Ref 1
				Comp Equal
			}
			Cull Off
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct appdata{
				fixed4 vertex: POSITION;
				fixed2 uv: TEXCOORD;
			};

			struct v2f{
				fixed4 vertex: SV_POSITION;
				fixed2 uv: TEXCOORD;
			};

			v2f vert(appdata v){
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				return o;
			}

			sampler2D _MainTex;

			fixed4 frag(v2f i ) : SV_Target{
				fixed4 color = tex2D(_MainTex,i.uv);
				return color;
			}
			ENDCG
		}//pass
	}//SubShader
	FallBack "Diffuse"
}

Shader "Custom/SetStencil" {
	SubShader {
			Tags { "RenderType"="Transparent"}

			Stencil {
					Ref 1
					Comp always
					Pass replace
			}
			Cull Back
			CGPROGRAM
			#pragma surface surf Lambert alpha

			struct Input {
					fixed3 Albedo;
			};

			void surf (Input IN, inout SurfaceOutput o) {
					o.Albedo = fixed3(1, 1, 1);
					o.Alpha = 0;
			}
			ENDCG
	}
	FallBack "Diffuse"
}

 

SetStencilをマスクに、HideStencilをターゲットのオブジェクトにセットする。

RenderQueueをマスクを3000に、ターゲットを3001にセットする

(先にステンシルバッファへの書き込みが必要なため)