[Unity] Unityに形状を渡す手順

  • 「ポリゴンメッシュに変換」の分割数を調整
  • fbxでエクスポート

リアルタイムゲームエンジンのUnity (http://japan.unity3d.com/)に形状を渡す場合は、
Shade3Dからfbx形式でエクスポートしUnityでインポートすることになります。
そのときの注意点などを記載します。

Shade3Dでモデリングした形状を
ゲームなどのリアルタイム用途、VR(Virtual Reality)のシーン、に持っていくためにUnityを使用することになります。

今までチュートリアルで作成した形状を渡してみましょう。

FBXファイルに渡す要素

fbxに渡す形状データ、といっても形状データのほかに、表面材質やテクスチャ、UV、法線など、いくつか必要な情報が存在します。
ナレッジベースの「fbx形式でエクスポートする時に注意する点」、「Unityに静止形状を渡す手順」にも情報が書かれています。
これらの情報も参考にして、実際のモデリングデータからfbxに出力するという操作を順に追いかけていきます。

出力に不要な要素を削除、ポリゴンメッシュに変換

チュートリアル「皿を作る」でモデリングしたお皿は、以下のようになっていました。

この場合、fbx出力時は以下の処理を行います。
なお、シーン(形状)を変えることになるため、fbx出力時はShade3Dのシーン(ファイル拡張子shd)を別のファイル名にして分けておくのがよいかと思います。

  • 不要なテクスチャや形状を削除
  • 形状をポリゴンメッシュにする、面数を抑える
  • 形状名を半角英字+数字に置き換える
  • 表面材質をマスターサーフェスにし、マッピング指定を整理
  • 対象の形状の、地面に接する中心位置が原点に来るように位置調整
  • 面の表裏を確認

皿だけをfbx出力するようにするため、地面としている「円」と背景のテクスチャイメージを削除します。
また、原点が皿の接地面に来ているのを確認します。
以下のように、「開いた線形状の回転体」だけになりました。

形状をポリゴンメッシュに変換する際、面数が増えすぎないように注意します。
この回転体の場合は、ブラウザでの形状名の前に「<<」記号をつけて面分割を細かくしています。
ただ、この細分割指定はポリゴンメッシュ変換時には使用されませんので、無視して問題ありません。
ブラウザで回転体を選択し、ツールパラメータの「ポリゴンメッシュに変換」ボタンを押して
「曲面の分割」を「普通」にしてポリゴンメッシュ変換します。

ここで注意点として、Unityに持っていく場合にはほとんどは形状を1つだけを表現するのではなく、
複数の建物や小物類を配置してシーンを作ることになると思われます。
その場合に1つ1つの形状の面数が多いと、それだけ負荷がかかることになります。

皿を小物の1つとして表現する場合、
ポリゴンメッシュにしたときに600面近く(ほとんどは四角形なため、三角形に分割すると1000三角形を超える)となるのは高負荷となりそうです。

形状の輪郭を保ちつつ、面数を抑えるポリゴンメッシュ変換調整

一度UNDO(取り消し)して回転体に戻し、
「ポリゴンメッシュに変換」時に表示されるダイアログボックスで「分割数(交差方向)」「分割数(選択方向)」を調整します。

円周上のぐるっとの分割数は、「分割数(選択方向)」で指定されます。
「分割数(交差方向)」は、回転体の場合は回転軸と垂直方向での分割数になります。
これは「曲面の分割」を「分割しない」にすると最小値を確認できます。
この場合は13となりました。この値は形状の形により変わります。

このときの数値以下の値を指定しても、同じ分割となります。
「分割数(交差方向)」を13、「分割数(選択方向)」を16でポリゴンメッシュ変換しました。
形状情報ウィンドウで見ると、面数は208面となりました。

はじめのときよりも1/3くらいになりましたね。
皿の場合は単純な形状ですので、これで進めていくことにします。

形状名の変更

形状名の前の「<<」は不要なので削除し、「dish」という名前にしました。

全角文字や「* / !」などの記号は使わないようにします。

面の表裏の確認

ブラウザの右上の三角マークをクリックし、オプション指定部を表示します。
ここで、形状のポリゴンメッシュの横に「面反転」がついていないことを確認します。
また、透視図の設定メニューで「表示オプション」-「両面(裏面カラー)」になっているのを確認し、
面が裏返っていないか確認します。裏返っている場合は、ポリゴンメッシュの「法線を反転」するようにしてください。

表面材質をマスターサーフェスにする

表面材質ウィンドウで「登録」ボタンを押して、マスターサーフェス化します。
このときにマスターサーフェス名を「dish_mat」としました。

このマスターサーフェス名が、Unityに渡したときはマテリアル名となります。
マスターサーフェス名は、半角英数字または数値で指定するようにしてください。

また、マテリアルについてはShade3Dで指定せずにUnity側で管理するほうが後々楽になるかと思います。
この皿の場合は、反射の指定やマッピングで「スポット」の指定があります。
この情報はfbx経由でUnityに渡す場合は無視されます。
また、テクスチャマッピングを行っている場合はShade3D側でマッピングが正しいかだけ確認し、
マスターサーフェスとしてはマッピングの割り当てをしないほうが、Unity側の作業が楽になると思われます。
これについては次回説明します。

現状で、fbx出力のための前準備ができました。

fbx形式でエクスポート

メインメニューの「ファイル」-「エクスポート」-「FBX」を選択し、FBX形式でファイル出力します。
ナレッジベースの「Unityに静止形状を渡す手順」の「FBXエクスポート時の設定」と手順は同じです。
初期設定より変更が必要な部分のみ、説明していきます。
初期設定にするには、ダイアログボックスの下より「初期設定」ボタンを押します。

「ジオメトリ」タブで、「面の頂点の法線を出力」チェックボックスをオンにします。

これは、ポリゴンメッシュの面ごとの頂点法線を出力することで、
角部分のシェーディングをShade3D側とUnity側で一致させます。
Unityに限らず、FBX出力時は法線を参照するツールが多いため、「面の頂点の法線を出力」は常にオンのほうがよいかもしれません。

「表面材質」タブで、「イメージをFBXファイルに埋め込み」チェックボックスをオフに、
「イメージの反転や反復をベイク」チェックボックスをオフにします。

これは、あえてFBXにテクスチャ要素を入れないようにする指定です。
マスターサーフェスのマッピングレイヤとしてテクスチャ指定がある場合は、
FBXファイルと同じディレクトリにpng画像として出力されることになります。
こうすることで、Unity側で形状を再度インポートした場合にテクスチャも読み込まれるのも防ぐ効果があります(インポートは時間がかかる作業になります)。

「出力対象」タブで、カメラと光源をfbxに出力するかを指定します。
今回は形状のみFBX出力するため、すべてのチェックボックスをオフにします。

以上で「dish.fbx」としてエクスポートしました。
Shade3D側の作業は以上になります。
次に、Unity側のインポート作業です。

Unityに形状をインポート

Unity 2017.1.1f1を使用しました。

fbxをインポート

Shade3Dでエクスポートした「dish.fbx」をインポートします。
Projectウィンドウで右クリックし、ポップアップメニューから「Import New Asset」を選択します。
ここでfbxファイルを指定することで、まずはプロジェクトに形状をインポートします。


マテリアル情報を持つ形状のため、Materialsフォルダも生成されています。
Materialsフォルダ内には「dish_mat」名の、Shade3Dのマスターサーフェス名で指定したものが配置されています。

Material Namingを「From Model’s Material」に変更

Projectウィンドウ内の「dish」を選択して右にInspectorウィンドウを表示します。
「Material Naming」で「From Model’s Material」を選択して、「Apply」ボタンを押して確定します。

これで、インポートした形状のマテリアル名はUnity上でもそのままのマテリアル名を参照するようになります。
複数のマテリアルを使用する形状やテクスチャを扱う場合に、この指定が必要となります。

シーンを作成

シーンに形状を配置

Hierarchyより「Create」ボタンを押し、「3D Object」-「Plane」を選択して地面を配置します。

Projectウィンドウ内のdishをドラッグしてシーンに配置します。

マテリアルの調整

Planeのマテリアルを茶色で割り当てます。
Projectウィンドウ内で右クリックしポップアップメニューより、「Create」-「Material」を選択します。
新しく配置されたマテリアル名を「ground」に変更しました。

Projectウィンドウ内でgroundを選択した状態で、Inspectorウィンドウを調整します。
マテリアルには「Shader」(シェーダー)が割り当てられており、これにより色やテクスチャ調整を行います。
大部分は「Standard」のShader指定で問題ありません。
「Albedo」で表面色やテクスチャを指定します。これを茶色にし、「Smoothness」で荒さを調整しました。
「Smoothness」は、表面の反射の鮮明さを指定することになります。

この「ground」のマテリアルをシーンの割り当てる形状にドラッグすることで、マテリアルを変更します。

次に、皿のマテリアルである「dish_mat」を選択し、Inspectorウィンドウで同様にStandard Shaderのパラメータを調整します。
「dish_mat」マテリアルは、fbxインポート時に「dish」形状に割り当たっているため、
Shaderのパラメータを変更するだけでマテリアルに反映されます。

これでマテリアル調整は完了です。

以上でShade3DからUnityに形状を渡す基本的な手順は完了です。
まだ皿を渡しただけですのであまり面白みがないですが、次回でテクスチャを渡して徐々に豪華にしていきます。

カテゴリー: Unityに形状を渡す