この記事は、AEC and Related Tech Advent Calendar 2020 22日目の記事です。
https://adventar.org/calendars/5473

今年は、VRChat上で開催された3Dアバター・3Dモデルの展示会であるVirtualMarket4,、VirtualMarket5へ出展させていただきました。

VirtualMarket4 Default cube – DC-03 – Magenta-04

VirtualMarket5 Default cube – DC-03 – Red-01

どちらも最終的にはUnity上へモデルデータを持っていきVRChat用にセットアップするのですが、私達のブースの建物モデルは主にRhinocerosでモデリングしたものを使用しています。

Rhino建築モデルを何も考えずUnityへ入れると、パフォーマンス的に厳しいものになりやすく、VirtualMarketに入稿するためのモデルルール(オブジェクト数・ポリゴン数・マテリアル数など)にも引っかかるため、追加の作業を行い、Unityに適するデータにしていきます。

VirtualMarketへ入稿するためのモデルデータのセットアップとして記事は進めていきますが、基本的な考え方は、Unity一般、UnrealEngineなど他ゲームエンジンにも通じるものだと思います。

以下作業の流れです。
Rhinocerosのみだと上手く行かない部分があったので、RhinocerosとUnityの間にBlenderを挟んでいます。
1. Rhinoceros
モデリング → モデルのメッシュ化

2. Blender
モデルデータ整理

3. Unity
モデルをUnityで動かすためのセットアップ

1. Rhinoceros

モデリング

注意点をひとつだけメモ。厚みのない、一枚のサーフェスには表裏があります。
Unity標準マテリアルでは、表面しか描画されず裏面が表示されないので、ここでサーフェスの向きを確認しておくとよいです。
Dirコマンドでサーフェスの表・裏の確認、反転ができます。
壁などは、厚みのあるボリュームとしてモデリングすると安全かもしれません。

メッシュ化

NURBSモデルから、Unityが標準で扱えるメッシュモデルへ変換します。
メッシュ化する際のオプションによってモデルのポリゴン数、ファイル容量が大きく変わります。見た目がそこまで変化しない範囲で、できるだけ小さなポリゴン数を目指してパラメータを調整します。

対象のモデルを選択後、Mesh from surfaceコマンドです。

ここで設定してあげてもよいのですが、今回のモデルではこのスライダーを調整しても大して違いが生じなかったため、
Detailed Controlでのメッシュ化を行いました。

結論から言うと、今回のATAKAMOショップモデルでは、以下の3つのパラメータを調整することで、大きくポリゴン数を削っています。

・Mnimum edge length
ポリゴンを構成するエッジの最小長さです。モデルによるのでしょうが、今回は調整しながら100~入れてました。ここの数値を調整することでだいぶポリゴン数は減りました。
・Simple planes
単純な平面サーフェスのポリゴン数が減ります。
・Jagged seems
モデルによってここにチェックを入れると大幅にポリゴン数を減らすことができました。ただ、ポリゴンとポリゴンの境界がぴったり合わなくなることが起きやすくなるようなので、様子をみながら使用しましょう。


ここからは、簡単な検証データのメモです。

Circle形状

DensityとMinimum edge lengthの値の変更で出力結果が大きく変わりそう。

オリジナルデータ

メッシュ化後

Plane形状

Minimum Edge Length, Maximun aspect ratio, Simple planesの数値の変化で出力結果が変わりそう。

Density, Simple Planeによるちがい

以上メッシュ化検証データ終わり


書き出し

メッシュ化をしたら、モデルデータを書き出します。OBJやFBXデータで書き出すと良いでしょう。
書き出すときは、Save geometory onlyにチェックを入れると不要なカメラ情報が書き出されず後の工程で楽になります。

続きは後日