UE5.6でマテリアルの法線に0ベクトルを入れた時の挙動が変わった

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

UE5.4からUE5.6へバージョンアップする調査を行っているのですが、単独のマテリアルと親子構造のあるマテリアルで、法線に0ベクトルを入れた時の挙動が変わったようです。

5.4:法線に0ベクトルを入れるとバッファ可視化で両方「黒」になります

5.6:単独マテリアルだと「黒」になりますが、親子構造のあるマテリアルだと普通の法線が入ります。

弊社のゲームでも実際に見た目の変化を確認しています。ただ5.6の親子構造のあるマテリアルでも、法線に直接Vec3(0,0,0)を入れることで5.4と同じ見た目になるようですので、それでこの問題を回避することは出来ます。

こちら仕様かバグか微妙な所だと思いますが、ご確認頂けますでしょうか?

​​

以上、よろしくお願い致します。

[Image Removed]

[Image Removed]

再現手順
添付のサンプルを開くと中央に球が2つあり、「バッファビジュアライゼーション」で「ワールドノーマル」を選択すると確認できると思います。

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

本件サンプルプロジェクトを確認させていただきましたが、少々問題が複雑化していたため一度整理させて頂きます。

サンプルプロジェクトで起きている問題について

・左が通常のMaterialの「NewMaterial」、右がMaterial Instanceの「MateInstance」が設定されている

・通常のMaterialとMaterial Instanceでの違いはない

・左と右の違いはTangent-Space Normalの設定有無で左が有効化、右は無効化の状態

・今回問題となっているのはTangent-Space Normalがオフの場合の挙動

上記の条件を元に確認したところ、CL39675449及びCL40200878で導入されたTangent-Space Normalがオフの場合かつノードが刺さっていない場合に、通常のVertex Normalを返すような実装の変更により発生してしまっているようでした。

現状直接Constant値を変更している場合の判定が行えていないため、以下のような場所で判定を加えることで対応可能なことを確認しております。

.\Engine\Source\Runtime\Engine\Private\Materials\Material.cpp 7112行目あたり

case MP_Normal: // If material is not using tangent space normals, and nothing is connected to the normal pin, // instead of setting the normal to the constant use the vertex normal. if (!this->bTangentSpaceNormal && EditorOnly->Normal.UseConstant && EditorOnly->Normal.Constant.Equals(FVector3f(0.0, 0.0, 1.0), UE_THRESH_NORMALS_ARE_SAME) { return Compiler->VertexNormal(); } return EditorOnly->Normal.CompileWithDefault(Compiler, Property);本件に関しましては以下Issueとして報告させていただいておりますが、お急ぎの場合は上記ワークアラウンドをお試し頂けますと幸いです。

UE-314322 Vertex Normal used instead of constant value when no node is connected to material normal input

お手数おかけしますが、よろしくお願いいたします。

ご返答ありがとうございます。

>Tangent-Space Normalがオフの場合かつノードが刺さっていない場合

失礼しました。「親子構造」では無く「Tangent-Space Normalがオフ」が条件だったのですね。

一応全項目見比べたつもりだったのですが見逃していたようです…

エンジン修正の件も了解致しました。ただ今回はvec3(0,0,0)ノードをリンクした方が安全そうですので、とりあえずそちらでアーティストさんにお願いしてみようと思います。

原因がはっきりした事とデータで対応できそうですので、解決にさせて頂きます。

ご対応頂きありがとうございました。

以上、よろしくお願い致します。