初心者なので、一部とんちんかんなことを言っているかもしれませんがご容赦くださいmm
解決したいこと
Unlit/Transparentなシェーダのマテリアルを適用したquadオブジェクトに影を落としたい。
進捗
Unlitなシェーダに影を落とすことはできたが、Transparentと共存できない。。。??
(影を落とすことはできたが、オブジェクトをColorのAlpha値などから半透明とかにすることができない)
以下に、現在のコードを記載します。
私自身、シェーダの知識が未熟でして、何がわからないのかも分からない状態です。
質問も意味不明なことを言ってしまっているかもしれませんが、なにとぞ、ご理解いただけますと幸いです。
HLSL
Shader "Unlit/CastShadowTest1" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 } SubShader { Tags {"Queue" = "AlphaTest" "RenderType" = "TransparentCutout"} Pass { Tags {"LightMode" = "ForwardBase"} CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fwdbase #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #pragma alphatest:_Cutoff #include "UnityCG.cginc" #include "AutoLight.cginc" struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; LIGHTING_COORDS(1,2) }; v2f vert (appdata_tan v) { v2f o; o.pos = UnityObjectToClipPos( v.vertex); o.uv = v.texcoord.xy; TRANSFER_VERTEX_TO_FRAGMENT(o); return o; } sampler2D _MainTex; float _Cutoff; fixed4 _Color; fixed4 frag(v2f i) : COLOR { fixed4 color = tex2D(_MainTex, i.uv); clip(color.a - _Cutoff); fixed atten = LIGHT_ATTENUATION(i); // Light attenuation + shadows. //fixed atten = SHADOW_ATTENUATION(i); // Shadows ONLY. return color * atten * _Color; } ENDCG } Pass { Tags {"LightMode" = "ForwardAdd"} Blend One One CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fwdadd_fullshadows #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" #include "AutoLight.cginc" struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; LIGHTING_COORDS(1,2) }; v2f vert (appdata_tan v) { v2f o; o.pos = UnityObjectToClipPos( v.vertex); o.uv = v.texcoord.xy; TRANSFER_VERTEX_TO_FRAGMENT(o); return o; } sampler2D _MainTex; float _Cutoff; fixed4 _Color; fixed4 frag(v2f i) : COLOR { fixed4 color = tex2D(_MainTex, i.uv); clip(color.a - _Cutoff); fixed atten = LIGHT_ATTENUATION(i); // Light attenuation + shadows. //fixed atten = SHADOW_ATTENUATION(i); // Shadows ONLY. return tex2D(_MainTex, i.uv) * atten * _Color; } ENDCG } } Fallback "Transparent/Cutout/VertexLit" }
いくつか確認したいのですが、まず、そのシェーダーファイルを選択するとインスペクタに何かエラーは表示されるでしょうか(たとえば「Shader error in 'Unlit/CastShadowTest1': syntax error: unexpected token ';' at line 95」のような...)?2つ目は、実現したい描画結果は「他のオブジェクトの影を受けるが、陰付けはされない...つまりQuadが光源の方を向いていようが逆向きだろうが同じ明るさで表示される」と「他のオブジェクトの影を受け、さらに陰付けもされる」のどちらでしょうか?
質問ありがとうございます!
1つ目ですが、とくにエラーは出ていないように思います。 シェーダーでエラーがあると、描画されたときになんか紫色っぽくなると思うのですが、描画自体は問題なくされているようです。
2つ目ですが、「他のオブジェクトの影を受けるが、陰付けはされない...つまりQuadが光源の方を向いていようが逆向きだろうが同じ明るさで表示される」が実現したい描画結果です。よろしくおねがいいたします。
まだ回答がついていません
会員登録して回答してみよう