VRChat雑記

かやのみちゃのVRChat関連の雑記ブログです

3Dスキャン(Scaniverse:フォトグラメトリ)したメシをローポリ化する方法

概要

7D1Mにてフォトグラメトリを使って様々なメシを撮りましたが
そのままの状態では余計なものがテクスチャの中に入っていたり
ローポリではないので、ローポリ化&テクスチャを綺麗にするワークフローを紹介します。

前提

iPhone (LiDARセンサーつきのもの)
Scaniverse: メッシュで撮影したもの(Splatはまた別の技術になります)
OBJ 形式でiPhoneから出力する(テクスチャがいいらしい?)

Blenderで作業しますので、出力形式は自由です。

手順

Blenderから OBJ形式で対象のモデルをインポートします。
ここでは「Inari」を呼び出します。
なお名前は念のためScaniverse上で保存する際には英語名を推奨します。

Scaniverse上でクリッピングしておくと後が楽です。

スキャン自体についてのコツはここではあまり語りませんが

  • 平べったい皿がクリッピングしやすいです
  • ぐるっと180度とらないと後ろがボケボケになりがちです
    • メッシュが推量でのびのびになりがち
  • 下方面は皿でごまかしましょう

ポリゴン数は15000くらい

ポリゴン数がいなりずし一個で15000はかなり多いです。3000以下にしたいところ。

またなにもしていない状態のUVは以下となっており無駄が多く、余計なものまであるわりに本体のいなりにUVが十分に割かれてなくて嬉しくないです。

これを最適化していきます。

残念なUVマップ

まず元のメッシュをコピペして残しておきましょう。
これは後で利用するので消さないようにしておきます。

Inari.001をいじっていきます

コピペしたものをローポリ化・UVを綺麗にするモデルにします。
移動は行わず、元のメッシュと完全に重なる形で作業します。
ここがずれるとうまくいかないので気をつけましょう。

皿を消している図:温かい頂点選択

皿など不要なものを削除したら、マテリアルを編集します。

とりあえず新しいマテリアルにできればOKです。

 

マテリアルの準備ができたら、UV展開をしなおします。

スマートUV展開で適当にしちゃいます(お好きな設定でOK)

こんな感じで大きく自動展開されればOK

その後、Layout -> Shadingタブに移動します。

Shift + A で追加できます。画像テクスチャを追加します。

こんな感じで名付けておくと便利です

画像の新規作成で、転写するための画像を準備しておきます。
テクスチャサイズはお好みですが、基本は2048でいいと思います。
なぜなら元のScaniverseの解像度がそこまで高くない気がするので。

アルファのチェックを外しておきましょう。一応。

枠が白くなっていると選択になっています

作成後は、ほかを選ばず選択したままにしておきましょう。
次にベイク設定を行います。

ベイクはレンダリングをCyclesにする必要があります。
設定後、ベイク項目がありますので、下記画像のように選択してみてください。
ベイクタイプはディフューズで、照明の効果は必要ないためカラーだけでOKです。

たまに押し出し 0.01m ぐらいにすることが必要かも

設定完了後、ハイポリ -> ローポリの順にCtrlを押しながらクリックして選択します。
選択したら、ベイクを押しましょう。

こんな感じにできたらいい感じ

うまくいったと思ったらShadingで試しに見てみましょう。
生成されたテクスチャを実際のシェーダーのカラーにつないで見てみます。

ここで大丈夫なら保存していきましょう。

カラーをつないでプレビューしてみましょう

まず画像を保存しておきます。ベイク結果は自動保存されないので手動で保存します。

こんな感じで保存しましょう

モデル自体もFBXで出力したりすればUnityに持っていけば利用可能です。

下側のメッシュはないので自身でお皿などを生成したり、
利用することをおすすめします。

 

その後、モデルのポリゴン数削減ですが、シンプルにモディファイアのデシメートを利用しましょう。UV展開の形を損なわずに削減できます。

ざっくりこれで削ります

シェーディングはスムースシェードがおすすめ。

こちらは1000ポリぐらいのいなり寿司ですが、全然リアルかと思います。
ノーマルマップもないですが、十分かと。

こんな感じのメッシュになってて悪くはありません

これ以下にしても形状が単純なので持ちます

あとはモディファイアのちょうどいい比率を選んで終了です。お疲れ様でした。