three.js‎ > ‎

CDD-IK Bone(ボーン)


CDD-IK Boneとは、Skeltal Skinning(スケルトン スキニング) アニメーションの IK(Inverse Kinematics: インバースキネマティクス)を実現する方法のうちの一つ、 Cyclic-Coordinate-Descent のことです。
ようするに、親のボーンを動かすと子のボーンにも影響を与える従来のやり方FK (フォワードキネマティクス)から、子のボーンの位置を変更すると、親にも波及するという逆の方法です。

現在作成中の動画

なんとかなく動き出しました。特にThree.jsに依存してません。余裕あれば他のWebGLライブラリーでも試してみたいです。

テクニカル

最大・最小角度制限

人間の関節だと最大値があるので
角度制限のため、最大・最小を超えると、値を切っていましたが、たまにNaNになるので、有効な値かチェックしています。
(ジンバルロックという問題がおきるので、90の倍数の値をしていないほうが無難な気がします。)
ただ、最大・最小制限すると、真っ直ぐなまま曲がらなくなったりしました。1回の計算での回転数を減らすとましになりました。

Matrix4を変更後のVector3角度に戻して制限しました。

1回の回転角の限定

マウスの移動のたびに計算するので、1回の最大回転角を3度まで減らしましたが、
そうすることで、すべてのボーンが均等に回るようになりました。
ただ、逆にぐにゃぐにゃになりがちなので、最大・最小の角度制限は必要だと思いました。

Matrix4を変更後のVector3角度に戻して、最初の角度との差を比較して、最初の角度にプラスするようにしました。

関連

CDD-IK Bone

参考になる文献

英語

日本語

Comments