2011年12月31日土曜日

FBX形式


FBXは、Autodesk社の3DCGシーンデータを交換するための中間ファイルフォーマットです。元々はKaydara社が自社のアニメーションツールFilmBox(現在のMotionBuilder)が他社のCGツールとデータ交換を行う目的で開発された中間ファイル形式(FilmBoxExchange)でしたが、現在はAutodesk社の3DCGアプリケーション間のデータ交換およびユーザーがシーンファイルをアクセスする目的で利用されています。先日、Autodesk社の3Decemberというイベントに参加してきましたが、今後もFBXが同社のCGアプリケーションのデータ交換形式としてバージョンアップされていくということです。

FBXは、バイナリー形式(もしくはテキスト形式)でシーングラフで記述するファイルフォーマットで、通常はAutodesk社が提供しているFBX SDKを利用してAPIベースでアクセスします。FBXのバージョンは使用しているSDKのバージョンと密接にリンクしています。基本的には上位互換ですが、新しいSDKでサポートされなくなったAPIなどがありますので、古い形式で出力されたFBXでも新しいバージョンをサポートしているプラグインで読めない場合もあるようです。Autodesk社から異なるバージョンを変換するFBXConverterがダウンロードできますので、バージョンの違いが起因するエラーが発生した場合は、このユーティリティツールを利用する方法があります。

http://usa.autodesk.com/adsk/servlet/pc/index?id=6837478&siteID=123112

modo 501で使用しているSDKは、FBX SDK 2010.2です。デフォルトでの保存形式はテキスト形式ですが、初期設定パネルのシーン入出力>FBX書き出しのオプションでバイナリ形式出力に変更することも可能です。初期設定パネルで指定できるオプションは、下記の通りです。”エッジスムージング付きで保存”は、ポリゴン頂点の法線ベクトルをFBXのエッジスムースとして出力するオプションです。

  • テキストフォーマットで保存
  • エッジスムージング付きで保存
  • カメラを保存
  • ライトを保存
  • ロケータを保存


下記は、modoがサポートするFBXの詳細です。

頂点座標値
頂点座標値は、modoの内部で使用されている座標値に100を掛けた値で入出力されます。modoは、1メートルを1.0で内部的に保存していますのでセンチメートルとして出力していることになります。ちなみにmodoの座標系は右手座標系で、Y軸が上方向です。

モーフデータ
modoのモーフマップは、FBXのシェープデータとして出力されます。出力されるモーフは、相対モーフのみで絶対モーフマップは出力されませんので注意が必要です。また、FBXのシェープデータは相対モーフマップとしてmodoに読み込まれます。

法線ベクトル
modoの面法線ベクトルは動的に計算されます。FBXにはこの計算された法線ベクトルの値がLayerElementとして出力されます。また、FBXに保存されているLayerElementのベクトルはmodoの法線ベクトルマップに読み込まれます。

テクスチャUV座標値
modoでは、テクスチャUV座標値は頂点マップとしてメッシュレイヤーごとに保存されています。FBXでは複数のUVマップを取り扱うことができますので、modoで作成した複数のUVマップは全てFBXに書き出すことができます。FBXではLayerElementとして保存されます。

頂点カラーマップ
modoでは、頂点カラーデータもテクスチャUVと同様に非連続頂点マップとして保存されます。頂点カラーマップは、RGBおよびRGBAの2種類があり、どちらもFBXのLayerElementとして保存されます。

ポリゴングループ
modoでは、ポリゴンを任意の目的でグループ化する際にパートという文字列をポリゴンに付けることができます。同一のパート名称を持ったポリゴンをポリゴングループとして取り扱うことが可能です。modoで付けられたパート情報は、FBXのLayerElementPolygonGroupに変換されます。

スタティックメッシュ
スタティックメッシュは、通常のメッシュを編集不可の圧縮した三角形の集合として保存するmodoのもう一つのメッシュアイテム形式です。このスタティックメッシュには、頂点マップの情報も保存されていますので、FBXにも通常のメッシュと同様に頂点座標やテクスチャ座標値が出力されます。ただし、メッシュと同じフォーマットで出力されますのでFBX読み込み時にはメッシュアイテムとして読み込まれます。

サブディビジョンサーフェイス
modoには、オリジナルのサブディビジョンサーフェイスとCatmull-Clarkサブディビジョンサーフェイスがありますが、FBXにはサブディジョンサーフェイスのSmoothness、PreviewDivisionLevels、RenderDivisionLevels、DisplaySubdivisionsが出力されます。modoではサブディビジョンサーフェイスはポリゴン単位の情報ですが、FBXではメッシュレイヤー全体に対してスムースレベルやサブディビジョンレベルが適用されますのでサブディビジョンサーフェイスを持つメッシュのポリゴンは全てサブディビジョンサーフェイスとして認識されます。また、エッジウェイトの情報はEdgeCreaseのデータとして出力されます。スムースレベルが設定されたFBXのメッシュポリゴンはCatmull-Clarkサブディビジョンサーフェイスとしてmodoに読み込まれます。

カーブ、ベジェカーブ
カーブおよびベジェカーブは、通常の面ポリゴンとして出力されますので、modoに再度読み込むと面ポリゴンになってしまいます。

インスタンスメッシュ
インスタンスメッシュは、元となるメッシュアイテムがFBXに出力されます。

マテリアル
マテリアル情報は、modoとFBXに共通の項目が入出力されます。

modoFBX
Diffuse ColorDiffuseColor
Specular AmountSpecularFactor
Specular ColorSpecularColor
RadianceEmmisiveFactor
Luminance ColorEmissiveColor
Reflective AmountReflectionFactor
Reflection ColorReflectionColor
Transparency AmountTransparencyFactor
RoughnessShininess(Shininess = exp ((10 * (1 - Roughtness) + 2) * log (2)))

カメラ情報
カメラに関しては、modoのカメラアイテムのチャンネルデータがFBXに出力されます。一部のチャンネルはアニメーションのFCurveとして出力されます。

modoFBX
Focal Length(Envelope)FocalLength(FCurve)
SqueezeSqueezeRatio
Film WidthApertureWidth
Film HeightApertureHeight
Projection TypeProjectionType(eORTHOGONALもしくはePERSPECTIVE)
Focus DistanceFocusDistance
Film OffsetXOpticalCenterX
Film OffsetYOpticalCenterY

ライト情報
ライトは、Radiant Exitanceが光源の輝度情報としてFBXのIntensityに出力される(FBX Intensity = Radiant Exitance * 40)他、スポットライトのコーン角度、指向性光源がeDIRECTIONAL、点光源がePOINTとして出力されます。ライトマテリアルの色もLightColorとして出力されます。

ロケータ情報
メッシュ、カメラ、ライトは、ロケータアイテムの派生アイテムで、共通のトランスフォーム情報(移動、スケール、回転、回転順序、ピボット位置)を持っています。これらのロケータアイテムの情報は、アニメーションデータとして、アイテムの階層構造と共に出力されます。FBXは元々モーションデータを受け渡すのが主な目的でしたのでアニメーション情報に関しては多くの情報が出力されています。ただし、modoのエンベロープカーブは、複合的なカーブを混在して使用することが可能な柔軟かつユニークな形式ですので、このエンベロープをFBXのFCurveに内部的に変換しています。