LoginSignup
3
0

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

Last updated at Posted at 2024-02-22

概要

Luma 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

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

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

IMG_0566.jpg

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

image.png

2. Blenderでデータ加工

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

まずはBlenderで落としてきたデータを開きます。重いので注意しましょう。
image.png

Blender GLBアドオンについて

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

image.png

不要な場所の削除

画像の通り、地面もモデルに含まれてしまっているので、不要な部分は削除しましょう。
image.png

※頂点数が多いのでフリーズします。
image.png

画像のように削除しました。
image.png

テクスチャを持ってくるモデルのコピー

リメッシュの前にオブジェクトを複製しておいてください。
ここでは、元データローポリと名前を付けています。
image.png

リメッシュ モディファイア

現状だと頂点数が多すぎて重いので、リメッシュで綺麗&軽くします。

image.png

加工するものを間違えないようにします。
パラメータによっていろいろなリメッシュの仕方ができますが、今回は「スムーズ」で深度を4にしました。
image.png

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

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

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

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

UV展開

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

概略

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

image.png

以下で表示されているテクスチャは関係ありません。UV展開のメッシュのみに注目すれば問題ないです。
image.png

マテリアルの設定

Shadingタブで作業します。

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

image.png

新しいマテリアルに対し、画像テクスチャノードを追加します。この画像にベイクする画像が入るので、名前はベイクなどにしておきます。
image.png

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

image.png

ここまで終わったら、画像テクスチャノードをクリックして、アクティブにしておきます。(参考: Blender2.8でベイクしたら真っ黒、もしくは反映されない時)

image.png

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

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

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

image.png

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

image.png

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

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

image.png

②「ベイク>選択物→アクティブ」にチェックを入れます。
image.png

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

※一度目は暗すぎたので、以下はサンライトを追加してベイクしなおした結果になります。
image.png
image.png

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

3. FBXでエクスポート

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

ここからはlayoutタブで作業します。
出力したいデータを選択して、ファイル>エクスポート>FBXを選択します。
image.png

エクスポート画面で画像のように設定します。

  • パスモード: コピー
  • 箱マークのボタン: 押す
  • Limit to 選択したオブジェクト: チェック入れる

image.png

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

image.png

参考資料

3
0
0

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
3
0