4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UnrealEngineで全天球(360度)画像を撮影してファイルに保存する

Last updated at Posted at 2022-08-05

いつの間にかUnrealEngineのScneneCaptureComponentCubeでFinal Colorが使えるようになっていて、ポストプロセスが適用された全天球(360度)画像をキャプチャできるようになっていました。
いままでだと、以下のサイトのようにレンダリング用のスクリーンと2Dキャプチャが必要だったのですが、もっとシンプルに撮影できるようになってますね。

[UE4] Unreal Engine 4.22 で360°動画(パノラマ静止画)を簡単に作ってみよう!! |

実際に全天球(360度)画像撮影をやってみた内容をまとめておきます。

確認環境

UE4.27.2
UE5.1.0

撮影方法

RenderTargetCubeの用意

Content Browserで右クリックし[Materials & Textures] > [Cube Render Target]から以下のようなRenderTargetCubeを用意します。

RenderTargetCube_2022-08-05 114920.png

Target Gammaの値について

以下の記事を参考にしてTarget Gammaを設定しています。
2.2という値にしないと出力される画像が暗くなります。

[UE4]インゲーム画像キャプチャに便利なノード「Export to Disk」の紹介|株式会社ヒストリア

TextureRenderTarget2Dでは通常のプレイヤーカメラにかかっているUE4デフォルトのガンマ補正が効いていないので、TextureRenderTarget欄のTargetGammaに2.2を設定しておくと見た目通りの絵が出力されます(用途によっては逆に意図した色にならない場合もあるので、ご自身の出したい絵に合わせて設定推奨です)

撮影用のマテリアル作成

撮影用に以下のような
 Material Domain:Surface
 Blend Mode:AlphaComposite
 Shading Model:Unlit
のマテリアルを作成します。
TextureSampleはTextureSampleParameterCubeノードで、先に作成したRenderTargetCubeがTextureSampleとして設定してあります。

image.png

マテリアルの参照サイト

基本的に以下のサイトを参考にしています。

[UE4] Unreal Engine 4.22 で360°動画(パノラマ静止画)を簡単に作ってみよう!! |

Texture SampleのAlphaをOneMinusしているところはDrawMaterialtoRenderTargetノードでalphaが反転してしまうため下記サイトを参照しています。

Draw Material To Render Target node has inverted alpha - Unreal Engine / Rendering - Unreal Engine Forums

In 4.17 my workaround is:
Set draw material to AlphaComposite blend mode;
Use standard Alpha (not inverted) on draw material;
Set the passthrough material to use inverted alpha output from RenderTexture (OneMinus node);
Clear RenderTexture to (0, 0, 0, 1) before drawing.

撮影用のアクタの作成

撮影用のアクタを作成します。

ScneneCaptureComponentCubeコンポーネントの追加

撮影用のアクタに以下のSceneCaptureComponentCubeを追加します。
 Texture Target:先に作成したRenderTargetCubeを設定
 Capture Source:Final Color(LDR) in RGB
 Capture Every Frame:チェック外す(負荷がかかるため)
 Caputre on Movement:チェック外す(負荷がかかるため)

SceneCaptureComponentCube_2022-08-05 115111.png

撮影用Blueprintの追加

以下のような撮影用のBlueprintを追加し、任意のタイミングで呼び出します。

  • DrawMaterialtoRenderTargetノードのMaterialには先ほど作った撮影用のマテリアルを設定しています。
  • RenderTargetCubeを直接ExportDiskしてもログにInvalid texture supplied.のエラーが出力され動作しません。
  • ClearRenderTarget2Dをしているところはalpha反転対策です。上のマテリアルの参照サイトを参照して下さい。
  • ScneneCaptureComponentCubeによる撮影はCaptureSceneメソッド利用でもいいのですがアウトラインなどのポストプロセスが適用されなかったので以下のような形になっています。
    CaptureSceneでポストプロセスを有効にするにはAlways Persist Rendering Stateをチェックすればいいみたいです。参考:Post process for SceneCapture2D broken? - Unreal Engine / Rendering - Unreal Engine Forums

bp2_2022-08-05 151326.png

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?