目次
【Q1】 DirectX Viewerでスキニング対応モデルの表示が崩れる。
2006年あたり以降のDirectX SDKに付属のDirectX Viewer(DXViewer.exe)では、複数のマテリアルを含むスキニング対応モデルの表示ができなくなっています。これは、ビューアー内でID3DXMesh::Optimize()関数が呼ばれなくなったためであるようです。
この場合、DirectX SDKの「\Utilities\Bin\x86」フォルダにあるDxOps.exeを利用してXファイルを表示できる状態に最適化する必要があります。「file.x」を変換する場合、コマンド ラインから「dxops -s “load file.x; optimize; save new_file.x;”」とするとコマンド内でID3DXMesh::Optimize()が呼ばれて最適化された「new_file.x」が作られ、DirectX Viewerで表示できます。
実際のところ、これでは使いづらいと思われるので、ID3DXMesh::Optimize()を呼ぶようにDirectX Viewerを改造する方が便利かも知れません。
当方ではDirectX SDKの以前のバージョンに付属していたMeshView(MView.exe)をXファイルの表示チェックに使用しています。これにはツリー構造の表示機能もあり、とても便利です。他のビューアーとしては、ふぁっきんじゃっぷさんにアップされている「DBP MeshViewer」も使いやすいです。このビューアーを使う場合、MechaStudioでのエクスポート時に「1フレームあたりの時間単位」を1にすると再生速度が適切になります。
なお、DirectX10 SDK以降についてはそもそもXファイル自体がサポートされておらず、読み込み/表示ライブラリーも存在しません。DirectX10以降を利用される場合、独自フォーマット用のプラグインを作ってMechaStudioから直接入出力するのが早道かも知れません。ToyStudio SDKのSamplePluginサンプルで入出力している「.txt1」、「.txt2」ファイルを独自フォーマットの原型として利用することもできます。
【Q2】 グラフ ウィンドウでオブジェクトの回転の傾きがアニメーションに反映されない。
オブジェクト ウィンドウの「回転を球面線形補間」がONの場合、キーフレームのオイラー角(XYZ角度)の補間ではなく、キーフレームのクォータニオン(姿勢方向)の補間が行われます。具体的には、X、Y、Z軸の回転キーがあるフレームにおいてオイラー角をクォータニオンに変換し、それらのフレーム間で球面線形補間を行っています。 なので、オイラー角のグラフの傾きも無視されます。
オイラー角のグラフ通りに角度を補間したい場合、「回転を球面線形補間」をOFFにすると、オイラー角の補間を利用できます。
データ編集においてはオイラー角(XYZ軸角度)のグラフによる編集が便利ですが、オイラー角はジンバル ロックの影響を受けるため、ボーンなどの関節のアニメーションでは通常、クォータニオンの補間が利用されます。クォータニオンは便利なデータ形式ですが、オイラー角のようにグラフで幾何学的に認識することはできません。また、オイラー角からクォータニオンへの変換は一意にできますが、その逆は一意ではありません。なので、データとしてはオイラー角で保持しながら、必要に応じてクォータニオンを利用するというのが汎用的で使いやすく、ToyStudio/MechaStudioでもその方法を採用しています。
【Q3】 「スムーズ スキニング」コマンドを実行すると、メッシュ オブジェクトが表示されなくなる。
システムにDirectX SDKがインストールされている場合、DirectX Control Panelの「Direct3D 9」タブにおいて、「Use Retail Version of Direct3D 9」がチェックされている必要があります。
あるいはビデオカード関係の問題の場合、「ツール」メニューの「デバイス」ダイアログで、「ハードウェア頂点処理」のON/OFFを切り替えると、表示できるようになる場合があります。
【Q4】 「シーンにインポート」コマンドで、テクスチャ ファイルの読み込みに失敗する。
テクスチャ ファイルが相対パスで指定されている場合、テクスチャ ファイルはTOYファイル本体からの相対的なフォルダ位置で指定されることになります。なので、既にに開いているTOYファイルとインポートするTOYファイルのフォルダが異なる場合、「ファイル」メニューの「シーンにインポート」コマンドにおいて、テクスチャ ファイルの読み込みに失敗します。
テクスチャ ファイルを既に開いているTOYファイルと同じフォルダに移動してから「シーンにインポート」コマンドを実行してください。
【Q5】 複数のアニメーションを持つFBXファイルの各アニメーションの再生範囲が同じに読みこまれる。
FBXライブラリー(MechaStudioではFBX SDK 2010.2を使用)には、複数のアニメーションを含むFBXファイルの出力時に各アニメーションの長さが同じ値で出力されるバグがあります。この長さ情報は、出力時にFBXファイブラリーによって自動的に付加されるもので、この情報をFBXファイルから読み込んでいるアプリケーションでは、複数のアニメーションの再生範囲が同じになったりします。
個々のキー自体は正常に読み込まれているため、MechaStudioのようにキーの範囲から再生範囲を算出しているアプリケーションは影響を受けません。
影響を受けるアプリケーションの場合、それぞれの読み込み方によって影響が異なります。Autodesk FBX Converter (FBX Viewer)では、各アニメーションが長さの短い順に並んでいれば問題ないようです。アニメーションを別々のFBXファイルから読み込めるアプリケーションでは、アニメーションごとのFBXファイルを出力すれば、この影響を避けることができます。