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

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

shader surf base

zwriteが別パスになってるのはsurfがコンパイル時にZWrite Offで上書きしてしまうため

Shader "Custom/SurfBase" {
	Properties {
		[Enum(UnityEngine.Rendering.CullMode)]
		_Cull("Cull", Float) = 2                // Off
		[Enum(UnityEngine.Rendering.CompareFunction)]
		_ZTest("ZTest", Float) = 4              // LEqual
		[Enum(Off, 0, On, 1)]
		_ZWrite("ZWrite", Float) = 1
		_MainTex ("Texture", 2D) = "white" {}
		[HDR] _Color("Color",Color) = (1,1,1,1)
		_NormalTex ("Normal Tex", 2D) = "bump" {}
		_NormalPow ("Normal Pow", Range(0, 1)) = 1
		[HDR] _Emission("Emission",Color) = (0,0,0,0)
		_Smoothness ("Smoothness", Range(0,1)) = 0.5
		_Metallic ("Metallic", Range(0,1)) = 0.0
		_Occlusion ("Occlusion",Range(0,1)) = 1

    //ステンシル
    _StencilRef("StencilRef",Float) = 0
    [Enum(UnityEngine.Rendering.StencilOp)]
    _StencilPass("StencilPass",Float) = 0
    //https://docs.unity3d.com/ScriptReference/Rendering.CompareFunction.html
    [Enum(UnityEngine.Rendering.CompareFunction)]
    _StencilComp("StencilComp",Float) = 0
	}
	SubShader {
    Pass{
      ColorMask 0
      ZWrite [_ZWrite]
    }

		Tags { "Queue" = "Transparent" }
		Cull [_Cull]
		ZTest [_ZTest]
    Stencil{
			Ref [_StencilRef]
			Comp [_StencilComp]
			Pass [_StencilPass]
		}

		//surfにおいては機能しないっっぽいのでコメントアウト
		CGPROGRAM

		#pragma surface surf Standard fullforwardshadows alpha:fade vertex:vert

		#pragma target 3.0
		struct Input {
				float2 uv_MainTex;
				float dammy_val;
				/*
				float3 viewDir;
				float4 screenPos;
				float3 worldPos;
				float3 worldNormal;
				*/
		};

		sampler2D _MainTex;
		float4 _Color;
		sampler2D _NormalTex;
		float _NormalPow;
		float4 _Emission;
		float _Smoothness;
		float _Metallic;
		float _Occlusion;

		void vert (inout appdata_full v,out Input o) {
			//初期化
			UNITY_INITIALIZE_OUTPUT(Input, o);
			o.dammy_val = 1;
		}

		void surf (Input IN, inout SurfaceOutputStandard o) {
			float4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			o.Emission = _Emission;
			o.Smoothness = _Smoothness;
			o.Metallic = _Metallic;
			o.Occlusion = _Occlusion;
			o.Alpha = c.a;
			o.Normal = UnpackScaleNormal(tex2D(_NormalTex, IN.uv_MainTex), _NormalPow);
		}
		ENDCG
	}
	Fallback "Diffuse"
}