2009年6月14日日曜日

ボーンアニメーション

日記を書くのをだいぶサボってしまいましたが、その間、いろいろ勉強してました。

3Dのこと、AIのこと、Objective-C(←iPhoneアプリに触手を伸ばしたり...)のこと等々。

で、勉強もいいけど、実際に作ってみないとやっばり身に付かないなぁということも感じたり...

つうことで、とりあえず、自前でボーンアニメーションを実装してみようかなと。。

でもその前にまず理論を押さえとかないと(やっぱ勉強からかT_T)ということで、

こことかこことか読んでみました。

いろいろ小難しいんですが、要は、ボーンを動かしてキャラクタのポーズをつけて、各頂点とそれらのボーンを関連づけて、ボーンの動きに頂点を追随させようというのが基本のようです。

これはなんとなく理解できます。ただそれだけだと、ポーズによっては、違うボーンに関連付けられた頂点同士の位置がずれて、面がくしゃってなったり、亀裂がはいったりします。そこで登場するのが、頂点ブレンディングという考え方です。これも一見複雑なんですが、要は、1つの頂点をボーンに関連付ける時に重みづけしましょうということのようです。例えば人間のキャラクタの肘の部分は、上腕と下腕の両方の動きの影響を受けます。この場合の肘の部分の頂点を上腕のボーンに0.5、下腕のボーンに0.5といった重みをつけて関連づけます。上腕に0.6、下腕に0.4といった関連付けでもOKですが、関連付ける重みの合計が1.0(=100%)になるように設定します。

うまく重みを設定してやると、腕を曲げても自然な感じで曲がってくれます。

最初は理論的なことや実装方法等がいまいち飲み込めなかったのですが、ふとした時にDirectXの「Skinned Mesh Character Animation with Direct3D 9.0c」というPDFの資料を見つけました。これの説明がかなり分かり易くて、もやもやしてたものが大分はっきりしてきました。DirectXの資料なのでもちろんXFileに関した話が中心なんですが、理論的な話についてはXFileに特化してるわけではなく汎用的な話としてかなり参考になりました。

ということで、ひとまず基礎的なところは理解しました。...たぶん

0 件のコメント: