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

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

shader GPUインスタンシング付きunlit

なぜかunityが落ちるので供養にアップ

Shader "A-Sakura/Unlit" {
	Properties{
		[MaterialToggle] _IsShow("IsShow",Float) = 1
		_MainTex("MainTex",2D) = "white"{}
		_Color("Color",Color) = (1,0,0,1)
	}
	SubShader{
		Tags{"Queue" = "Transparent+71" "RenderType" = "Transparent"}
		Blend SrcAlpha OneMinusSrcAlpha

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

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

			struct v2f {
				float4 pos:SV_POSITION;
				float2 uv:TEXCOORD0;
				UNITY_VERTEX_INPUT_INSTANCE_ID
			};

      float4 _MainTex_ST;
			sampler2D _MainTex;
			//bool _IsShow;

			UNITY_INSTANCING_BUFFER_START(Props)
				UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color)
				UNITY_DEFINE_INSTANCED_PROP(bool, _IsShow)
			UNITY_INSTANCING_BUFFER_END(Props)

			v2f vert(appdata v){
				v2f o;
				UNITY_SETUP_INSTANCE_ID(v);
				UNITY_TRANSFER_INSTANCE_ID(v, o);
				o.pos = UnityObjectToClipPos(v.vertex);
				o.uv = TRANSFORM_TEX(v.uv, _MainTex);
				return o;
			}

			fixed4 frag(v2f i) :SV_Target {
				UNITY_SETUP_INSTANCE_ID(i);
				if(!UNITY_ACCESS_INSTANCED_PROP(Props, _IsShow)){ clip(-1);return 0;}
				fixed4 c = UNITY_ACCESS_INSTANCED_PROP(Props, _Color);
				fixed alpha = tex2D(_MainTex,i.uv).a;
				return fixed4(c.rgb,alpha);

			}
			ENDCG
		}//Pass
	}//SubShader
	FallBack "Diffuse"
}