spriteの特定の高さ(ローカル)以下を描画しないShaderを実装中なのですが、うまくいきません。
特定のuv.y以下を表示しないようにすることでspriteのSprite ModeがSingleの場合は思った通りに動作しますが、
Sprite ModeがMultipleであると、Textureの中でのuv値が参照され、以下のコードがうまくいきません。
スクリプトから対象のspriteのuv値渡してもらうというような手法ではなく、もう少しスマートな方法はありませんでしょうか?
よろしくお願いいたします。
ShaderLab
1Shader "Unlit/NewUnlitShader" 2{ 3 Properties 4 { 5 _MainTex ("Texture", 2D) = "white" {} 6 _Height("Height", Range(0,1)) = 0.5 7 8 } 9 SubShader 10 { 11 Tags { "RenderType"="Opaque" } 12 LOD 100 13 Cull Off 14 15 16 Pass 17 { 18 CGPROGRAM 19 #pragma vertex vert 20 #pragma fragment frag 21 // make fog work 22 #pragma multi_compile_fog 23 24 #include "UnityCG.cginc" 25 26 struct appdata 27 { 28 float4 vertex : POSITION; 29 float2 uv : TEXCOORD0; 30 }; 31 32 struct v2f 33 { 34 float2 uv : TEXCOORD0; 35 UNITY_FOG_COORDS(1) 36 float4 vertex : SV_POSITION; 37 }; 38 39 sampler2D _MainTex; 40 float4 _MainTex_ST; 41 fixed _Height; 42 43 v2f vert (appdata v) 44 { 45 v2f o; 46 o.vertex = UnityObjectToClipPos(v.vertex); 47 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 48 UNITY_TRANSFER_FOG(o,o.vertex); 49 return o; 50 } 51 52 fixed4 frag (v2f i) : SV_Target 53 { 54 clip(i.uv.y - _Height); 55 56 // sample the texture 57 fixed4 col = tex2D(_MainTex, i.uv); 58 // apply fog 59 UNITY_APPLY_FOG(i.fogCoord, col); 60 return col; 61 } 62 ENDCG 63 } 64 } 65} 66 67 68
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/23 15:24
2021/06/23 18:14
2021/06/24 04:13 編集
2021/06/24 12:09
2021/06/25 01:53