読者です 読者をやめる 読者になる 読者になる

VR道を往く!

VRとかUnityとかそういう話中心に。

PLYモデルをUnityで使う

f:id:kaninabe:20160508222726p:plain

PLYフォーマット・・・スタンフォード大で1990年代に開発された3次元モデルのフォーマット。
以下のサイトで代表的なモデルのデータが配布されています。 かの有名なStanford Bunnyもこのフォーマットで公開されています。

The Stanford 3D Scanning Repository

現在あまり主流の3Dフォーマットではないですが、自分は仕事柄、今でもよく使っております。 センサ計測したデータに使われることが多いでしょうか?
という訳でこのフォーマットのモデルをUnityで読み込ませてみたいと思います。

Unityで読み込めるフォーマットはfbx、dae、obj、dxfか、 もしくは3DSMAXやMAYA、Blenderなどのメジャーな3Dアプリケーションの保存形式に対応しています(詳しくはここを参照)。
が、残念ながらPLYフォーマットは入っておらず。ではどうすればいいか。

方法1: 有料アセットを使う

Unity非対応の3Dフォーマットをインポート可能にするアセット。

Esoteric Mesh Importer

お値段は$20。PLY以外にも20以上のフォーマットに対応しています。 Windowsのみのサポートのようです(一度インポートすれば他のプラットフォームで利用可能)。

方法2: MeshLabで対応形式に変換

無料の方法は無いのか?そんなときは別のアプリケーションで対応する形式に変換してやりましょう。 自分のおすすめはMeshLabです。

meshlab.sourceforge.net

このページのDownload Latest Versionのリンクから自分のプラットフォームのインストーラをダウンロードしてインストールします。Win、Mac両対応です。

PLYファイルはとりあえず上のスタンフォードのページから適当なデータをダウンロードして解凍します。 ばらばらのレンジデータ(3Dセンサで計測した生のデータ)もありますが、 reconstructionとかreconstructedとか書いてあるのが完成したデータです。

MeshLabを立ち上げてPLYファイルをドラッグ&ドロップすれば読み込めます。 そんでもって[File]->[Export Mesh As...]で適当なフォーマットを選べばOKです。
Unityに対応しているのだとdaeかobjですね。

f:id:kaninabe:20160508220125p:plain

後は書き出したobjもしくはdaeファイルをUnityプロジェクトにインポートすればOKです。

f:id:kaninabe:20160508221457p:plain
できた。

大きいモデルをインポートするには

Bunnyくらいなら問題ないですが、あまりにデカいモデルだとUnityにインポートするのも表示するのも大変です。 スタンフォードのページにも面数が100万、1000万を超えるような大きなモデルが結構あります。 例えばAsian Dragonのモデルは面数は約700万あります。そんな大きいモデルはMeshLabで面数を減らしてやります。

[Filter]->[Remeshing, Simplification and Reconstruction]->[Quadric Edge Collapse Decimation] でダイアログが開きます。

f:id:kaninabe:20160508223741p:plain

このダイアログで減らした後の面数を指定するか、どのくらいの割合まで減らすかを0~1で指定してApply。 ここではとりあえずAsian Dragonの面数を1/10に減らしてみます。

f:id:kaninabe:20160508221347p:plain
これでこのモデルもインポートできました。

なんだかMeshLabの紹介のようになってしまいました。
MeshLabはPLY以外にも多くのフォーマットに対応してますし、面数の削減以外にも多数の便利機能がありますので、利用価値は高いと思います。

PLYファイルもスタンフォード大のページのように 高精細、高品質な文化財3Dデータを公開しているところがいくつかありますので、 大いに活用されるといいと思います(利用ライセンスの確認はお忘れなく)。