FBXというフォーマットの邪悪さ
日々Blenderでモデリングとアニメーションを作って、fbxに出力してUnityで読み込むということをやっている
Blenderにデフォルトでついているアドオンのfbxエクスポータと、Unityでのfbx読み込みの連携が正直渋すぎると思う とはいえBlenderを責めるのもUnityを責めるのも間違いだと思う
真の邪悪は、FBXというフォーマットにある
FBXはAutodeskが開発したと思いきや実際はAutodeskが買収したナントカという企業が独自に定義したフォーマットである
バイナリとASCII両方あるが、これが最初に実装されたのはなんと20年前である
しかもひどいことにFBXの公式(今ならAutodesk)のフォーマット仕様が存在しない
ネット上に存在するFBXのフォーマット仕様は、なぜかBlender Foundationによるものである
ひどい話すぎるkeroxp.icon
そんな太古のフォーマットをまだデファクトスタンダードとして使っているゲーム業界は今一度考え直すべきではないか?
もしAutodesk製品しか使ってないから問題ない、というのなら、この話は無意味である
Autodesk製品にどんな便利な機能があるのかは知らないけど、僕はblenderを使う
OSSだし、機能も十分すぎる
FBXの邪悪さ
1. フォーマットが正直イケてない
fbxのフォーマットは、要はxmlやjsonと同じ階層型データである
構造としてはほぼxmlと同じ
ノードにプロパティがあって
ネストした子を持てる
もっと良い構造があると思う
2. フォーマットしか決まってない
最大の問題点
fbxはxmlやjsonと同じ、データ構造の定義であり、中身のフォーマットに関しては何も規定されていない
モデルのデータや、アニメーションクリップの書き方は、実質的に無い。
つまり、世の中の非公式なfbxエクスポータ/インポータは、謎の頑張りによってIOを実現している
ヤバすぎるkeroxp.icon
中身の詳細なフォーマットを決めるべき、とは言わない
しかし、何かしらの標準化は絶対にあるべきだ
3. ファイルサイズがバイナリなのに大きい
これはエクスポータのせいか?
主にアニメーションクリップの書き方だと思うんだけど
4. マルチバイト文字をサポートしていない
これもひどい
FBXのフォーマットの文字列はASCII文字列しかサポートしていない
そして大抵のインポータもASCII文字列しか読み込めない
日本語使えないんだけど!!
5. 全部のデータを一個のファイルにまとめてしまう
これも第二の大問題
↑で述べたように、各データコンポーネントに共通のフォーマットが無いのに、モデル、UV、リグ、アニメーションなどの全部のデータを一個のファイルにまとめてしまう
なので、各コンポーネントは独立して再利用できるのに、その再利用性が低まっている
特に、MMDのVMDのようにボーンのアニメーションデータはモデル、リグに非依存な形式にできるのにそれが出来ていないのがおかしい!
これらは多分、エクスポートが「シーン」という概念の上に作られているからだと思う
しかし、「シーン」は映像の概念であり、ゲームやアプリでは「モデル」だけが重要になる
なので、MMDのような「モデル」に特化したデータフォーマットが必要だと思う
俺が作るとしたら、だいたいこういう構造にすると思う
俺の考えている最高のUnity向け3Dモデルフォーマット
フォーマットはZIP
ディレクトリがオブジェクトを表す
$
info.json
meshses
head
uv
vertex-groups
body
vertex-groups
uv
cloth
vertex-groups
uv
skirt
uv
hair
uv
rig
root
body
center
...
IK_Leg.L
IK_Leg.R
animations
walk
run
textures
tex1.psd
tex1.psd.link