BLOGブログ

2018.08.09UE4/Mesh

[UE4] Seuratで3Dシーンを単純化する

執筆バージョン: Unreal Engine 4.19

こんにちは。アシスタントエンジニアの小倉です。

今回はUE4でも使えるVRシーン単純化ツールの紹介をします。
このツールを使うと、次のような3Dシーンを、1つのメッシュと1つのポストプロセスボリュームだけで実現できます。

Seuratについて

SeuratとはGoogleが4月にオープンソース化した、主にモバイルVRを想定したVRシーン単純化ツールです。

VRシーンではとり得る視点の領域が限られていますが、実際には表示されないメッシュも配置されています。このツールでは、限られた視点の領域から、実際に表示される部分のメッシュを(なるべく見た目を変えずに)再構築することで、表示されないメッシュを減らし、シーンを単純化します。

Seuratの詳細については、公式ブログを参照ください。

Seurat Unreal Pluginを導入する

Seuratによるメッシュの再構築は、複数の視点におけるシーンのキャプチャ画像を用います。UE4ではSeurat Unreal Pluginを用いることで、キャプチャ画像を作成します。

プラグインを使用するために、まずここからプラグインをダウンロードし、Pluginsフォルダをプロジェクトフォルダ内に配置します。

UE4で使用するために、コードを変更します。まず、Seurat.Build.csのコンストラクタに、PCHUsageを追加します。

次に、プロジェクトの.uprojectのPluginsにSeuratを追加します。

コード変更後、プロジェクトをビルドして起動するとプラグインが有効になっています。

次に、キャプチャ用に設定を変更します。[Project Settings][Rendering]を開き、以下の項目のチェックを外します。

  • Separate Translucency
  • Bloom
  • Ambient Occlusion
  • AutoExposure

次に、レベルに配置されているDirectional Light選択して次の項目を変更します。

  • Intensityを0に変更
  • Cast Shadowを無効化

次に、Scene Capture Seuratアクターをレベル配置し、Detailsパネルでキャプチャ設定を行います。

プロパティについて紹介します。

プロパティ名 詳細 今回の設定値
Location アクターの座標です。この座標がHeadboxの中心になります。 (10, 40, 170)
Headbox Size VRゴーグルをつけたときのとり得る視点の領域です。Headbox内には、表示するメッシュを含まないようにする必要があります。 (150, 150, 100)
Sample Per Face 1面あたりのキャプチャ画像数です。6面(Top, Front, Left, Right, Back, Bottom)をキャプチャするため、Sample Per Face * 6枚のキャプチャ画像が生成されます。例えば、K16の場合は96枚の画像が生成されます。 K16
Resolution 画像の解像度です。例えばK1024を選択すると、1024 * 1024の画像がキャプチャされます。解像度が高いと、キャプチャに時間がかかります。 K1024

最後に、Detailsパネルにある「Capture」ボタンをクリックします。しばらく待ち「Scene Captured!」 というダイアログが出ればキャプチャは成功です。

Seuratからメッシュを作成する

次に、キャプチャした画像を用いてメッシュを生成します。Seuratのバイナリには、有志が提供するものを用います。ここの「seurat-compiled-msvc2017-x64.zip」をダウンロードします。zipファイル内に「seurat-pipeline-msvc2017-x64.exe」があるので、プロジェクトのIntermediate\SeuratCaptureフォルダ内にコピーします。

seurat-pipeline-msvc2017-x64.exeを実行するために、次のようなbatファイルを作成します。

コマンドラインパラメータの一部について紹介します。

パラメータ名 詳細
input_path 入力するmanifest.jsonへのパス(必須)
output_path 出力するファイルのパス(必須)
cache_path キャッシュのパス。プログラム終了時にジオメトリがキャッシュされる。キャッシュがあると、次の起動時にキャプチャ画像の読み込みとメッシュ生成をスキップできる
single_face ヘッドボックス周囲の、指定した立方体の一面のみを出力する。全面の出力よりも高速なので、メッシュのプレビューに便利
triangle_count 生成する最大Triangle数
ray_footprint ジオメトリの継ぎ目を埋めるための値。小さいとジオメトリの隙間が見えることがある
texture_width 生成するテクスチャの幅
texture_height 生成するテクスチャの高さ
skybox_radius 再構築するメッシュの対象とするジオメトリの範囲。この半径の球外にあるジオメトリはクランプされる
fast_preview 品質を落として処理を高速化させる。プレビューに便利

作成したbatファイルを実行すると、メッシュ再構築が行われます。成功すると次のようになり、output_pathに指定したフォルダに再構築されたメッシュの.objと、そのテクスチャである.exrが生成されます。

メッシュをUE4へインポートする

最後に、生成された.objと.exrをUE4にインポートします。

FBX Import Optionsを次のように変更します。

  • Build Adjacency Bufferを無効化
  • Generate Lightmap UVsを無効化
  • Import RotationのXを90に変更

次に、インポートしたStatic Meshをクリックして、Use Full Precision UVsを有効にします。

次に、スタティックメッシュに設定しているマテリアルを開き、以下のように変更します。

  • マテリアルのBlend ModeをTranslucentに変更
  • マテリアルのShading ModelをUnlitに変更
  • インポートした.exrテクスチャをEmissiveとOpacityに接続

設定が終わったら、スタティックメッシュを空のレベルに配置します。

このレベルに配置されているのは、Seuratによる再構築を行ったメッシュと、色調を調整するためのポストプロセスボリュームの2つだけです。見た目がまったく同じというわけではありませんが、レベルに配置されていたアクター数を354から2に減らすことができました。

おわりに

Seuratを使って、シーンを単純化することができました。シーンの単純化が必ずしもシーンの最適化に繋がるわけではありませんが、手法の1つとしてお役に立てれば幸いです。

 

この記事は次のバージョンで作成されました。
Unreal Editor Version: 4.19.2-4033788+++UE4+Release-4.19
Microsoft Visual Studio Community 2017 Version 15.7.5