前回、Webベースの3DCGライブラリ「Babylon.js」と、Unityプロジェクトを変換する手順について解説しました。
Babylon.js向けデータをUnityから出力する - CrossRoad
今回は、変換できるもの、できないものを簡単に整理しました。なお、検証環境は以下の通りです。
- Unity Editor 2018.1.6f1
- Babylon Toolkit v3.2.1
- Safari 11.1.1、Chrome 67.0.3396.99
- Mac OSX 10.13.6
1. 変換内容
主なものをざっとまとめました。詳しくは下記の公式HPをご確認ください。変換できるもの
- GameObjectの名称、mesh形状、position、rotation、scale、collider (ただしcustom colliderは対象外)、tag
- GameObjectのLayers、Tag
変換できるが一部未対応
- Material、Shader
- Physically Based Rendering
- Terrians(ただし試した限りでは変換されませんでした)
未対応
- timeline、Octane Rendererなどの新しい機能
- Unity nativeのC#
- Particle System
- uGUI
前回、SphereにParticleをつけてC#で動かしたものを変換してみたら、Particleと動きが反映されませんでしたが、これは未対応だったためでした。
uGUIは記載がありませんが、Babylon.jsにはBabylon GUIという仕組みがあります。
2. GameObjectの変換検証
前回確認したように、メッシュが少なく単独のGameObjectは変換できます。そこで、今回は多数のGameObjectが混じっている例として、Japan Otaku Cityアセットのサンプルシーンを変換してみました。Unityの画面はこちらです。
これをBabylon Tool Kitで変換し、生成されたindex.htmlをSafariで表示させた結果がこちらです。
このように、同じアングルで生成されることが確認できました。ただし、このままでは動きがついていないので、このアングル以外のGameObjectがどうなっているかを確認することができません。
そこで、生成されたindex.html側にBabylon.jsのCameraを追加して動かしました。
全部を飛び回ったわけではありませんが、最初のアングルから外れたところも再現されていました。変換条件の限界は不明ですが、Japan Otaku CityくらいのGameObjectが含まれていても、変換はできるようです。
ちなみに、Babylon.jsのCameraを追加するには、生成されたindex.htmlに数行追加するだけです。
gist68c400994fb9467f3246d1b3471595e9
freeCameraはBabylon.jsが提供しているCamera機能で、上下左右キーとマウス操作でFPS的な移動ができます。Unityで定義したMain Cameraの座標だけ合わせればよいです。
3. マテリアルの変換検証
実は先ほどのJapan Otaku Cityの変換結果では、treeの画像についてFadeが効いていませんでした。Standard MaterialのRendering Modeは反映されないようです。ついでに、例として、Standard MaterialのMetalic、Diffuse、Fade、Waterを試しました。
わかりづらいですが、下部のWaterが動いているのが確認できます。次に、これを変換してindex.htmlを表示させたのがこちらです。
Metalicについては微妙に色合いが変わってしまいました。Diffuseはそのまま再現されましたが、FadeはJapan Otaku Cityのtreeと同様に効かず黒くなりました。また、WaterについてはShaderの時間変化が再現されませんでした。
4パターンの結果から推測するのは少し乱暴ですが、マテリアルの変換はあまり期待せず、Babylon.jsで直接作る方が良さそうです。
4. Terrainの変換検証
公式HPには、Terrain Builderという名称でTerrainを変換できる、とあります。しかし、Unity側で何度かTerrainを作ってみたのですが、Babylon.js側には何も表示されませんでした。まず、Unityで作ったTerrainのシーンです。
続いて、Babylon.js向けに変換したシーンです。
このように、目印として置いたSphereしか変換されていません。
さすがに何も変換されないのは不自然なので、私の設定が間違っていると思われます。しかし、マニュアルにはTerrain Builderに関する特別な設定は何も書いていませんでした。解決したら変換方法を追加予定です。
5. 終わりに
今回調べたことで、Unityからの変換範囲は、静的なGameObjectとテクスチャ情報程度と考えた方がよさそうと思いました。次回はBabylon.jsの文法を交えて、Unityから変換したGameObjectを制御する方法を解説予定です。