2017年5月23日火曜日

Oculus Mediumで造形したモデルをUnityで表示する

ゲームを作っていてとある3Dモデルが必要になったため、Oculus Mediumで造形したモデルをUnityで表示しました。
その際にいくつか躓いたところがあるのでキャプチャ画像多めで手順を解説します。
Unityのバージョンは5.6.0f3です。

参考にしたサイト:
Oculus Mediumでモデリングした作品をUnityで使用する。 - 夜のおはよう
http://yoruoha.hateblo.jp/entry/2017/01/14/053732

meshlabでオブジェクトを回転 / 移動させたい時の操作 - production.log
http://blog.naoshihoshi.com/entry/2014/12/09/195000

【再編集】Unity開発メモまとめ 「オブジェクトの透明処理」 | ゴマちゃんフロンティア
http://gomafrontier.com/unity/49

1. Oculus Mediumでモデリングする


まずはOculus Mediumでモデルを作ります。
今回はABCの文字と茶色の植木鉢(?)と緑色の植木鉢をくっつけたものを配置しました。



モデリングが終わったらエクスポートします。
左手のYボタンでメニューを開いて[Export]を選択します。

「TRIANGLES」の値は適当に決めます。100%に近いほど綺麗に出力されますがファイルサイズが大きくなります。
「PAINT」の項目で[Textures]を選択します。
表示項目が増えたら「TEXTURE FILE FORMAT」は[PNG]、「MESH FILE FORMAT」は[OBJ]を選択します。

完了したら[EXPORT]を選択します。
すると、フォルダ(デフォルトはC:\Users\[ユーザー名]\Documents\Medium\Sculpts\[Oculus ID]\[モデルの名前])にobjファイルとpngファイルが生成されます。

この状態でも一応Unityで表示することはできます。
試しに配置したものがこちらです。


原点に配置したはずが変な位置にモデルが表示されています。向きも意図した方向ではありません。
単純に表示するだけならTransformの値を変えれば良いですが、なにかと不便なので元モデルの位置と向きを変えます。


2. Mesh Labで位置と向きを変える


「Mesh Lab」というメッシュ表示・処理のフリーソフトをインストールします。
MeshLab
http://www.meshlab.net/

[File]-[Import Mesh...]から先程出力したobjファイルを選択します。
すると、下図のように真っ黒なモデルが表示されます。これはバグではありません。(たぶん)

モデルの形はなんとなくわかると思うので、モデルを移動させます。
まずは赤線で囲ったボタンを押してXYZ軸を表示させます。

その後、[Filters]-[Normals, Curvatures and Orientation]-[Transform: Move, Translate, Center]を選択します。

出てきたダイアログの下にある[Preview]チェックボックスをONにして、各軸のスライダーでモデルを動かします。
モデルの中心にしたいポイントを原点に合わせます。今回はBの中心を原点に合わせました。
完了したら[Apply]ボタンを押します。

次にモデルを回転させます。
[Filters]-[Normals, Curvatures and Orientation]-[Transform: Rotate]を選択します。

出てきたダイアログの下にある[Preview]チェックボックスをONにして、スライダーでモデルを回転させます。
回転軸の変更は[Rotation on]リストで行いますが、変更する前に[Apply]ボタンを押さないとその軸での回転が保存されません。
完了したら[Apply]ボタンを押します。

気付いたかもしれませんが、Mesh LabのXYZ軸とUnityのXYZ軸は向きが異なります。Mesh Labは右手系でUnityは左手系です。
Unityでの表示は、Mesh LabのX軸の正負を逆転させたものとして認識しておけば大丈夫だと思います。(モデルは鏡写しにはなりません)

移動と回転をさせたモデルを保存します。
[File]-[Export Mesh As...]を選択します。
保存ダイアログが出てくるので、名前を決めて保存します。

その後に出てくるダイアログはそのまま[OK]で良いと思います。(詳しく調べてないのでわからないです…)


3. Unityでモデルを表示する


Mesh Labで出力したobjファイルとOculus Mediumで出力したpngファイルをUnityにインポートします。pngファイルは末尾に「_nrm」が付いてない方を選びます。

Unityでモデルを表示すると位置と向きが正しくなっていると思います。

自動で生成された[Materials]フォルダ内の「defaultMat」にインポートしたpngファイルを設定すれば色がつきます。

これで基本的な手順は終了です。


最後におまけですが、マテリアルのRendering Modeを「Fade」にしたときの不具合解消法です。
Rendering Modeを「Fade」にすると下図のように表示順序がおかしくなります。

そこでシェーダーを作成します。

Unity - Download Archive
https://unity3d.com/jp/get-unity/download/archive
こちらからビルドインシェーダーをダウンロードします。

使用するシェーダーファイルをテキストエディタで開き、最初に書かれているシェーダー名を適当に変えてます。今回は「Standard_Custom」としました。
次に各パスのZWriteの値をすべてOnに変えます。

こうして作成したシェーダーをマテリアルに適用すると、描画順序が正常になります。

アルファ値を変えるとこのようになります。


3Dモデリングソフトの操作を覚えなくても直感的に造形できて、作ったモデルをゲームエンジンに載せることができるなんて感動しますね。
今作っているゲームがそのうち完成すると思うので、完成したら報告します。
それでは良いVRライフを!
1 件のコメント:
  1. このコメントはブログの管理者によって削除されました。

    返信削除