Babylonjsで扱うことの出来るファイルフォーマットについて

AR

Three.jsでは、非常に多くのファイルを扱うことが出来ます。
https://github.com/mrdoob/three.js/tree/dev/examples/jsm/loaders

一方で、Babylonjsがデフォルトでサポートしているファイル形式は多くありません。むしろかなり絞っています。これは方針の違いの一つであり、またそのメリットもあると思います。
特定のファイルを急ぎ表示して扱いたいという方は Three.jsを選択すればよいかなと思います。もしゲームなどを作り込みたいという場合であれば、まずWebテクではなくUnityなどを検討された方が良いかもしれません。

Babylonjsがデフォルトでサポートしてるのは、以下の3つのフォーマットです。

  • .glTF
  • .obj
  • .stl

少ないですね。もちろん、自作のLoaderを作るやり方なども紹介されているので、やろうと思えばできるでしょう。

glTFファイルとは

比較的新しく、モダンなファイルフォーマットです。
なぜそんな紹介になるかというと、後述のobjが1995年頃、stlは1987年のリリースとなっており、3Dデータを扱うフォーマットは歴史が長いものが多いということがあります。CADなどのソフトウェア、ピクサーなどの会社ごとにフォーマットが生まれたという背景があるようです。
Babylonjsを扱うプログラマーの方の中には、”stlよりも誕生が後”という人もいるかも知れませんね。。

中身はJSONファイルであり、例えば以下のようなサンプルを見ると構造が分かります。

glTF-Sample-Models/2.0/WaterBottle/glTF/WaterBottle.gltf at main · KhronosGroup/glTF-Sample-Models
glTF Sample Models. Contribute to KhronosGroup/glTF-Sample-Models development by creating an account on GitHub.

テクスチャとしてpngファイルを読み込んでいるのが分かります。正直なところ、水筒の3Dデータがこんなシンプルなデータでホントに出来るのかと疑ってしまいます。

余談ですが、VTuberなどに用いられるVRMという規格があるのですが、これはglTFを元にしているalt-glTFとも言えるフォーマットです。

 VRMはglTF2.0をベースとしたフォーマットとなっています。

https://vrm.dev/docs/univrm/gltf/gltf_about/

VRM は、Animation を使わないという仕様です

https://vrm.dev/docs/univrm/gltf/animation_exporter/

拡張されているだけでなく、部分的に捨てられている?部分があるようです。単に「使わない(データの枠はあるが使用しない)」という事であれば問題なさそうですが、似ているが別物として扱わなければならない可能性もありそうです。

objファイルとは

レガシーなファイルフォーマットの中では一般的で、様々な3Dソフトウェアでも対応しているフォーマットではあります。むしろ、上述の通り特定の企業やソフトウェアに紐付いたファイルフォーマットが多い中では扱いやすく、広く利用が可能な形式ではあります。お手持ちの3Dソフトウェアがobjファイルエクスポート可能であれば、babylonjsとの連携も可能と言えます。

時代的にstlファイルと前後してしまうのですが、stlファイルが色情報を扱えない一方、色情報を扱うことができるのがobjファイルです。(そういう段階の話になります)ほか、アニメーション情報も持つことが出来るFBXというフォーマットもあるのですが、後述します。

stlファイルとは

このstlファイルというのは3Dプリンター業界では一般的なファイルフォーマットとなっており、そもそも仕様を策定したChuck Hull氏が3Dプリンター企業の方で、YouTubeなどにも動画があります。

Charles W. Hull – 3D printing (stereolithography)

上述の通りかなり古いフォーマットですが、仕様策定企業が2021年現在も存在しており、業界標準となっていることがあります。”FAX”みたいですね

なぜbabylonjs ではこの3つをデフォルト対応しているのか考察

babylonjs側として「WebXRのデータフォーマットであるglTFを使ってくれよ」というメッセージを出しているような気がします。それは単にフォーマットを独占したいというわけでなく、これからWebXRを伸ばしていきたいという意思があるのだと思います。

絞っている理由(やらない理由)

最も利用されている規格が望ましくないから

色情報はもちろんアニメーション情報も持つことができるFBXというフォーマットがあり広く使われています。「じゃあソレだけで良いじゃないか」というハナシになりそうなのですが、すでに仕様策定企業が無く、その企業を買収したはずのAutodesk社も特に支援していないというような状況にあります。特にFBXについては採用する理由より、採用しない理由の方が大きいのかも知れません。

ネット上に存在するFBXのフォーマット仕様は、なぜかBlender Foundationによるものである

FBXというフォーマットの邪悪さhttps://scrapbox.io/keroxp/FBX%E3%81%A8%E3%81%84%E3%81%86%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AE%E9%82%AA%E6%82%AA%E3%81%95

「古いから良くない」とは言えないのですが、結果的に当事者がいなくなってしまったということは望ましいことではないと思います。

データの加工や編集は3Dソフトがやるべきだから

Babylonjsはブラウザで動くライブラリであり、ユーザーに届ける終端に位置しています。
データの加工や編集は3Dソフトで行い、「表示はブラウザとBabylonjsに任せて欲しい」ということだと思っています。babylonjs向けのエクスポートライブラリなどもありますが、glTFファイル形式への出力の方が一般的になりつつあります。
Three.jsのラッパーであるA-Frameも、画像の編集と書き出しをAdobeでやるのと同じように、サーバから配信されるファイルとしてはglTFファイルが扱われるべきだと表現しています。

サポートしだすと際限がないから

3D系のデータフォーマットは歴史が長いだけでなく、様々な規格が存在しています。改めてThree.JSの対応フォーマットのリストを貼りますが、同様にサポートしてメンテナンスし続けること自体の大変さもありますし、他の機能開発の方が優先した方が良いという判断があると思います。
https://github.com/mrdoob/three.js/tree/dev/examples/jsm/loaders

すでに上述ですが、ほとんどのフォーマットは3Dソフトを利用してglTFに変換可能です。
既存の資産を使いたいということであれば、そのまま投げ込むのではなくglTFに変換すれば使えばよいと言えます。もちろん対応が発生する可能性が高く、もし無理であればThree.jsを利用すれば良いのだと思います。

おわりに

stlファイルですが、3Dプリンターというビジネス用途を考えれば、やはり妥当かなと思うところがあります。Windows10に搭載されている3Dデータ表示ツールでデータを開くことも出来ます(gltfではプレビューも出来ます)。3Dプリンターデータを扱ったりするECサイトなどでの利用を考えれば、デフォルトでサポートしているというのは選ばれるためのアドバンテージになり得ると思います。

WebXRのデータフォーマットであるglTF、3Dプリンター業界などで広く使われている stlファイル、そしてレガシーな中では広く利用されエクスポート出来るobjファイル、これら三者三様のファイルフォーマットがbabylonjsではデフォルトでサポートされている、という話でした。

タイトルとURLをコピーしました