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

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

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

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3743閲覧

Unity カスタムシェーダーをアタッチしたオブジェクトがデプステクスチャに描画されない

vinvinvidal

総合スコア18

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/08/27 06:38

お世話になっております。

デプステクスチャを表示するシェーダーを書いたのですが、
カスタムシェーダーを付けたオブジェクトが描画されずに悩んでいます。

Standardシェーダーにするとデプスにも描画されるので、
Sphereのカスタムシェーダーに不足があるのだろうと思い調べてはみたのですが、
ZWrite OnやSV_DEPTHなどに当たったもののちょっと違うようで、
どうにも行き詰まってしまいました。

デプスにも描画されるカスタムシェーダーに必要な処理とはどのような処理でしょうか。
御教示のほど、何卒よろしくお願い致します。


SphereにStandardシェーダーを付けてカラーを表示
イメージ説明

SphereにStandardシェーダーを付けてデプスを表示
イメージ説明

Sphereにカスタムシェーダーを付けてカラーを表示
イメージ説明

Sphereにカスタムシェーダーを付けてデプスを表示
イメージ説明

カメラに付けているデプス表示シェーダー

Shader "Custom/Depth" { Properties { _MainTex("_MainTex", 2D) = ""{} } SubShader { Pass { Tags { "RenderType" = "Opaque" } CGPROGRAM #include "UnityCG.cginc" sampler2D _MainTex; sampler2D _CameraDepthTexture; #pragma target 5.0 #pragma vertex vert_img #pragma fragment frag fixed4 frag(v2f_img i) : COLOR { fixed4 re = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv)); return re; } ENDCG } } }

Sphereに付けているカスタムシェーダー

Shader "Unlit/Test" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; half3 normal : NORMAL; }; struct v2f { float2 uv : TEXCOORD0; half3 normal: NORMAL; float4 vertex : SV_POSITION; }; sampler2D _MainTex; v2f vert (appdata v) { v2f o; o.normal = UnityObjectToWorldNormal(v.normal); o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = dot(i.normal,_WorldSpaceLightPos0.xyz); return col; } ENDCG } } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デプス生成に参加させるには、シェーダーにShaderLab : Pass 内の Tags - Unity マニュアルでちょこっと言及されている「ShadowCaster」パスを持たせる必要があるかと思います。
Testシェーダーの末尾にFallbackを入れて、ビルトインのシェーダーからShadowCasterパスを流用させるのはどうでしょうか?

ShaderLab

1Shader "Unlit/Test" 2{ 3 Properties 4 { 5 _MainTex ("Texture", 2D) = "white" {} 6 } 7 SubShader 8 { 9 // 省略 10 } 11 Fallback "Diffuse" 12}

なお、ShadowCasterパスを追加するとデフォルトでは他のオブジェクトに対して影を落とすようになるかと思います。それだと都合が悪いようでしたらマテリアルの「Cast Shadows」を「Off」にしてみてください。

図

投稿2019/08/27 20:21

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vinvinvidal

2019/08/28 00:47

御回答ありがとうございます。 御教示頂いた方法で無事に解決できました。 なるほどForwardBaseとはPassを分ける必要があったんですね。 とても勉強になりました。 重ねて御礼申し上げます、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問