PlanarReflectionが特定方向を向くと正しく表示されなくなる

エンジンを追いかけたところ、この現象は

Engine\Shaders\Private\MobileLightingCommon.ush

Engine\Shaders\Private\ForwardLightingCommon.ush

のシェーダー側に問題があるように思われます。

添付画像(Reflection00.png,Reflection01.png)はPlanarReflectionを適応する部分のコードなのですが、そこの条件分岐が

if (abs(dot(PlanarReflectionStruct.ReflectionPlane.xyz, 1)) > .0001f)

と記述されております。

この条件分岐は以下のコメントを読む限り

// Plane normal will be zero if the feature is disabled

平面法線が0で機能が無効であることを判定するためのもののようです。

しかしながら​面の向ける角度によっては、

dot(PlanarReflectionStruct.ReflectionPlane.xyz, 1)

の部分で0になってしまうことがあります。

例えばReflection02.pngのようにReflectionPlane​が(0.7,-0.7,0)のような値になった場合です。

意図として0法線かどうかを判定したいだけなのでこの条件は

if (dot(abs(PlanarReflectionStruct.ReflectionPlane.xyz), 1) > .0001f)

のようにするか

​if (dot(PlanarReflectionStruct.ReflectionPlane.xyz, PlanarReflectionStruct.ReflectionPlane.xyz) > .0001f)

のようにするのが正しいのではないでしょうか?​

​こちらのローカルでは​条件を上記2つのいずれにしても状態が改善することを確認しています。​

[Image Removed]

[Image Removed]​

(下記のリンク先は、本スレッドを英語に翻訳した英文スレッドですが、Epic Games のサポートチームが内部的に使用するものですので、ユーザーの方に利用していただく必要はございません。サポートは、この日本語スレッドに日本語で表示されるようになります。)

[PlanarReflection does not work when facing certain [Content removed]

(以下は、サポート担当の Barroso Vitor によるコメントを翻訳したものです。)

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

長期に渡って内在していた本件問題を報告していただくとともに、分かりやすい説明と修正案を提示していただきましてありがとうございます。UE 4.27 と最新のソース版の両方で、本件問題を再現することができました。

先ほど Epic 内のバグレポートに登録したところです。こちらがトラッカーのリンクです: UE-334287。エンジン開発チームが公開できると判断したときに、本件問題のステータスなどの情報を閲覧できるようになるはずです。

他にも必要なことがありましたら、どうぞお知らせください。

ありがとうございました。