質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Transparentなunlitシェーダに影を落としたい

gitalin
gitalin

総合スコア24

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

1327閲覧

投稿2018/05/21 05:47

編集2018/05/21 05:47

初心者なので、一部とんちんかんなことを言っているかもしれませんがご容赦ください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" }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Bongo

2018/05/21 21:33

いくつか確認したいのですが、まず、そのシェーダーファイルを選択するとインスペクタに何かエラーは表示されるでしょうか(たとえば「Shader error in 'Unlit/CastShadowTest1': syntax error: unexpected token ';' at line 95」のような...)?2つ目は、実現したい描画結果は「他のオブジェクトの影を受けるが、陰付けはされない...つまりQuadが光源の方を向いていようが逆向きだろうが同じ明るさで表示される」と「他のオブジェクトの影を受け、さらに陰付けもされる」のどちらでしょうか?
gitalin

2018/05/22 02:41 編集

質問ありがとうございます! 1つ目ですが、とくにエラーは出ていないように思います。 シェーダーでエラーがあると、描画されたときになんか紫色っぽくなると思うのですが、描画自体は問題なくされているようです。 2つ目ですが、「他のオブジェクトの影を受けるが、陰付けはされない...つまりQuadが光源の方を向いていようが逆向きだろうが同じ明るさで表示される」が実現したい描画結果です。よろしくおねがいいたします。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。