モバイルスキャンモデルを軽量化する


スマホで簡単に3Dスキャンが可能となり、身近なものを手軽に3Dモデル化する事ができるようになりました。

しかし、ポリゴン数やテクスチャ解像度の影響で容量が結構あり、3Dモデルを何かのコンテンツに入れたいと思った時に結構重いので使いづらいという事があります。

ここでは、VRChatやcluster、UEFN(Fortnite)などを想定したスキャンモデルの軽量化のフローを紹介したいと思います。

※スクリーンショットにBlender4.1を使用していますが、Blender4.1で一連のフローを実行するとFBXではテクスチャが書き出されず、GLBではメッシュが書き出されない事がわかりました。 Blender3.6LTSではFBX、GLBともに問題なく書き出しが行えることを確認しています。

 

スキャンモデルの容量

まずはスマホアプリでスキャンした3Dモデルの容量がどれくらいあるのかを見てみます。

ここではスマホのスキャンアプリでの操作説明は省略しますが、FBXかGLBで書き出します。

例えばホテルのシングルルームくらいの大きさのモデルだと10MB~14MBくらいの容量があります。

一つ容量としてみるとそれほど大きくはありませんが、これを10個並べるだけで100MBを超える事になるので、なるべく軽くしたいところです。

軽量化フロー

簡単な軽量化フローは以下のようになります。

手順が結構多いので、あまり細かい解説はせず使用ツールややり方のみを解説していきます。

 

スキャンモデルのポリゴン削減の下準備

スキャンモデルをBlenderにインポートします。

ビューポートでオブジェクトを選択し、ObjectからDiplicate Objects(Shift+D)を選択してオブジェクトを複製します。

この後軽量化前モデルから軽量化後モデルにテクスチャを転写(ベイク)するために最初に複製をして軽量化作業を行います。

作業しやすいようにベースとするオブジェクトを非表示にします。

Edit Modeに移動してSelectから**All(A)**を選択して、頂点を全選択します。

MeshからClean Upの中にあるMarge by Distanceを選択します。

スマホスキャンアプリで生成されたモデルはポリゴンが細かく分かれていることがあり、このままポリゴンの削減処理を行うと穴だらけになってしまうため、重なった頂点を結合して一つのポリゴンの塊にします。

左下にMarge by Distanceのパネルが表示されるので、Marge Distanceの数値を0.01m(0.001m)にしてEnterを押します。

 

ポリゴン削減

プロパティパネルのモディファイアタブからDecimateを選択します。

 

現在のポリゴン数が左下に表示されるので、ビューポートモデルとポリゴン数を見ながらRatioの数値を変更します。

今回はRatioに0.03と入力し、ポリゴン数は2363まで削減されました。

Ratioの数値は元の形状がどれくらい維持されるかを見ながら調整します。

下三角から**Apply(Ctrl+A)**を選択して確定します。

 

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

プロパティパネルのマテリアルタブに移動し、現在のマテリアルをRemove(割り当ての解除)します。

RemoveしたらNewを押して新規マテリアルを割り当てます。

Shadingエディタに移動します。

マテリアルノードエディタでAddからTextureの中にあるImage Textureを選択してImage Textureノードを追加します。

Newを押して、テクスチャ名とテクスチャ解像度(最大でも1024)入力して、Principled BSDFノードのBase Colorに接続します。

 

UV展開

UVエディタに移動します。

Aでポリゴンを全選択します。

UVからSmart UV Projectを選択します。

実行して、UV展開がキレイに行ったことを確認します。

ちなみにここでは標準UVツールを使用していますが、便利なアドオンを使用しても問題ありません。

 

ベイク(テクスチャの転写)

Layoutエディタに戻ります。

非表示にしていたベースモデルを表示させます。

プロパティパネルのRenderタブに移動し、Render EngineをCyclesに変更します。

下の方にあるBakeを展開し以下のように設定します。

  • Bake Type : Diffuse
  • Influence > Contributions : Colorのみチェック
  • Selected to Active : チェックを入れる
  • Extrusion : 0.1m
  • Margin : Extend

アウトライナーでCtrlキーを押しながらベースモデル(転写元)-> ポリゴン削減したモデル(転写先)の順に選択します。

オレンジがSelect、山吹色がActiveと言う扱いになります。

プロパティパネルに戻りBakeボタンを押します。

Bake処理が終わったらベースモデルを非表示にしてベイクが問題なかったか確認をします。

テクスチャの書き出し

Shadingエディタに移動し、デフォルトでは左下のImage EditorでハンバーガーメニューからImageの中にあるSave Asを選択し、テクスチャを保存します。

軽量化完了

問題がなければベースモデルを削除し、FBXもしくはGLBで書き出しをして完了です。

今回は容量が1/6まで軽量化されました。