fuurinn 問題確認用のSpineプロジェクトを送っていただきありがとうございます!この問題は、パスコンストレイントで制約されているボーンに対してそのターゲットパスがバインドされていることが原因のようです。
例えば尻尾用のパスa-sippo-nemoto
は、ボーンa-sippo
に対してバインドされていますが、そのa-sippo
はパスコンストレイントによってa-sippo-nemoto
に対して制約されています。これにより、ボーンa-sippo
の回転のキーを記録すると、その値に応じてパスa-sippo-nemoto
の頂点の位置が動き、パスが動いたのでボーンa-sippo
の回転が動くといった状態になっています。
なぜ現在のポーズのキーを単純に記録しているだけのはずなのにパスが動いてしまうかは、コンストレイントの適用順が影響していると思われます。
①まず各ボーンのワールドトランスフォームに従ってその子孫のトランスフォームが決定し、
②コンストレイントが適用され、
③それによって再度子孫のトランスフォームが再計算される
という流れになっているはずなので、例えばボーンa-sippo
の回転のキーを記録してそのボーンのワールドトランスフォームが決定されると、②のパスコンストレイントの適用よりも先に①でターゲットパスa-sippo-nemoto
が動いてしまうのでズレが発生するのではないかと思われます。
解決策として、公式サンプルプロジェクトのVine
のセットアップのように、パスに制約されるボーンとパスの形状をコントロールするためのボーンを別々にするのが良いかと思います。Vineのセットアップでは、蔓のメッシュが紫色の13個の細かいボーンに対してバインドされ、その紫のボーン群がパスに制約され、パスは赤い4つのボーンに対してバインドされており、アニメーションを作成する時にはこの赤い4つのボーンを動かすセットアップになっています。
同様に、現在問題が起きている髪や尻尾も、パスコンストレイントで制約されているボーンは動かさずに、パスをコントロールする用のボーンだけを動かすようにしていただければうまくいくはずだと思います。
また、今回の問題とは直接関係はありませんが、お送りいただいたスケルトンのパスコンストレイントは全てチェーンスケール
を使用していましたが、チェーンスケール
を使用する場合はすべてのボーンが同じ親を持つ必要があり、そうでない場合はパスコンストレイントによって適用されるスケールがおかしくなってしまう可能性があるのでご注意ください。Vineのセットアップはちょうどチェーンスケールを使用する場合の正しいセットアップのサンプルになっていますので参考にしていただけますと幸いです。
この回答について不明な点がありましたらどうぞご遠慮なくおっしゃってください。
何卒よろしくお願いいたします。