Luma AIで撮影したNeRFデータをUnreal Engineで表示する！

# はじめに

Luma Unreal Engine Pluginが公開されました！

https://docs.lumalabs.ai/9DdnisfQaLN1sn

ということで、さっそくLumaAIのNeRFデータをUnreal Engineで表示してみましょう！

最終的にこのLumaデータが

https://captures.lumalabs.ai/embed/ardent-invaluablely-e-191484?mode=slf&background=%23ffffff&color=%23000000&showTitle=true&loadBg=true&logoPosition=bottom-left&infoPosition=bottom-right&cinematicVideo=undefined&showMenu=false

Unreal Engineでこうなります。

https://twitter.com/iwaken71/status/1643303077712367617?s=20

# 前提

- LumaAIでの撮影は終わっている
    - まだの方は[こちら](https://zenn.dev/aster_ideatech/articles/2f3d4ec8137cbd)の記事を参考にしてください！
- Unreal Engine5.1をインストールしている
- Unreal Engineの最低限の使い方を把握している

# 手順

## 1.サンプルプロジェクトをダウンロード&解凍

[公式ページ]()にアクセスし

![](https://storage.googleapis.com/zenn-user-upload/6629dd8a2018-20230405.png)
Zipファイルをダウンロードして、解凍します。


## 2. uprojectをダブルクリック
最初時間がかかります。

## 3.Luma Fieldファイルをダウンロード

![](https://storage.googleapis.com/zenn-user-upload/1a5a8e23fb14-20230405.png)

## 4. Unreal EngineのContent Browserにlumaファイルをドラッグ&ドロップ

![](https://storage.googleapis.com/zenn-user-upload/646e70a4a380-20230405.png)

NeRFキャプチャ用のブループリントが生成されます！これをドラッグするとUnreal Engineで使うことができます！

## 5.ブループリントの説明

- Baked: これらのブループリントには、キャプチャしたときの照明が含まれているため、キャプチャにできるだけ近い状態で表示されます。影や照明の影響を受けませんが、他のルマフィールドやアンリアルオブジェクトと合成することができます。
- Dynamic: これらのブループリントは、Unreal のライティングとシャドウの影響を受けています。
- Cropped: これらのブループリントには、キャプチャーの中心オブジェクトが存在する場合、自動的にトリミングされたバージョンが含まれています。
- With Environment: さらに、キャプチャ時に見えなかった領域についても、キャプチャごとに適切な空模様をレンダリングします。

## 6. ワールドにドラッグ&ドロップ！

![](https://storage.googleapis.com/zenn-user-upload/39ebbb3adfea-20230405.png)

## 7. Third Personを追加する方法
- Contentブラウザを右クリック
- `Add/Import Content > Add Feature or Content Pack`

![](https://storage.googleapis.com/zenn-user-upload/6e6c59c6299c-20230405.png)

- BluePrint
- Third Person
- Add to Project


![](https://storage.googleapis.com/zenn-user-upload/c34a459db0f6-20230405.png)

- World Settings
- GameMode OverrideをBP_ThirdPersonGameModeに変更

![](https://storage.googleapis.com/zenn-user-upload/e08e1a60aea7-20230405.png)

## 8. Groundをいい感じに設定する

サンプルプロジェクトだとGroundCubeがあります。いい感じの高さ角度に調整しましょう

## 9. PlayerStartをいい感じに設定する

Unreal EngineではPlayerStartからPlayerがスタートする設定があります。
位置を調整しましょう。

## 10.完成！

このように歩き回れるようになります！
楽しい！

https://twitter.com/iwaken71/status/1643303077712367617?s=20

## 11.その他

- BPのScaleを (15,15,15)に設定
- GroundをCollisionは別途設定


# 公式ホームページ補足情報

# Use cases

Luma Fieldsの使い道想定
- バーチャルプロダクションやゲームに含める
- 従来のグラフィックコンテンツと合成する
- VRに使用する


# 制限事項 (公式ページより)

- Unrealの一部のプロジェクトやレンダリングオプションは動作しないかもしれません。私たちのチームによってテストされた設定のスタータープロジェクトをお勧めします。
-  Auto-Exposureは現在サポートされていませんので、手動exposureをスタータープロジェクトのデフォルトである〜10程度の値に設定することをお勧めします。
- 現在、キャプチャーのクロップはサポートされていませんが、近日中に対応する予定です。

# FAQ (公式ページより)

## Q. スタータープロジェクトを使用せず、別のプロジェクトでプラグインを使用することはできますか？

A. はい、スタータープロジェクトから`Plugins/LumaAIPlugin`フォルダをお好みのプロジェクトにコピーし、Unreal Editorを再起動することで完了します。

- Temporal Anti-Aliasing / Temporal Superresolution / DLSSを動作させるためには、プロジェクトの設定 `Project Settings -> Rendering -> Optimizations -> "Velocity Pass"` を `"Write after base pass"` に変更する必要があり、そうしないと画像が汚れたりぼやけたりします。
- 現在では、手動でexposureを設定する必要があります。これは、Project Settingsか`PostProcessVolume`で、Auto Exposure modeかMetering modeを`Manual`に設定し、`Exposure Compenstation`を`10`程度に設定することで可能です。

## Q. Web上のRenderに対してUnreal上の見た目が奇妙に見えます...!

日々改善しているのでDiscordでフィードバックお願いします！

## Q. Collisionを設定できますか？

A. 現在、私たちのプラグインブループリントには、デフォルトのコライダーが付属していません。コリジョンが必要な場合（シミュレーション、VRテレポート、物理的なインタラクションの場合）、簡単な近似方法として、見えない球体や立方体のコライダーを追加することができます。

冒険すれば、Luma Webからキャプチャのメッシュをダウンロードして、手動で位置合わせすることも可能です。

## Q. このプラグインはUnreal Engine専用になるのでしょうか？Unity/Blenderについてはどうでしょうか？

A. 現在は、Unreal との統合を可能な限り良くすることに力を注いでいます。それが完了したら、他の一般的なゲーム エンジンやレンダリング フレームワークと統合するためのオプションを調査する予定です。


## Q. Luma FieldsはNaniteメッシュと相互作用するのでしょうか？

A.はい！スタータープロジェクトでは、Naniteは無効になっていますが（Naniteは新しいGPUとD312 / Vulkan APIでのみサポートされているため）、Project Settingsから以下を変更することで有効にすることができます。

- `Engine → Rendering → Nanite`にチェック
- `Platforms → Windows → D3D12 Target Shader Formats -> SM6` Windows with D3D12上でチェック 
- `Platforms → Windows → Targeted RHIs → Default RHI` を `DirectX 12` にする