blog
前回まででBlednerからのキャラクターアニメーションのwebGL出力が実現しました。
では、SI,Maya,Maxなどの他の3DCGソフトではどうなるのでしょうか。
残念ながらSI,Maya,Maxなどの他の3DCGソフトからのアニメーションの出力は対応していません。
しかし、モデルやアニメーションをBlenderに移植させることでwebGL出力は実現させることはできます。
これからSoftImageをベースにBlenderへのデータ移植方法を解説します。
MayaとMaxについても、基本的な移植手順は同じです。
(モデルのみであれば各ソフトからThree.js、.Obj、.daeなどで出力してwebGLに出力することが可能です。)
モデルの移植は苦労しません。fbx、Obj、daeなど、多く形式がモデル互換性に対応しています。
しかし、アニメーションは、仕様が厳しく、データを移行するのが難しくなっています。
特にスケルトンを介したアニメーションの移植は困難を極めます。
すぐには組みあがったスケルトンとアニメーションで移植を開始せず
少ないスケルトンで各ソフトとBlenderとのスケルトンの互換性について調べておくと良いと思います。
例えば、SoftImageとBlenderのスケルトンの互換性は以下のように調べました。
SoftImageのアニメーションとリグの入ったモデルを、1発まるごとBlenderに移植することは不可能です。
その理由としては、スケルトンの特性の違いのほか、エンベロープ(スキン)の移植ができないという致命的な欠点があるからです。そこで、SIとBlenderそれぞれに同様のリギング済みモデルを作り、アニメーション情報のみをやり取りする必要が出てくるわけです。
前提として、すでに得意とするソフトで制作したリグ付きの既存のモデルがあるとします。これを「オリジナルリグ」と呼ぶことにします。これをベースとしてSoftImageで「出力用スケルトン」を組み、それをBlenderで読み込んだものを「入力用スケルトン」とします。
「出力用スケルトン」と「入力用スケルトン」の作り方を解説していきます。
1、「オリジナルリグ」をリファレンスとして、「出力用スケルトン」を作ります。このSkeltonは後に「オリジナルリグ」に
コンストレイン、プロットしてアニメーションデータを取得するので、IKなどリグ設定をする必要はありません。
Skeltonを作るときの仕様は以下の3つ
3、「出力用スケルトンのBone」の0Fに回転キーを打ちます。(TopRootだけは移動にキー)こうしないとアニメーションを移植するときにぐちゃぐちゃな動きになります。
4、スケルトンが出来たらシーンをセーブします。これがSoftImageでの「出力用スケルトン」になります。
1、出力用スケルトンをブランチ選択してFbxとして出力します。出力設定は選択のみ、カメラ、ライトのチェックをはずしあとはデフォルト
2、Autodesk Fbx Converterを使い、先ほど出力したFbxをdae(Collada)に変換します。
3、Blenderでdae(Collada)を読み込みます。読み込んだスケルトン(アーマーチェア)は小さすぎて、確認できないので
アーマーチェアのサイズを変更します。アウトライナーで「Armature」を選択し、ビューポートでNキーを押し、
トランスフォームパネルを表示。そしてスケールが0.01になっているのを1に変更します。
Tポーズのアーマーチェアが表示されているのがわかるでしょうか。エフェクターもアーマーチェアに変換されているので、
末端部分に余計な骨がくっついているかと思います。邪魔なようであれば消しても問題ありません。
4、SoftImageからメッシュオブジェクトを移植します。メッシュは1メッシュにする必要があります。パーツが
ばらばらのものはマージしておいてください。メッシュをObj方式で出力します。daeでもいいのですが
これだと四角ポリゴンが三角ポリゴンに変換されてしまいます。
5、Blenderで先ほど作ったスケルトンのシーンにメッシュObjをインポートします。メッシュObjのスケールを1にして、
スケルトンとサイズが合っているか確認します。
6、エンベロープを設定します。他のソフトからエンベロープをもってくる方法が見つからないので、再設定するしかないのです。
これでBlenderでの入力用スケルトンが完成です。
1、SIの「オリジルリグ」にアニメーションをつけて、出力用スケルトンでBoneの回転をプロット(TopRootは移動)0フレーム目はTポーズで。
2、Fbxで出力して、FbxConverterでdaeに変換
3、Blenderで移植用スケルトンのあるシーン上に、daeを読み込む。
4、入力用スケルトンを選択してドープシートの下メニューのモードをアクションモードに変更その少し右側のプルダウンでdaeのArmatureActionを選択
5、読み込んだdaeを削除して、Three.jsで出力。タイムラインの終了フレームはアニメーションの長さに合わせること。
これで、Blenderへのアニメーション移植は完了です。
Mayaからのスケルトン(アニメーションも含む)の移植はdaeを直接使えます。FBXコンバーターを使わなくても良いのです。
(SoftImageはFbxコンバーターを通したdaeでないとスケルトンの移植はできませんでした)
【手順】
1、MAYAの「オリジナルリグ」をベースに「出力用スケルトン」を作る
2、「出力用スケルトン」をDaeでBlenderに持っていく
3、Blenderで受け取ったスケルトンを整備して「入力用スケルトン」とする。
4、MAYAでアニメーション制作、dae出力
5、Blenderで受け取りthree.js出力
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に影やアンチエイリアシングを適用して表示をきれいにしてみます。