ブログ

blog

【WebGL特集】第6回:他のCGツールからBlenderへの移植


前回まででBlednerからのキャラクターアニメーションのwebGL出力が実現しました。
では、SI,Maya,Maxなどの他の3DCGソフトではどうなるのでしょうか。

残念ながらSI,Maya,Maxなどの他の3DCGソフトからのアニメーションの出力は対応していません。
しかし、モデルやアニメーションをBlenderに移植させることでwebGL出力は実現させることはできます。

これからSoftImageをベースにBlenderへのデータ移植方法を解説します。
MayaとMaxについても、基本的な移植手順は同じです。

(モデルのみであれば各ソフトからThree.js、.Obj、.daeなどで出力してwebGLに出力することが可能です。)

1、【特性を知る】

モデルの移植は苦労しません。fbx、Obj、daeなど、多く形式がモデル互換性に対応しています。
しかし、アニメーションは、仕様が厳しく、データを移行するのが難しくなっています。
特にスケルトンを介したアニメーションの移植は困難を極めます。

すぐには組みあがったスケルトンとアニメーションで移植を開始せず
少ないスケルトンで各ソフトとBlenderとのスケルトンの互換性について調べておくと良いと思います。

例えば、SoftImageとBlenderのスケルトンの互換性は以下のように調べました。

  1. SIで1~2本のスケルトンを作り、簡単に回転アニメーションさせる
  2. FbxとColladaで出力してBlenderに読み込む。
  3. それぞれの互換性を確認。
  4. 骨を増やす、nullをはさむ、IKを設定するなどのバリエーションでも試してみる。


結果的に、アニメーションの移植に適したファイル形式は、「Fbxで出力 > Fbxコンバーターを通してColladaに変換 > Colladaで読み込み」であり、SIでのスケルトン構成要素のroot,Bone,Efectorのうち、BoneとEffectorがアーマーチェアとしてBledenrに認識されることがわかりました。

スケルトンアニメーション移植図

SoftImageのアニメーションとリグの入ったモデルを、1発まるごとBlenderに移植することは不可能です。
その理由としては、スケルトンの特性の違いのほか、エンベロープ(スキン)の移植ができないという致命的な欠点があるからです。そこで、SIとBlenderそれぞれに同様のリギング済みモデルを作り、アニメーション情報のみをやり取りする必要が出てくるわけです。

2、【移植専用のスケルトンをBlenderとSoftImageで作る】

前提として、すでに得意とするソフトで制作したリグ付きの既存のモデルがあるとします。これを「オリジナルリグ」と呼ぶことにします。これをベースとしてSoftImageで「出力用スケルトン」を組み、それをBlenderで読み込んだものを「入力用スケルトン」とします。

3つのスケルトン

「出力用スケルトン」と「入力用スケルトン」の作り方を解説していきます。

■SoftImageのアニメーション「出力用スケルトン」を組む。

1、「オリジナルリグ」をリファレンスとして、「出力用スケルトン」を作ります。このSkeltonは後に「オリジナルリグ」に
コンストレイン、プロットしてアニメーションデータを取得するので、IKなどリグ設定をする必要はありません。

Skeltonを作るときの仕様は以下の3つ

  1. Nullやカーブ、オブジェクトなどをはさまず、スケルトンのみで構成する
  2. 胸から、両腕を生やすときのように枝分かれでスケルトンを分けなければいけないときは、胸のEffectorに両腕のRootをペアレントする。
  3. TopRootもスケルトンでなければならない。


2、「オリジナルリグのBone」と「出力用スケルトンのBone回転」をコンストレイントさせます。 TopRootはCOGになるのでこれだけは移動値をコンストレイントさせてください。

3、「出力用スケルトンのBone」の0Fに回転キーを打ちます。(TopRootだけは移動にキー)こうしないとアニメーションを移植するときにぐちゃぐちゃな動きになります。

4、スケルトンが出来たらシーンをセーブします。これがSoftImageでの「出力用スケルトン」になります。

出力用スケルトン

■Blenderのアニメーション「入力用スケルトン」を組む。

1、出力用スケルトンをブランチ選択してFbxとして出力します。出力設定は選択のみ、カメラ、ライトのチェックをはずしあとはデフォルト

2、Autodesk Fbx Converterを使い、先ほど出力したFbxをdae(Collada)に変換します。

FbxConverter

3、Blenderでdae(Collada)を読み込みます。読み込んだスケルトン(アーマーチェア)は小さすぎて、確認できないので
アーマーチェアのサイズを変更します。アウトライナーで「Armature」を選択し、ビューポートでNキーを押し、
トランスフォームパネルを表示。そしてスケールが0.01になっているのを1に変更します。
Tポーズのアーマーチェアが表示されているのがわかるでしょうか。エフェクターもアーマーチェアに変換されているので、
末端部分に余計な骨がくっついているかと思います。邪魔なようであれば消しても問題ありません。

 Dae読み込み

4、SoftImageからメッシュオブジェクトを移植します。メッシュは1メッシュにする必要があります。パーツが
ばらばらのものはマージしておいてください。メッシュをObj方式で出力します。daeでもいいのですが
これだと四角ポリゴンが三角ポリゴンに変換されてしまいます。

5、Blenderで先ほど作ったスケルトンのシーンにメッシュObjをインポートします。メッシュObjのスケールを1にして、
スケルトンとサイズが合っているか確認します。

6、エンベロープを設定します。他のソフトからエンベロープをもってくる方法が見つからないので、再設定するしかないのです。
これでBlenderでの入力用スケルトンが完成です。

入力用スケルトン完成

3、【アニメーションを移植する】

1、SIの「オリジルリグ」にアニメーションをつけて、出力用スケルトンでBoneの回転をプロット(TopRootは移動)0フレーム目はTポーズで。
2、Fbxで出力して、FbxConverterでdaeに変換
3、Blenderで移植用スケルトンのあるシーン上に、daeを読み込む。
4、入力用スケルトンを選択してドープシートの下メニューのモードをアクションモードに変更その少し右側のプルダウンでdaeのArmatureActionを選択
アクションソース変更
5、読み込んだdaeを削除して、Three.jsで出力。タイムラインの終了フレームはアニメーションの長さに合わせること。

これで、Blenderへのアニメーション移植は完了です。

■MAYAからの移植

Mayaからのスケルトン(アニメーションも含む)の移植はdaeを直接使えます。FBXコンバーターを使わなくても良いのです。
(SoftImageはFbxコンバーターを通したdaeでないとスケルトンの移植はできませんでした)

【手順】
1、MAYAの「オリジナルリグ」をベースに「出力用スケルトン」を作る
2、「出力用スケルトン」をDaeでBlenderに持っていく
3、Blenderで受け取ったスケルトンを整備して「入力用スケルトン」とする。
4、MAYAでアニメーション制作、dae出力
5、Blenderで受け取りthree.js出力

■3dsMaxからの移植

Maxからのスケルトン(アニメーションも含む)の移植は、daeはFBXコンバーターを使っって出力したものが適しています。
つまり、SoftImageと同じです。

直接のdaeが、不可能とは言い切れませんが、やってみたところ、うまくいきませんでした。
Autodesk colladaでは、骨のみ、アニメーションは移植できず。
Open COLLADA ではBlenderに読む込むと同時にBlender自体が落ちてしまいました。
3DS形式でもスケルトンがずれてしまう不都合がありました。

【手順】
1、MAXの「オリジナルリグ」をベースに「出力用スケルトン」を作る
2、「出力用スケルトン」をFbxで出力して、FbxコンバーターでDaeに変換。Blenderに持っていく
3、Bledenrで受け取ったスケルトンを整備して「入力用スケルトン」とする。
4、Maxでアニメーション制作、dae出力
5、Blenderで受け取りthree.js出力

以上です。
次回は最終回。webGLに影やアンチエイリアシングを適用して表示をきれいにしてみます。

Mox-Motionに興味をお持ちの方はお気軽にご連絡ください!

採用希望の方は・・・