Export HDR movie from Scene Capture 2D on Unreal Engine 4
Unreal Engine 4を使用して各フレームを.hdrファイルに連番で書き出すためのプラグインです。 Unreal Engine 4のMatineではLDR動画しか書き出せませんが、SceneCaptureActorを使用することで、HDR動画を書き出すことができます。
- プロジェクトのソースコードにSceneCaptureActorを追加
- SceneCaptureActor.hのMYPROJECT2_APIをプロジェクトに応じて書き換え
- SceneCaptureActor.cppとrgbe.cppの #include "MyProject2.h" をプロジェクトに応じて書き換え
- コンパイル
- 全てのクラス -> SceneCapture2Dを配置
- 新規追加 -> マテリアル -> 描画ターゲット(SceneRenderTarget)を追加
- SceneCapture2DのTextureTargetにSceneRenderTargetをアタッチ
- SceneCaptureActorをシーンに配置
- SceneCaptureActorのrender_texにSceneRenderTargetをアタッチ
- SceneCaptureActorのpathに書き出し先のパスを設定
.hdrファイルの連番になります。 書き出したファイルのサンプルはsampleディレクトリにあります。
SceneCapture2Dと同様の手順でキューブマップを書き出すことができます。
- 全てのクラス -> SceneCaptureCubeを配置
- 新規追加 -> マテリアル -> キューブの描画ターゲット(SceneRenderTargetCube)を追加
- SceneRenderTargetCubeをrender_tex_cubeにアタッチ
- path_cubeに書き出し先のパスを設定
キューブマップの仕様は以下のUnreal Engineの仕様に従います。
深度値を書き出したい場合、Post Process MaterialをSceneCapture2Dに適用します。
- 新規追加 -> マテリアル -> マテリアル(SceneDepth)を追加
- SceneDepthをダブルクリック、Material DomainをPost Processに設定、SceneDepth UVsを適当な定数で割ってエミッシブカラーに接続
- Scene Capture 2DのMiscのBlendablesにSceneDepthを設定
- Scene Capture 2DのCapture SourceをFinal Color (LDR with Post Process)に設定
法線を書き出したい場合も、深度値と同様に、Post Process Materialを使用します。 Material EditorでSceneTexture:World Normalをエミッシブカラーに接続して下さい。
Unreal Engineは、BENCHMARKオプションを付けて実行することで、フレームレートを固定することができます。
"UE4Editor.exe" "(.uprojectのフルパス)" -ResX=1920 -ResY=1080 -FPS=60 -BENCHMARK
BENCHMARKオプションの詳細は以下にあります。 https://docs.unrealengine.com/latest/INT/Programming/Basics/CommandLineArguments/index.html
"BENCHMARK: Run game at fixed-step in order to process each frame without skipping any frames. This is useful in conjunction with DUMPMOVIE options."
また、フレームレートの固定は、C++ファイルのBeginPlayで以下のように記述しても行うことができます。
FApp::SetBenchmarking(true);
FApp::SetFixedDeltaTime(1/60);
フルHDを書き出す場合は、クロップ機能がご利用頂けます。 テクスチャを2048x2048に設定し、crop_leftとcrop_rightに64を、crop_topとcrop_bottomに484を設定して下さい。
SceneRenderTargetのサイズは2の乗数かつ正方形である必要があります。 また、Unreal Engineの制約から、出力の最大サイズは2048x2048となります。
SceneCaptureActorが使用している、ConstructTexture2D APIの実装に、#if WITH_EDITORが含まれているため、-gameでは動作しません。
.hdrファイルの書き出しには、以下のサイトのrgbe.cとrgbe.hを使用させて頂いています。