MovieRenderGraphの画像出力における32bit出力失敗、PPMのPNG型式出力時のアルファ値不具合、およびPNG画像のファイルサイズについて

現在開発中のプロジェクトの画像出力パイプラインを”高解像度スクリーンショット”から”MovieRenderGraph”へ移行することを検討していますが、ポストプロセスマテリアル(PPM)のPNG型式出力、PNG画像ファイルサイズについての課題に直面しています。

<br/>

1.「High Precision(32-bit) Output」有効時の出力失敗

MovieRenderGraphでポストプロセスマテリアルをレンダリングする際、「Use High Precision(32-bit) Output」をOnにすると、画像が出力されません。

・挙動:レンダリングウィンドウが立ち上がり、レンダリング自体は正常に実行して終了するように見えますが、指定のパスにファイルが保存されません。

・回避策:この設定をOFFにしますと正常に出力されますが、色精度が下がってしまいます。

・質問:高い色精度を維持するため32-bit出力が必要です。PPMの32-bit出力を成功させるために、プロジェクト設定、またはMRGのBP設定において、変更す べきな箇所について教えていただきたいです。

<br/>

2.PPMのPNG出力時のアルファ値のバグと、UE5.8のロードマップについて

PPMをPNGで出力した際、アルファ値が「0」になってしまう不具合を確認しました。https://issues.unrealengine.com/issue/UE\-364361

・確認状況:「Unreal Engine Issue」ページにて同様の報告を確認しており、”Target Fix”が”5.8”となっていることを把握しています。

・質問:「5.8」の表記は、通常の”5.8.0の正式リリース”を指すのでしょうか、またはホットフィックスの”5.8.1”を指すのでしょうか。修正される正確なタイミングが分かれば自社で修正して対応するか、公式リリースを待つかの判断材料したく考えています。教えていただけますと助かります。

<br/>

3.PNGのファイルサイズが従来の「高解像度スクリーンショット」より大きい問題について

・現状:同じ解像度で出力した画像、MRGのほうのファイルサイズが重くなります。例:高解像度スクリーンショット出力のPNGは100MBに対し、MRGの出力PNGが162MBになります。

・質問:MRGのPNG出力のファイルサイズを高解像度スクリーンショット出力より高くなる原因、高解像度スクリーンショット出力合わせられる設定方法について教えていただきたいです。

<br/>

以上です。技術的なサポートをいただきますと幸いです。よろしくお願いします。

再現手順

プロジェクト内容:車両コンフィギュレーター、画像出力(コンフィグの画面を出力)

  • 最大画像出力解像度:14399x8082
  • シーンの構成:
    • 車両データ:22000程のNaniteがオンに設定されたスタティックメッシュで構成された一つのBPアクター。表示される際に2900程のスタティックメッシュが表示され、以外のスタティックメッシュが非表示になります。
    • 背景:背景はシンプルなスタティックメッシュで構成され、照明は一つのSkylightや10つのRectLightになります。
  • レンダリングに関する設定
    • Nanite On
    • Lumen On
    • HWRT On
  • MRG
    • 添付画像にご参考お願いします(画像内容以外の設定はデフォルトのままになります)
  • 追加のポストプロセスマテリアル
  • SubsurfaceColor
  • Specular
  • BaseColor
  • WorldNormal
  • Roughness
  • Metallic
  • Opaciy
  • LightingModel
  • SceneDepth
  • SceneDepthWorldUnits
  • SceneColor
  • PreTonemapHDRColor
  • PostTonemapHDRColor
  • SeparateTranslucencyA
    • SeparateTranslucencyRGB
  • システム構成

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

1- おPPMにおける32-bit(高精度)出力について

本挙動は仕様によるものです。PNG形式は32-bitのリニアデータには対応しておらず、1チャンネルあたり8-bitまたは16-bitまでに制限されています。また、Movie Render Graphは現時点では、従来のMRQと比較して32-bitのポストプロセスマテリアル出力に制限があります。

そのため、「High Precision (32-bit) Output」を有効にした状態でPNG出力を行った場合、正常に書き出されません。

32-bitの精度が必要な場合は、EXR形式での出力をご利用ください。PNGが必要な場合は、EXR出力後に変換する運用となります。

2- 世PPMをPNGで出力した際にアルファ値が0になる問題

本件は既知の不具合であり、Movie Render Graphにおいて追加のポストプロセスマテリアルのアルファチャンネルが正しく出力されず、0になる場合があります。

当該不具合は修正済みとして管理されています。「Target Fix: 5.8」と記載されている場合、通常は5.8.0の正式リリースでの対応を指しますが、状況によってはそれ以前のホットフィックスに含まれる可能性もあります。

もしご利用のバージョンに修正が含まれていない場合は、MRG内のCVarノードにて

r.PostProcessing.PropagateAlpha

を設定することで改善する可能性があります(プロジェクト設定ではなく、MRG内で設定する必要があります)。また、EXR形式を使用することで、より安定した結果が得られます。

3- 話PNGファイルサイズの違いについて

MRGで出力したPNGのファイルサイズが大きくなるのは仕様上の違いによるものです。高解像度スクリーンショットと比較すると、MRGではビット深度が高くなる場合があり、アルファチャンネルも含まれます。加えて、アンチエイリアスやポストプロセスの影響により、画像内の情報量が増加します。

PNGは可逆圧縮形式のため、こうした情報量の増加がそのままファイルサイズに反映されます。また、MRGでは圧縮率よりも処理速度を優先した設定になっている場合があります。

ファイルサイズを抑える場合は、8-bit出力への制限、不要なアルファの無効化、noiseや過度なポストエフェクトの削減をご検討ください。より細かく制御する必要がある場合は、EXRで出力した後に外部ツールで変換・圧縮する方法が一般的です。

お手数ですが、よろしくお願いします。​

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

追加の確認事項について、調査結果をご報告いたします。

1.EXR(32-bit)が保存されない件

原因として、PPMの出力解像度とメインレンダリングの解像度が一致していない可能性が高いです。この場合、エンジン内部でレイヤーがスキップされ、ファイルが出力されません。

以下をお試しください。

・ありましたら、EXROutputノードで「PadtoDataWindowSize」を有効にする

・OutputLogで「LogMovieRenderPipelineIO」のエラーを確認する

・まずは1920×1080などの低解像度でテストする(高解像度+複数PPM出力はVRAM不足の可能性あり)

2.アルファ値が0のままの件

申し訳ありませんでした、調べたら、CVarの設定だけでは不十分のうようです。2つの追加設定が必要です。

・MRGグラフのDeferredRendererノードで「AccumulatorIncludesAlpha」を有効にする

・CVarの値を「1」ではなく「2(Full)」に設定する

お手数ですが、ご確認をお願いいたします。

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

検証結果のご共有、ありがとうございます。前回ご案内したPadToDataWindowSizeとAccumulatorIncludesAlphaは、旧 Movie Render Queue の設定で、Movie Render Graph にはありません。混乱させてしまい、申し訳ございませんでした。

以下、改めてご説明いたします。

32-bit 出力について

添付の「MRG設定1」を見ましたが、出力ノードが.png Sequence [8bit]になっています。PNG は 32-bit のデータを保存できないため、Use High Precision (32-bit) OutputをONにすると、ファイルを書き出せずに終わってしまいます。エラーログが出ないこともあります。

解決策として、.png Sequenceノードを].exr Sequenceノードに差し替えてください。EXR ノードの

CompressionをNoneまたはPIZに設定してから、もう一度レンダリングしていただけますと幸いです。これで 32-bit 出力は解決すると思います。

すでに EXR ノードに差し替え済みでも出力されない場合は、お手数ですが現在のグラフ構成のスクリーンショットをお送りいただけますと、引き続き調査いたします。

アルファ値が 0 になる件について

r.PostProcessing.PropagateAlphaは、コンソールで値を変えても反映されません。次の手順で試してみてください:

DefaultEngine.iniの[/Script/Engine.RendererSettings]にr.PostProcessing.PropagateAlpha=2を追加し、エディタを再起動してください。CVar はエンジン起動時に読み込まれるため、再起動が必須となります。

​これでも改善しない場合は、UE-364361の不具合が原因と考えられまあす。

UE-364361の修正タイミングについて

​ただ、ここは正直にお伝えしたいのですが、

Target Fix: 5.8の表記は本来 5.8.0 を指しますが、実際には 5.8.0 では修正されない可能性が高いと思われます。Target Fix は確定ではなく、例外なく他のバージョンに繰り越されることがあります。

貴社のスケジュールを考えると、自社でエンジンを修正していただく方が安全だと思います。公式修正を待つ場合、5.8.x では入らず、さらに遅れるリスクをご了承ください。

自社修正で進める場合、修正すべきコードの場所など、お手伝いできる情報を社内で確認しますので、ご連絡ください。

お手数ですが、よろしくお願いします。​

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

トラッキングのため、本件をクローズさせていただきます。

追加情報があればいつでも気軽に再オープンしてください。

お手数ですが、よろしくお願いします。

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

ご回答ありがとうございます。ご提案いただいた方法を早速試してみましたが、私たちの環境では改善が見られませんでした。以下は検証の結果になります。

1.EXR出力について

「High Precision (32-bit) Output」を有効し、EXRを出力フォーマットに設定してテストしましたが、画像は出力されませんでした。レンダリング工程は走るものの、ファイルが保存されない状況は変わらなかったです。

2.CVarによるPNGアルファ値の修正について

教えていただいたCVarを適用してみましたが、依然として出力されたPNGのアルファ値は0のままでした。

これらの方法でも解決しないとなりますと、現時点でほかにとれる対策(設定方法など)はありますでしょうか?ぜひご教示いただけますと幸いです。

よろしくお願いします。

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

ご返答ありがとうございます。度重なるご提案をいただき、誠にありがとうございます。教えていただいた設定方法を改めて試してみましたが、残念ながら依然として状況に変化は見られませんでした。

具体的には以下の通りです:

1.EXR(32-bit)が保存されない件に関しましては

・EXROutputノードに「PadtoDataWindowSize」設定項目が見当たりませんでした。

・「LogMovieRenderPipelineIO」を確認したところ、エラーに関する内容を見受けられませんでした。

・1280*720のような低解像度でテストしてみましたが、画像は出力されませんでした。

2.アルファ値が0の件に関しましては

・”DeferredRender”ノードに「AccumulatorIncludesAlpha」設定項目はありませんでした。

・r.PostProcessing.PropagateAlphaの設定値を”2”に変更して出力を検証しましたが、出力されたPNG画像のアルファ値が0でした。

こちらの環境設定での他に試すべき項目などはまだ残されているのでしょうか?

もし他に設定方法がないようであれば、これ以上の調査は締め、5.8での公式修正を持つか、自社でのエンジン修正を検討するフェーズに移ろうと考えています。

最後に何かアドバイスがございましたら、ぜひ伺わせてください。

よろしくお願いします。