NeRFで取得したオブジェクトをBlenderでリメッシュ加工・軽量化して、Unityで使えるようにする

# 概要
[Luma AI](https://lumalabs.ai/) というNeRFを用いた3Dキャプチャツールがあります。ここで得た3DスキャンデータをBlenderを通して**メッシュの削減**・**テクスチャのベイク**を行い、軽量化をして、Unityで用いることのできる**FBXデータ**として出力します。

obj形式など、Blenderで読み込めるメッシュデータ&テクスチャデータとしてエクスポート可能なツールであれば、他ツールでも同様にデータ加工可能だと思います。

## 環境
- Luma AI on iPhone SE2
- Windows 10
- Blender 2.93.10

# 目次
1. Luma AIでNeRF&OBJ形式でエクスポート
2. Blenderでデータ加工
3. FBX形式でエクスポート

# 1. Luma AIでNeRF&OBJ形式でエクスポート

**以下の説明はiPhone版Luma AIのアプリでのものになります。**

今回例として用いるのは、以前撮った玉ねぎのモデルです。

![IMG_0565.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/bf02e11a-463f-72fd-e9a7-2d8e42487bb3.jpeg)



LiDAR非搭載のiPhoneで撮っているので、品質は微妙ですが、良い機材で撮ればよりきれいな3Dモデルが得られると思います。

こちらのbeta版機能で、GLBやOBJ形式（メッシュデータになる）でのエクスポートができるので、ファイルをダウンロードします。容量は大きくなりますが、今回はHigh-Polyなモデルで行います。

![IMG_0566.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/5965ab45-006d-a4cf-a7f1-bc2948eda783.jpeg)


このようにダウンロードできました。ただ、この状態だと、見た目が良くないのと、メッシュに穴が開いたりしているので、その部分を次章で加工していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/7b1ca676-919e-09c6-863e-7cef358b94ad.png)


# 2. Blenderでデータ加工

ここでは、Blenderを用いて、メッシュの整理、リメッシュ、テクスチャのベイクを行います。

まずはBlenderで落としてきたデータを開きます。重いので注意しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/6117de03-eb8b-ec98-9789-5ef1e501880f.png)


<details><summary>Blender GLBアドオンについて</summary>

有効化されていなければ有効化しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/9cec7f5b-11bd-c334-32e9-ae33e6833967.png)

</details>

## 不要な場所の削除
画像の通り、地面もモデルに含まれてしまっているので、不要な部分は削除しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/d7e8389b-a991-b2bf-f38c-71c890dd24df.png)

※頂点数が多いのでフリーズします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/58dc9a62-d7ed-6aa0-eb8e-794d074d4b58.png)

画像のように削除しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/b268aef0-9b30-7d14-1906-00d1e2ae720c.png)

## テクスチャを持ってくるモデルのコピー
リメッシュの前にオブジェクトを複製しておいてください。
ここでは、**元データ**と**ローポリ**と名前を付けています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/f8c43456-ec68-5766-9954-7bc98d5d2023.png)


## リメッシュ モディファイア
現状だと頂点数が多すぎて重いので、リメッシュで綺麗&軽くします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/ac486cf7-5b8e-3327-7179-cc6b57db670a.png)

加工するものを間違えないようにします。
パラメータによっていろいろなリメッシュの仕方ができますが、今回は「スムーズ」で深度を4にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/95ebf727-5910-6cf6-0760-d0ef0c41ca20.png)


モディファイアを適用します。
頂点数は**347,771**→**933**となりました。深度を小さくすればさらに頂点数などは減ります。

メッシュをより加工したい場合は、スカルプトモードなどでさらに調整しておきましょう。今回は地面に触れていてキャプチャできなかった部分を少し補完しておきました。（NeRFの方でテクスチャは撮れていないので、テクスチャはつかない点に注意が必要です。）

## マテリアル・テクスチャの設定

形ができたので、次はテクスチャを入れていきます。

### UV展開

UV展開の詳細については他記事を参照していただければと思います。

#### 概略
- UV Editingタブで作業
- 対象オブジェクトを編集モードで開く
- 全面を選択して展開（今回は球状展開をしました。）
- 1024x1024 px に合うように調整（画像サイズはお好みで変えてください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/94c73014-f40d-0daf-28e7-d684ca0905b7.png)

以下で表示されているテクスチャは関係ありません。UV展開のメッシュのみに注目すれば問題ないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/15e18e4c-f1bb-25cb-83de-95345c33d69b.png)


### マテリアルの設定

Shadingタブで作業します。

加工先のデータにおいて、元データから複製されてきたマテリアルは全て削除して、新しくマテリアルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/954d9494-90dd-5a14-e19c-6030f27aa703.png)

新しいマテリアルに対し、画像テクスチャノードを追加します。この画像にベイクする画像が入るので、名前はベイクなどにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/46bfc195-46f0-d64e-e14b-8ec99e55439a.png)

UVマッピングノードも入れておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/f8756b31-55b2-5635-0cda-67871cf9b7bf.png)

ここまで終わったら、画像テクスチャノードをクリックして、アクティブにしておきます。(参考: [Blender2.8でベイクしたら真っ黒、もしくは反映されない時](https://qiita.com/NEON1212121/items/b2e3d4f3cac1890c84fb#1-%E7%94%BB%E5%83%8F%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E3%82%92%E7%94%9F%E6%88%90))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/d43b151a-3661-2455-0779-41ad33831d3b.png)


### 大きさの設定とベイク実行

再び、UV Editing タブで作業します。（ベイクした後に、画像を保存する作業があるため）

ここまでできたら、大きさが**元データ＜加工先データ**となり、元データが見えなくなるように覆い隠します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/6bdb49b9-7ea9-02bd-9f1c-c1f76121d25f.png)

元データ→加工先データの順番にctrlクリックで複数選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/b03e4782-6073-be0e-1745-3305771303ca.png)

続いて、レンダリング設定をいじっていきます。右側のカメラボタン（レンダープロパティ）を押して2か所設定していきます。

①レンダーエンジン: Cycles にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/c72c77b0-af98-b043-9a97-72f65452fd5c.png)

②「ベイク＞選択物→アクティブ」にチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/40bbeb94-8774-f654-8272-c23031ef4773.png)

ここまでで設定ができたので、「ベイク」ボタンを押してしばらく待ちます。すると左側にテクスチャが出てきますので保存をします。明るさなどはベイクする環境に依存しますので、暗かったりする場合はライトを調整したり、画像自体を加工したりするとうまくいきます。

※一度目は暗すぎたので、以下はサンライトを追加してベイクしなおした結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/7228d7ee-f464-b53a-c1ed-08518d490250.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/4af9443f-eacc-0b38-07aa-0a0077665828.png)

無事、軽量化されたモデルが作成できました。

# 3. FBXでエクスポート

テクスチャ込みでモデルを出力します。

ここからはlayoutタブで作業します。
出力したいデータを選択して、ファイル＞エクスポート＞FBXを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/bba69302-63fa-6946-2760-aeee0cce759c.png)

エクスポート画面で画像のように設定します。
- パスモード: コピー
- 箱マークのボタン: 押す
- Limit to 選択したオブジェクト: チェック入れる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/86298155-f5ac-e1c2-320d-559c408964fb.png)

以上の設定でエクスポートすると、無事FBXファイルが出力されました！UnityではFBXはデフォルトでインポート可能なので、このまま使えると思います。GLBデータでも[UniGLTF](https://github.com/ousttrue/UniGLTF)を入れることでインポート可能になります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173847/fa06b297-e9c8-3187-418c-109ad019dfab.png)

# 参考資料
https://note.com/tkrite/n/n83d78b93a9c4

https://www.stjun.com/entry/2021/05/30/182727#24%E3%83%AD%E3%83%BC%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E3%83%8F%E3%82%A4%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%87%E3%83%AB%E3%82%88%E3%82%8A%E4%B8%80%E5%9B%9E%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%97%E3%81%A6%E5%90%8C%E3%81%98%E4%BD%8D%E7%BD%AE%E3%81%AB%E9%87%8D%E3%81%AD%E3%82%8B

https://perkup.jp/?p=14223