Virtual Shadow Map における HairStrands のページマーキング不具合

ディレクショナルライト(太陽)に対して逆光となる方向からキャラクターを表示した際、HairStrands 上にブロック状のライトリークアーティファクトが発生することを確認しました。

このアーティファクトは髪の背面にタイル状のブロックパターンとして現れ、Virtual Shadow Map のページタイルと一致する形状になっています。

調査の結果、本問題は VirtualShadowMapPageMarking.usf 内の GeneratePageFlagsFromPixels

に起因していることが分かりました。HairStrands のパーミュテーションにおいてピクセル位置計算が不正となり、その結果 Virtual Shadow Map のページマーキングが誤って行われている可能性があります。 PERMUTATION_INPUT_TYPE == INPUT_TYPE_HAIRSTRANDS の場合の PixelLocalPosの計算を以下のように変更することで、アーティファクトが解消されることを確認しました。

下記変更を適用すると、該当の不具合は発生しなくなります。

本件は Unreal Engine 5.6.1 にて検証・確認しました。

// Line 467 in VirtualShadowMapPageMarking.usf
// NOTE: Assuming HAIR_TILE_SIZE == SLW_TILE_SIZE_XY (statically true for now)
#if PERMUTATION_INPUT_TYPE == INPUT_TYPE_HAIRSTRANDS
	const uint2 PixelLocalPos = GroupId.xy * HAIR_TILE_SIZE + GroupThreadId.xy;
#else
	const uint2 PixelLocalPos = DispatchThreadId.xy * PixelStride;
#endif

[Attachment Removed]

再現手順
ディレクショナルライト(太陽)に対して逆光となる方向からキャラクターを表示した際、HairStrands 上にブロック状のライトリークアーティファクトが発生することを確認しました。

[Attachment Removed]

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

本件に関して詳細な調査を行っていただきありがとうございます。

頂いた内容を弊社のMetaHumanサンプルにて確認を試みておりますが、今回発生している問題を確認できていない状態です。

問題の発生時の画像などがありましたら添付いただく事は可能でしょうか?

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

[Attachment Removed]

こちらこそ、お世話になっております。

弊社にて問題が発生している際の画像には、どうしても開発中のプロジェクトに関する情報が含まれてしまうため、添付が難しい状況です。

変わりにMetahumanサンプルを用いた、共有用のプロジェクトを作成するかどうかを検討しております。

返答は来週中になるとは思いますが、検討が完了しましたら、再度ご連絡させて頂きます。

[Attachment Removed]

ご検討いただきありがとうございます。

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

[Attachment Removed]

ご連絡が遅くなりまして申し訳ありません。

弊社内で検討しましたが、問題が発生している際の画像の共有は難しく

また、Metahumanサンプルを用いた、共有用のプロジェクトを作成する事も難しい状態です。

ご協力が出来ず大変申し訳ありません。

[Attachment Removed]

ご確認ありがとうございます。状況承知いたしました。

弊社の運用上、不具合対応を行う場合に問題の再現が必要となってしまうため現状の情報ですと対応が難しい状態となりますが、今回詳細な調査を行っていただいておりましたので可能であれば弊社側でも確認できればと考えております。

再現がプロジェクトに紐づいてしまっている場合切り分けが難しい可能性もありますが、記載いただいている内容に加えて発生条件などが判明した際にはご共有いただけますと幸いです。

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

[Attachment Removed]

承知いたしました。

この度は手厚いサポートをいただき、誠にありがとうございます。

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

[Attachment Removed]