UE4.21以降、AndroidのポストエフェクトでSceneDepthが正しく動作しない

別途投稿のある件と同じ状況が、4.22でも続いております。

4.20までは正しく動いており、4.21.0でバグが混入してから直る傾向が見えません。
現象は上記URLの通りです。

これは利用の仕方に問題があるのでしょうか?

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

Output Logに恐らく以下のメッセージが出力されているかと思います。一度ご確認頂けますと幸いです。

(Node SceneTexture) SceneDepth lookups are only available when BlendableLocation is BeforeTranslucency or BeforeTonemapping

上記のメッセージにある通り、ES3.1の場合SceneDepth はBeforeTranslucency 又はBeforeTonemappingでのみ使用可能です。デフォルト値は After Tonemappingになっているため、そのままですとご共有頂いたスレッドのような挙動になってしまいます。そして、残念ながらこれは不具合ではなく、AfterTonemapping設定時にMSAAにて正常に動作しない不具合に対して4.21で入った対応であり仕様になります。

よろしくお願いいたします。

link text

お世話になります。
こちら、ES2.0を選択し、かつBefore Translucencyを指定しても同様の結果となります。

ご確認いただけますでしょうか。
よろしくお願いいたします。

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

再現プロジェクトのご共有、誠にありがとうございます。ご共有頂いたプロジェクトで再現することを確認いたしました。ただUE4.22で別途作成した空プロジェクトの場合ですと、ES2.0, Before Translucencyで正常に動作することも確認いたしました。これから何故この違いが発生してるのかについて調査をするのですが、もし再現プロジェクトを作成する過程で何かデフォルトから設定を変えた箇所がありましたら、ご共有頂けますと大変助かります。

よろしくお願いいたします。

特に変えた記憶はないのですが、もともとは4.21.0で作ったプロジェクトだったはずです。
4.21.0でダメ、4.21.3にアップデートしたがダメ。
なら4.22で治ってるかもとインストールした後、バージョン切り替えしてやったがダメ。
リリースノートでBeforeTranslucency 又はBeforeTonemappingでしか使えないというのを見かけて修正してみたがダメ。

の後、このスレッドで相談。という経緯だったと記憶しております。
他に変えたのはOpenGLES2.0にしたことだけかと思います。

すでにゲーム制作の本プロジェクトは4.21で生成して作ってきておりますので、違いを調査していただけるのは大変助かります。
(4.22で生成しなおしてくださいと言われると、すさまじい作業量になってしまうので)

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

回答が遅くなり申し訳ありません。調査を続けた所、Scene DepthノードではなくScene Texture IdをSceneDepthに指定したScene Textureノードを使用すると、正常に動作することを確認いたしました(具体的に何故この挙動の違いが発生してるのかについてはこれから調査いたします)。お手数ですが、一度本プロジェクトにて上記の対応を一度試して頂いてもよろしいでしょうか?

よろしくお願いいたします。

お世話になっております。
TestFogProject、および本ゲームプロジェクトにて、SceneTextureノードを使用することで正常に動作することを確認できました。
ありがとうございます。

引き続きSceneDepthとの挙動違いについての調査、とても助かります。

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

SceneTextureノードの場合は、MaterialTemplate.ush の MobileSceneTextureLookupにある以下の処理が走ります。

//PPI_SceneDepth
if (SceneTextureId == 1)
{
	MaterialFloat Depth = Texture2DSample(MobileSceneTextures.SceneColorTexture, MobileSceneTextures.SceneColorTextureSampler, UV).a;
	return MaterialFloat4(Depth.rrr, 0.f);
}

そして、SceneDepthノードの場合は、SceneTexturesCommon.ush の CalcSceneDepth にある以下の処理が走ります。

float SceneW = ConvertFromDeviceZ(Texture2DSampleLevel(MobileSceneTextures.SceneDepthTexture, MobileSceneTextures.SceneDepthTextureSampler, ScreenUV, 0).r);		
return DepthbufferFetchES2(SceneW, View.InvDeviceZToWorldZTransform[2], View.InvDeviceZToWorldZTransform[3]);

前者はSceneTextureからDepth情報を読み取り、後者は端末からDepth情報をフェッチしています。後者に関しては端末のハード構成に強く依存するため、前者に比べて精度・挙動に問題が発生する可能性があります。そのため、対応デバイス数、安定性を重視するなら、前者が推奨されています。

UE4.20からUE4.21にかけてモバイルの描画周りに関して多数の変更が入っているため、大変申し訳ないのですが具体的にどのコード変更によって本不具合が発生しているのか確認することは難しそうです。恐縮ですが、SceneTextureノードをご利用頂けますと幸いです。

よろしくお願いいたします。

ありがとうございます。
挙動の違い含めてよくわかりました。
SceneTextureノードを利用いたします。