VRChat向けにインテリア•家具デザインを行う時のポリゴン数について[Rhinoceros]
こんにちは。M-tea VRC家具工房として活動しているMteaです。
数日前にはじめてVRChatの世界を体験して、誰とでも気軽にコミュニケーションが発生していた古のネトゲのようなその世界に魅了され自分もこの世界で物作りをしてみたい!と思ってしまいました。
そしてこの度「PalmLight」というVRChat向けのインテリアアイテムをBoothでリリースさせていただきました。
この間2週間弱です。
この時の経験を覚書として記事にまとめていきます。
今回はRhinocerosを使ってVRChat向けに家具デザインを行う時のポリゴン数とその削減方法について書いていきます
今回使用ソフトはRhinocerosとBlenderになります。
私は普段からモデリングソフトはRhinocerosを使用しています。
今回も使い慣れているRinocerosでモデリングを行い、Blenderでマテリアルなどの設定を行ってからUnityに持っていくという手段を取りました。
Rhinocerosは主に製品デザインや機械設計で扱われるCADソフトなので基本的にソリッドモデルを使用するのですが、VRChatなどのゲームで使用されるモデルデータはメッシュモデルが基本となります。
まずはソリッドモデルをメッシュモデルに変換する必要があるわけですね。
使用するデータ形式はFBXとなります。
なのでRhinoからFBXでエクスポートすることになるのですが、そこで重要になるのがポリゴン数です。
●ポリゴン数とは
ポリゴン数というのはメッシュの数で、ポリゴン数の量でモデルのクオリティとデータ量が決まります。
ポリゴン数が多ければそれだけ精緻なモデルが作れる反面、データ量が多くなりゲームとして重くなってしまいます。
なのでできる限り削減するわけですね。
●VRCahtで使うためのポリゴン数
VRchatで使うための家具モデルの最適なポリゴン数は?と調べたところ、どうやら一つの目安となるポリゴン数は簡単なもので100~3000、大きなものでも5000以内となるようでした。
この5000という数字。一見多そうに見えますがめちゃくちゃ少ないです。
ソリッドモデルを普通にRhinoからFBXデータでエクスポートすると数十万ポリゴンというデータが書き出されます。
参考までに、今回のPalmLightの場合は書き出し設定で少ないメッシュ数にしたにも関わらず20万ポリゴンを越えていました。
Blenderにもポリゴン数を削減する機能があるのですが、20万以上ともなるとBlenderで削減処理を行なっても限界があります。
なのでまずはRhino側でポリゴン数を削減する必要があります。
●Rhinoでのポリゴン数削減
やり方はとても簡単です。
ソリッドモデルをNUBSメッシュに変換してからFBXでエクスポートするだけです。
ポリサーフェスを選択して[メッシュ]→[NUBSメッシュに変換]→[少ないポリゴン数]に設定してOKを押します。
この時の注意点ですが、モデルはすべてポリサーフェスの状態で行ってください。
軽量押し出しオブジェクトであるClosed Extrusionオブジェクトだと歪なメッシュモデルに変換される恐れがあります。
また円形などは少ないポリゴンにすると歪になりやすいので適宜ポリゴン数を調整して変換するとよいかと思います。
1度Rhino上でメッシュモデルに変換してからエクスポートするだけでかなりポリゴン数が削減できます。
PalmLightの場合はこの工程を踏むだけで20万→1万ポリゴンまで削減出来ています。しかもこの時点では目立ったクオリティダウンも確認出来ません。
メッシュ化できたら後はFBX形式でエクスポートします。
●BlenderでFBXデータを読み込み
ここからBlenderでの作業になります。
まずBlenderを起動したら、レイヤーウィンドウから「Camera」「Cube」「Light 」は必要ないので選択→Deleteキーで削除しておきましょう。
次に[ファイル]→[インポート]→[FBX]と選択してデータを読み込みます。
※この時にオブジェクトが90度回転している場合は、各レイヤーを個別に選択して[オブジェクトプロパティ]から回転の値を0にしましょう。
●Blenderでポリゴン数の確認と削減
ポリゴン数を削減する前に現在のポリゴン数を知る必要がありますね。
[ビューポートオーバーレイ]から[統計]にチェックを入れると画面左に統計データが表示されます。
[統計]にチェックを入れると頂点、辺、面、三角面数が表示されましたね。
これらの数値は現在表示されているレイヤーのオブジェクトの合計値となっていて、この中の[三角形面]がポリゴン数となります。
画像のPalmLightで言うと9696ポリゴンとなるわけですね。
目標値の5000ポリゴンから4600ほどオーバーしているので削減しなければいけません。
■Point レイヤーの非表示
各レイヤーを非表示(レイヤー名横の目アイコンをShiftを押しながらクリック)にすることで、どのパーツがどのぐらいポリゴン数をもっているか個別に確認できます。
●ポリゴン数を削減するデシメート
各パーツのポリゴン数を確認できたら、だいたいどのパーツを削減するとよいか分かるかと思います。
PalmLightですと、丸いライトオブジェクトは1つ128ポリゴンだったので削減する必要はなさそうです。特に本デザインの中で一番目に留まる重要なパーツなので128程度ならクオリティを優先した方がよいでしょう。
ライトに繋がる木のようなパーツ、Treeが4400ポリゴンと総ポリゴン数の半数を占めていたので、こちらを削減することにします。
■Point オブジェクトの結合
デシメート処理は各オブジェクトごとに一つ一つ設定しなければならないので、効率をよくする為にまとめられるパーツは結合しましょう。
このTreeパーツは12個のオブジェクトから作られていますが後々Unityで改変するにしても個別でスケール変更やマテリアル変更できるようにする必要はないので結合してよさそうです。
結合したいオブジェクトをすべて選択して[Ctrr+J]で結合できます。
さて、デシメート処理の話しに戻ります。
オブジェクトを選択したらスパナアイコンの[モディファイアプロパティ]→[モディファイアーを追加]→[デシメート]を選択します。
デシメートの比率を調整することで、ポリゴン数を削減できます。
モデルを拡大しながら許容できるクオリティを確認しつつ調整しましょう。
調整できたらモディファイアを適用することでポリゴン数の削減を確定できます。
※注意となりますが、この時点ではまだデシメートを適用させずに、マテリアルなどをすべて設定し終えてから再度クオリティチェックを行った後にデシメートを適用することをオススメします。
■Point ビューの変更
ビューウィンドウ右上の丸いアイコン4種から3Dビューの変更ができます。
モデルのクオリティを確認しやすいものを選択するとよいでしょう。
上記のデシメート処理の工程をすべてのオブジェクトに行うことで、ポリゴン数の削減は完了です。
削減のポイントとしては、デザインの核となる要素はできるだけクオリティを優先して、デザインとして優先度が下がる部分やあまり見えない部分を削減するとよいでしょう。
また製品デザインの感覚で見えない部分(ネジの埋め込まれた部分など)まで作り込んでしまうとそれだけでポリゴン数が増えてしまうので上手く表面上だけでモデルを構成するのも大事ですね。
次回の記事では、画像のようなBlenderでのマテリアル設定とBlenderからUnityへ持って行く前に設定しておくべきことついて書きたいと思います。
Unityでのポリゴン数確認
ちなみに、Unityでのポリゴン数の確認方法は以下の通りとなります。
1,UnityにFBXモデルをインポート
2,アセットウィンドウから読み込んだモデルの[▶]をクリックして横に展開
3,その中のメッシュデータ(田のようなアイコンがついたデータ)をクリックするとInspecterウィンドウのIndicesにTrianglesの数値が表示されます。
このTrianglesがポリゴン数となります。
参照画像の場合だと、Trianglesが3つあるので全て足して2680+1692+1344=5716ポリゴンですね。
(※本記事の参照画像で使用していたモデルとは別モデルのデータなので記事内のポリゴン数と異なっていますがご了承ください)