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

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

shader shaderだけでカメラの前にテクスチャを貼る方法

実際にやってみると視点を動かすとメッシュが消える場合がある。そのような場合はBoundingBoxを大きくすると解決する。

BoundingBoxを小さくしてもそれが視界内に入ってる限り描写されるので、BoundingBoxの設定で一定範囲に入った場合のみ表示する、というようなことは出来ない。やるなら_WorldSpaceCameraPosなどで距離を取る必要がある

GrabPass等と組み合わせれば視界を歪ませるなども可能 

UnityのオブジェクトのQuadに張り付ける

 

Shader "Custom/ViewHack2" {
	Properties{
		_MainTex("MainTex",2D) = "white"{}
		_Size("Size",Range(0.1,1)) = 1
	}
	SubShader{
		Tags{"Queue" = "Transparent" "RenderType" = "Transparent" "DisableBatching"="true"}
		Blend SrcAlpha OneMinusSrcAlpha
		Pass{
			ZTest always
			Cull Front
			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;
			};

			float _Size;
			v2f vert(appdata v){
				v2f o;
				//プロジェクション座標系で考える(x,yが-1~1で表される)
				o.pos = float4(v.vertex.xy*2.0*_Size,1,1);
				o.uv = v.uv;
				return o;
			}

			sampler2D _MainTex;

			float4 frag(v2f i) :SV_Target {
				//テクスチャの上下が裏返るので
				return tex2D(_MainTex,float4(i.uv.x,1-i.uv.y,0,0));
			}
			ENDCG
		}//Pass
	}//SubShader
	FallBack "Diffuse"
}