画像切り取る処理におけるOpenCVバージョン選定について

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

​

現在開発中のUE5.8プロジェクトにて、レンダリング出力画像の切り取り処理についてご相談させていただきたいと思います。

​

■経緯

従来は HighResShot 機能を使用し、その切り取り機能で出力画像をトリミングしておりました。

今回 Movie Render Graph(MRG)へ移行した際、同等の切り取り機能が見当たらなかったため、C++ で OpenCV を用いた切り取り処理を独自実装する方針としております。

​

■現状

・UE 5.8 / Visual Studio 2022 / Win64

・プロジェクト独自モジュール内で OpenCV を ThirdParty として同梱(現在 3.2.0)

・処理内容:実行中、MRG が出力した EXR / PNG をディスクから読み込み、指定 ROI で切り取り、同形式で書き出し

​

■実現したい要件

・OpenCVを用いた切り取り処理出力EXRをDWAA 圧縮で保存したい

・OpenCVを用いた切り取り処理出力EXRをHalf Float(FP16)で保存したい

​

■調査結果

・IMWRITE_EXR_COMPRESSION(DWAA 指定)は 4.5.2 以降に存在

・IMWRITE_EXR_DWA_COMPRESSION_LEVEL(圧縮レベル指定)は 4.9.0 以降に存在

・3.2.0 では上記いずれも利用できないため、4.x 系へのアップデートが必須と判断しております

・現時点では 4.14.0(4.x.xの最新)の採用を検討しております

​

■ご質問

1. OpenCV を実装する場合、上記要件を満たす構成として推奨されるバージョンはございますでしょうか。UE 上での動作実績や、避けた方が良いバージョンなどの知見がございましたらご教示ください。

​

2. UE5.8に同梱されているOpenCV4.5.5が、プロジェクト側で同梱するバージョンが異なる場合、問題が生じる可能性はございますでしょうか。想定される注意点があればご教示お願いします。

​

3. 将来的にエンジンをアップデートした際、同梱 OpenCV のバージョンが変わることでプロジェクト側の構成に影響が出る可能性はございますでしょうか。

​

多数の質問で恐縮ですが、ご知見を貸していただけますと幸いです。よろしくお願いいたします。

[Attachment Removed]

再現手順

  • プロジェクト内容:車両コンフィギュレーター、画像出力(コンフィグの画面を出力)
  • 最大画像出力解像度:14399x8082
  • 出力画像型式:EXR、PNG​
  • シーンの構成:
    • 車両データ:22000程のNaniteがオンに設定されたスタティックメッシュで構成された一つのBPアクター。表示される際に2900程のスタティックメッシュが表示され、以外のスタティックメッシュが非表示になります。
    • 背景:背景はシンプルなスタティックメッシュで構成され、照明は一つのDirectionalLight、RectLightやHDRIBackdrop(”Cubemap”にHDRI画像を設定)を使用しています。
  • レンダリングに関する設定
    • Nanite On
    • Lumen On
    • HWRT On
  • MRG出力のPPM内容
    • SubsurfaceColor
    • Specular
    • BaseColor
    • WorldNormal
    • Roughness
    • Metallic
    • Opaciy
    • LightingModel
    • SceneDepth
    • SceneDepthWorldUnits
    • SceneColor
    • PreTonemapHDRColor
    • PostTonemapHDRColor
    • SeparateTranslucencyA
    • SeparateTranslucencyRGB

​

[Attachment Removed]

恐らく独自の処理(画像の切り出し)の実装のために別のOpenCVを配置頂いていると思うのですが、念のために申し上げると、UE5.8に同梱されているOpenCVのバージョンは 4.5.5です。 配置位置はEngine\Plugins\Runtime\OpenCV\Binaries\ThirdParty\Win64\opencv_world455.dllとなっております。

こちらを利用いただくことで目的が達成可能か確認いただいてもよろしいでしょうか?

弊社としては複数のバージョンのライブラリの共存は想定していません。別のOpenCVをインポートする場合に両者でコンフリクトが起きないように調整が必要です。

次にDWAA形式のエクスポートとFP16での書き出しですが、“.exr Sequence (Single-Layer)” ノードを経由した出力であれば CompressionにDWAAを指定することで出力できます。この時デフォルトでFP16になるはずです。 [Image Removed]最後にROIの設定ですが、こちらはどのような用途でご利用でしょうか?MRGではCameraSettingノードのOverScan Percentage Override で広い範囲をレンダリングすることが出来ます。 exr形式で出力される場合 ファイルとしては OverScan を加味した画像が出力され (例として1920x1080で50%オーバースキャンであれば2880x1620 )、その画像の中心部分をexrの displaywindowメタデータ(この場合 -480 -270 2399 1349 )によって指定する形でファイルが出力されます。オーサリングソフトはこの中心部分を使ってくれるはずです。

下記スクリーンショットは5%オーバースキャン設定です。

[Image Removed]しかし任意の矩形を指定することはできません。任意矩形が必要であれば後工程で加工していただく必要がでてくると思います。

もし任意の範囲のROIの指定か必要な場合どのような用途で使うか伺ってもよろしいでしょうか?

[Attachment Removed]

厳密にはROIを指定しているわけではありませんがCineCameraActorのCameraComponentに Filmback > Sensor Horizontal offset と Sensor Vertical offset というパラメータがあり、イメージセンサの位置をオフセットするような機能がございます。結果的にビューポートの中心をずらしたような効果が得られます。こちらで代用は可能か確認いただいてもよろしいでしょうか?

[Image Removed]

[Attachment Removed]

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

恐らく独自の処理(画像の切り出し)の実装のために別のOpenCVを配置頂いていると思うのですが、念のために申し上げると、UE5.8に同梱されているOpenCVのバージョンは 4.5.5です。 配置位置はEngine\Plugins\Runtime\OpenCV\Binaries\ThirdParty\Win64\opencv_world455.dllとなっております。

こちらを利用いただくことで目的が達成可能か確認いただいてもよろしいでしょうか?

→承知しました、OpenCV 4.5.5バージョンで検証してみます。

しかし任意の矩形を指定することはできません。任意矩形が必要であれば後工程で加工していただく必要がでてくると思います。

もし任意の範囲のROIの指定か必要な場合どのような用途で使うか伺ってもよろしいでしょうか?

→弊社のプロジェクトにおきましては、任意範囲のROIを指定する必要があります。最終出力の画像(ROI)中心がビューポートの中心と異なります。

以前他の質問でMRGの任意ROIの実現方法について伺ったことがります。質問内容は下記リンクになります。

[Request for guidance: How to crop and save still images at runtime in MRQ using top-left-origin coordinates and [Content removed]

任意矩形が必要であれば後工程で加工していただく必要がでてくると思います。

→現在弊社のプロジェクトではC++、OpenCVで画像のクロッピングを実現しています。もしUE5のほかの仕組みを使用することで、よりシンプルかつ効率的に同様の出力を実現できる方法があれば教えていただいてもいいでしょうか。

お手数をかけて恐縮ですが、ご回答をいただけますと幸いです。よろしくお願いします。

[Attachment Removed]

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

教えていただいた設定方法について検討します。

またどうぞよろしくお願いいたします。

[Attachment Removed]