Blenderで3Dモデルを軽量化してみよう

ワールドの軽量化にはさまざまなアプローチがありますが、3Dモデル自体の軽量化もそのひとつです。

高品質な3Dモデルはそのまま配置すると重いことも多く、快適に過ごせるワールドをつくるにはモデルの軽量化をおこなう必要があります。

手軽に軽量化ができるUnityアセットなどもありますが、モデリングソフトを使って自分で軽量化をおこなうと、手間はかかりますが細かく微調整ができるなどのメリットがあります。

今回はBlenderでのモデル軽量化に使えるテクニックをいくつか紹介します。

軽量化のポイント

3Dモデルの軽量化とひとくちに言っても、場合によって必要な条件は変わります。
今回は

  • ポリゴン数を減らす
  • マテリアル数を減らす

の2点を目標にします。

なお、今回はBlender3.0を使って解説していきます。
Blenderの導入方法や基本的な使い方は以下の記事などを参考にしてください。

ポリゴン数を削減する

基本的に、モデルのポリゴン数が少ないほどメモリ消費が小さくなり、描画処理の負荷も軽くなります。

モデルの情報(メッシュの面や頂点の数)を確認できるようにする

まず、削減したいモデルをBlenderで開きます。

  • blendファイルがある場合はそちらを、無い場合はBlenderの上部メニューからファイル>インポートでfbxなどのファイルをインポートしてください。

削減を行う前に、全体のポリゴン数を確認できるようにしておきましょう。

  • 画面右上のボタンからメニューを開き、「統計」にチェックをつけます。
  • 左上に統計情報が表示されるようになり、オブジェクトモードでは表示されているメッシュ全体の、編集モードでは現在編集しているメッシュの面や頂点の数が確認できるようになります。

デシメートを使う

Blenderの機能で自動的にポリゴンを減らすことができます。
大きく減らすほど精度は落ちますが、大幅なポリゴン削減が簡単にできるため、あまり重要でない遠景や小物などに使うと良いでしょう。

  • ポリゴンを削減したいメッシュを選択し、右下の「プロパティ」からスパナのアイコンのモディファイアープロパティを開きます。
  • 「モディファイアーを追加」から「デシメート」を選択し、デシメートモディファイアーを追加します。
    • デシメートモディファイア―の「比率」の値で削減する割合を調整し、見た目が大きく崩れない程度までポリゴンを削減します。比率を減らす(青いバーを小さくする)ほどポリゴン数をより多く削減できます。

ポリゴン削減したモデルはfbxにエクスポートして使います。エクスポート時のオススメ設定はこちらの記事で紹介しています。

溶解とマージ

ワールドにおいて重要なモデルは、少し大変ですが手作業で丁寧にポリゴンを削減するのがオススメです。
さまざまな方法がありますが、ここでは「辺・頂点・面の溶解」「頂点のマージ」を使った方法を解説します。

ポリゴン削減時にUV配置が崩れることがあり、その場合は後述のベイクが必要になるため、メッシュを複製して元のモデルを残しておきましょう
複製したいメッシュを選択して、キーボードのShift+D→Enterを押すことでメッシュの複製ができます。

Shift+Dのあとマウスカーソルを動かすことで複製したものを移動できますが、ベイクするためには同じ位置に重なっている必要があるため、そのままEnterキーで位置を確定してください。

複製したいメッシュを選択して右クリックメニューからも複製ができます。

オブジェクトが重なって見づらい場合は、画面右上の「アウトライナー」で目のアイコンをクリックすることで表示・非表示を切り替えられます。

  • 複製したメッシュを選択し、Tabキーで編集モードに移ります。
  • 辺を選択してXキーまたはDeleteキーを押し、表示されるメニューから「辺を溶解」を選択します。
    • 選択した辺がなくなり、その辺で分割されていた面がひとつになります。
      • ちなみに、辺だけでなく頂点や面を選択して同様に「頂点を溶解」「面を溶解」することもできます。試してみましょう。

例えば緩やかな曲線部分や小さな部品などは、面の分割が少なくてもあまり目立たないことが多いです。
そういった部分を中心に辺や頂点を溶解してポリゴン数を削減しましょう。

続いて、頂点のマージについて紹介します。
頂点をマージすると複数の頂点をひとつにまとめることができます。

  • ひとつにまとめたい複数の頂点を選択して、キーボードのMキーを押します。
    • 「中心に」「最後に選択した頂点に」などの選択肢があるので、目的に合ったマージ位置を選んでください。
    • 選択していた頂点がくっついてひとつになります。

たくさんの頂点が近くに集まってしまっている場合などは、こちらの方が便利なことがあります。

マテリアルを統合する

ポリゴン数以外に、Unityでは一般的にマテリアルの種類が多いほど描画処理が重くなります。
複数のマテリアルを一枚のテクスチャにまとめることで軽量化できる場合があります。

  • まず、メッシュを複製していない場合はShift+Dで複製します。
    • 元のメッシュとベイクするメッシュが分かるように、名前も変更しておくと良いでしょう。
  • ベイクするメッシュを1枚のUV配置に展開してください。

展開できたら、ベイクするメッシュのマテリアルを新規マテリアルひとつだけにします。

  • オブジェクトモードに戻って、マテリアル一覧から全てのスロットを削除し、新規マテリアルを追加してください。
    • 新規マテリアルでは「サーフェス」を「プリンシプルBSDF」になっていることを確認し、「ベースカラー」の○ボタンを押して「画像テクスチャ」を選択、新規作成します。
  • これでベイクする準備ができました。続いて実際にベイクをおこなっていきます。
    • 上部のタブから「Shading」ワークスペースを開いてください。

Blenderのデフォルトでは「Shading」ワークスペースは画像のようになっていますが、自分でカスタマイズしていたり、ダウンロードしたblendファイルを開いた場合には配置が異なっている場合や、Shadingワークスペースがない場合があります。

  • ベイクするメッシュを選択すると、画面の下側にあるシェーダーノードは以下のようになっています。
    • テクスチャのノードをクリックして選択し、白い枠が付いている状態にしてください。このテクスチャにベイクしたものが反映されます。
  • 続いて、右上のアウトライナーでCtrlキーを押しながら「元のメッシュ」→「ベイクするメッシュ」の順に選択します。
    • 画像のように両方が青色になり、ベイクするメッシュにさらに枠がついていればOKです。

両方とも表示状態(目のアイコンが閉じていない)にしておいてください。

  • 右下のプロパティでカメラのアイコンの「レンダープロパティ」を開き、「レンダーエンジン」が「Eevee」になっている場合は「Cycles」に変更します。
    • グラフィックボードを搭載しているPCでは「デバイス」を「CPU」から「GPU演算」に切り替えておくとベイク処理が高速になります。

GPU演算を有効にするには上部メニューから編集>プリファレンスの「システム」でCUDAまたはOptiXを選択しておく必要があります。

  • その下にある一覧から「ベイク」を開き、「ベイクタイプ」を「統合」から「ディフューズ」に変更します。
  • 「影響」で「直接照明」「間接照明」のチェックを外し、「カラー」だけにチェックが付いている状態にしてください。
    • さらにその下の「選択物→アクティブ」にチェックをつけます。
  • ここまでできたら「ベイク」ボタンを押してみてください。
    • しばらく時間がかかりますが、新しいUV配置に統合されたテクスチャが生成されます。
  • 生成されたテクスチャに黒い部分があったりノイズが入っているなど、うまくベイクできなかった場合は「選択物→アクティブ」の設定を調整してみてください。
    • メッシュ形状などの条件によりますが、「押し出し」の値を少しずつ大きくするとうまくいく場合があります。
  • また、ベイクするメッシュのUV配置が重なっている場合などにもベイクがうまくいかないことがあります。その場合は重ならないようにUV展開をやり直してください。

ベイクが終わったら元のメッシュは削除して構いませんが、ベイクをやり直す可能性も考えて非表示にして残しておいても良いでしょう。

その場合、エクスポート時に「アクティブオブジェクトのみ」の設定を忘れないようにしてください。

  • ベイクしたテクスチャをUnityで使えるよう、画像ファイルに書き出します。
    • Shadingワークスペース左下の画像ウインドウで、三本線>画像>名前を付けて保存を選択し、保存してください。

ベイクしたテクスチャが表示されていない場合は、画像ウインドウ右上のアイコンからテクスチャを選択してください。

ノーマルマップをベイクする

最後に、ポリゴン削減とベイクの合わせ技で、表面の凹凸をノーマルマップというテクスチャで表現する方法を紹介します。

高精細なモデルの見た目をできるだけ損なわずに大きくポリゴン削減できるテクニックなので、ここぞというところで使ってみてください。

ノーマルマップを使うと必要なテクスチャ数や描画に関わる処理が増えてしまうため、多用するとかえって重くなってしまう場合もあります。重要なモデルに絞って使いましょう。

  • まずは上記の方法で、メッシュを複製してからポリゴンを削減します。
    • 表面の細かな凹凸は大胆に溶解・マージして、平面的なモデルにしてしまいましょう。

ポリゴンの削減ができたら、カラーのベイクと同様の手順でノーマルマップをベイクしていきます。

  • シェーダーノードにカーソルがある状態でキーボードのShift+Aを押して、画像テクスチャを追加します。
  • 画像テクスチャノードの「新規」ボタンでノーマルマップ用に新しいテクスチャを作成し、「プリンシプルBSDF」の「ノーマル」に接続します。
  • また、レンダープロパティの「ベイクタイプ」を「ノーマル」に変更します。
    • 「影響」はそのままにしておいてください。

元のオブジェクトとベイクするオブジェクトを選択し、またノーマルマップ用のテクスチャを選択して「ベイク」ボタンを押すと、青紫色のテクスチャが生成されます。これがノーマルマップです。

シェーダーの「ノーマル」にこのテクスチャが繋いであると、表面に凹凸があるように見えます。
UnityではStandardシェーダーなどのNormal Mapの項目にこのテクスチャを設定して使います。

ノーマルマップの使い方やベイクの仕方はこちらの記事でも紹介しています。併せて読んでみてください。

ワールドの3Dモデル自体の軽量化は、ワールドの軽量化において特に根本的な部分の改善になります。
少し大変ですが、見た目のクオリティとワールドの軽さを両立したい場合はぜひ挑戦してみましょう!

記事をシェアしてワールド制作を盛り上げよう!

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む