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

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

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

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

Q&A

解決済

1回答

1010閲覧

UnityのTerrainに対して、木の葉を含めて影をベイクしたい

Ksuke_O

総合スコア18

Unity

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

0グッド

0クリップ

投稿2023/10/23 11:56

実現したいこと

UnityのTerrainに対して、木の葉を含めて影をベイクしたい

前提

Unity環境:Unity2021.3.20f1

発生している問題・エラーメッセージ

Terrainに生やした木の影を、木の葉を含めてベイクしたいのですが、以下2点問題が発生いたしました。

問題1:Terrainで使用する木のアセットを使用して、Planeオブジェクトに影をベイクしたところ、葉の影がベイクされない
※使用している木のアセット
https://assetstore.unity.com/packages/3d/environments/fantasy/fantasy-forest-environment-free-demo-35361
※シェーダの種類によっては影が落ちないことがこちらの資料16Pの内容にあり、シェーダの問題と予想している
https://monolizm.com/sab/pdf/%E7%AC%AC39%E5%9B%9E_%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99(%EF%BD%9E%E5%85%89%E3%81%A8%E5%BD%B1%EF%BD%9E).pdf
※添付画像「Planeでベイクなどを試す.png」
イメージ説明

問題2:Terrainに生やした木から落ちた影がぼやけている上で、葉の影がベイクされない
※添付画像「Terrainでベイクなどを試す.png」
イメージ説明

以上2点です。

現状、問題1に関しては木の葉のシェーダーに問題があると見られ、
Mobile/Diffuseに変更すると、木の葉のテクスチャの透明度がなくなるものの(見た目は変)影は表示されました。
問題2についてはTerrainの設定が関連しているように思いますが、予想がついておりません。

こちら解決方法などご存知でしたら、教えて頂けないでしょうか。
何卒よろしくお願いいたします。

※他ライティング設定などの画像を添付します
ライト設定
イメージ説明
ベイクに使用しているライト
イメージ説明
使用している木のモデルやPrefab
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

ちょっと自信に乏しいのですが、もし葉のマテリアルのColorが完全透明(ボックス底辺のバーが真っ黒)でしたらアルファを最大に変えて、完全不透明(バー全体が白)にしてからベイクしてみるとどうでしょうか?

図1

ご質問者さんのご提示いただいた設定をまねて試してみたところ、確かに私の場合もリアルタイムシャドウはちゃんと葉の形になるのに、ライトマップでは葉が消えて枝だけの影になってしまいました。
下図は葉のマテリアルに前述の処置を加えたうえでライトマップをベイクした様子ですが(左の市松模様の地面はTerrain、右の白い地面はPlaneです)、どうやらちゃんと葉の形の影が生じるようになったようでした。

図2

葉のシェーダーは下記のように記述されており...

ShaderLab

1// Made with Amplify Shader Editor 2// Available at the Unity Asset Store - http://u3d.as/y3X 3Shader "Fantasy Forest/StandardNoCulling" 4{ 5 Properties 6 { 7 _Cutoff( "Mask Clip Value", Float ) = 0.5 8 _MainTex("Main Texture", 2D) = "white" {} 9 _Color("Color", Color) = (1,1,1,0) 10 [HideInInspector] _texcoord( "", 2D ) = "white" {} 11 [HideInInspector] __dirty( "", Int ) = 1 12 } 13 14 SubShader 15 { 16 Tags{ "RenderType" = "TransparentCutout" "Queue" = "Geometry+0" } 17 Cull Off 18 CGPROGRAM 19 #pragma target 3.0 20 #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows 21 struct Input 22 { 23 float2 uv_texcoord; 24 }; 25 26 uniform float4 _Color; 27 uniform sampler2D _MainTex; 28 uniform float4 _MainTex_ST; 29 uniform float _Cutoff = 0.5; 30 31 void surf( Input i , inout SurfaceOutputStandardSpecular o ) 32 { 33 float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw; 34 float4 tex2DNode3 = tex2D( _MainTex, uv_MainTex ); 35 o.Albedo = ( _Color * tex2DNode3 ).rgb; 36 float temp_output_1_0 = 0.0; 37 float3 temp_cast_1 = (temp_output_1_0).xxx; 38 o.Specular = temp_cast_1; 39 o.Smoothness = temp_output_1_0; 40 o.Alpha = 1; 41 clip( tex2DNode3.a - _Cutoff ); 42 } 43 44 ENDCG 45 } 46 Fallback "Diffuse" 47 CustomEditor "ASEMaterialInspector" 48} 49/*ASEBEGIN 50Version=16800 51217;288;1468;745;955;272.5;1;True;True 52Node;AmplifyShaderEditor.ColorNode;4;-658,-203.5;Float;False;Property;_Color;Color;2;0;Create;True;0;0;False;0;1,1,1,0;1,1,1,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 53Node;AmplifyShaderEditor.SamplerNode;3;-756,-24.5;Float;True;Property;_MainTex;Main Texture;1;0;Create;False;0;0;False;0;None;1d49d1e2d8a2b97478e3e0355dbf3a07;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 54Node;AmplifyShaderEditor.SimpleMultiplyOpNode;5;-314,-117.5;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 55Node;AmplifyShaderEditor.RangedFloatNode;1;-201,73.5;Float;False;Constant;_Float0;Float 0;0;0;Create;True;0;0;False;0;0;0;0;0;0;1;FLOAT;0 56Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;0,0;Float;False;True;2;Float;ASEMaterialInspector;0;0;StandardSpecular;Fantasy Forest/StandardNoCulling;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Off;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Custom;0.5;True;True;0;True;TransparentCutout;;Geometry;All;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;0;0;False;-1;0;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;0;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;16;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 57WireConnection;5;0;4;0 58WireConnection;5;1;3;0 59WireConnection;0;0;5;0 60WireConnection;0;3;1;0 61WireConnection;0;4;1;0 62WireConnection;0;10;3;4 63ASEEND*/ 64//CHKSM=F70C883D7D45C9986ACD48D59A3121065840E57F

このコードを見た限りではColorのアルファは計算過程で捨てられていますので、透明だろうが不透明だろうが描画結果には影響しそうにないと思ったのですが、おそらくライトマップの生成過程のどこかではメインカラーとメインテクスチャが計算に組み込まれているんだろうと思います。
Colorを勝手に見ているのはどこなのか探してみたものの、いまいち情報は見つからず、サーフェスシェーダーから生成されたシェーダーコードも長すぎて挫折し、結局根本的な原因は不明のままです。すみません...

なお、Terrain上の影がぼやけて見える件については、思い当たる可能性としてはTerrainのインスペクター上にある「Lightmapping」の「Scale In Lightmap」が小さい...などがあるかと思います。もし木やPlaneなどの設定値と比べて相対的に小さすぎるようでしたら、ここを大きくしてやるとライトマップ中でTerrainが占める面積が増え、影が精密になるかもしれません。

図3

投稿2023/10/25 10:27

Bongo

総合スコア10816

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

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

Ksuke_O

2023/10/25 11:23

Bongo様 この度はご回答いただき、誠にありがとうございます。 問題1の葉の影が落ちないことについては、シェーダーに問題がありそうなことは予想していたのですが、 シェーダーの知識がなく、コードを見てもわからずで途方に暮れていたため、大変助かりました! 今回Colorの値が影響しているとのことで、調べるべき要素も教えていただきましたので、わからないなりに原因など調べてみたいと思います。 また問題2の影がぼやけることについては、仰る通り、「Scale In Lightmap」の値が小さかった為、値を大きくすることで影がしっかり描画されることを確認いたしました。 Terrainについても改めて勉強しようと思います・・・! 本件無事解決しまして、今後学ぶべきところも浮き彫りになり大変助かりました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問