CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Babylon Tool KitによるUnityプロジェクトの変換検証

前回、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をご確認ください。

Babylon.js向けに変換できるUnity機能の一覧

変換できるもの

  • 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の画面はこちらです。
Japan Otaku CityをUnity Editorで表示させた例

これをBabylon Tool Kitで変換し、生成されたindex.htmlをSafariで表示させた結果がこちらです。

Japan Otaku CityアセットをBabylon.js形式で表示させた例

このように、同じアングルで生成されることが確認できました。ただし、このままでは動きがついていないので、このアングル以外のGameObjectがどうなっているかを確認することができません。

そこで、生成されたindex.html側にBabylon.jsのCameraを追加して動かしました。

UnityからエクスポートしたシーンにBJSのカメラを追加した例

全部を飛び回ったわけではありませんが、最初のアングルから外れたところも再現されていました。変換条件の限界は不明ですが、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は反映されないようです。

Unity Standard Materialの設定情報

ついでに、例として、Standard MaterialのMetalic、Diffuse、Fade、Waterを試しました。

Unityのマテリアルを表示させた例

わかりづらいですが、下部のWaterが動いているのが確認できます。次に、これを変換してindex.htmlを表示させたのがこちらです。

UnityのマテリアルをBJS形式で表示させた例

Metalicについては微妙に色合いが変わってしまいました。Diffuseはそのまま再現されましたが、FadeはJapan Otaku Cityのtreeと同様に効かず黒くなりました。また、WaterについてはShaderの時間変化が再現されませんでした。

4パターンの結果から推測するのは少し乱暴ですが、マテリアルの変換はあまり期待せず、Babylon.jsで直接作る方が良さそうです。

4. Terrainの変換検証

公式HPには、Terrain Builderという名称でTerrainを変換できる、とあります。しかし、Unity側で何度かTerrainを作ってみたのですが、Babylon.js側には何も表示されませんでした。

まず、Unityで作ったTerrainのシーンです。
UnityのTerrainで作ったシーン

続いて、Babylon.js向けに変換したシーンです。
Babylon.js向けに変換したシーン

このように、目印として置いたSphereしか変換されていません。

さすがに何も変換されないのは不自然なので、私の設定が間違っていると思われます。しかし、マニュアルにはTerrain Builderに関する特別な設定は何も書いていませんでした。解決したら変換方法を追加予定です。

5. 終わりに

今回調べたことで、Unityからの変換範囲は、静的なGameObjectとテクスチャ情報程度と考えた方がよさそうと思いました。

次回はBabylon.jsの文法を交えて、Unityから変換したGameObjectを制御する方法を解説予定です。