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

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

shader GrabPass Base

tex2DProjはgpos.xy/gpos.wを行ってtex2Dを使うのと同じ。 w除算した場合の範囲は0~1

https://twitter.com/arumogina/status/1245004048849223685

 

Shader "Custom/GrabPassBase" {
	SubShader{
		//透明部分のあるテクスチャを使う場合
		Tags{"Queue" = "Transparent" "RenderType" = "Transparent"}
		Blend SrcAlpha OneMinusSrcAlpha

		GrabPass { "_GrabTexture" }

		Pass{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct appdata {
				float4 vertex:POSITION;
				float4 uv:TEXCOORD0;
			};

			struct v2f {
				float4 pos:SV_POSITION;
				float4 uv:TEXCOORD0;
				float4 gpos:TEXCOORD1;
			};

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

			sampler2D _MainTex;
			sampler2D _GrabTexture;
			float4 frag(v2f i) :SV_Target {
				return tex2Dproj(_GrabTexture,i.gpos);
			}
			ENDCG
		}//Pass
	}//SubShader
	FallBack "Diffuse"
}