mojimoji

初めまして。
ボーンにIKを設定する際、
そのボーンの親がrootの場合は問題ないのですが、
別のボーンの子になっている場合、IKが機能しないことがあります。
絶対機能しないわけでもなく、動く場合もあるので何が原因かわかりません。
IKを設定する際、何か明確なルールがあるのでしょうか?

よろしくお願いいたします。
mojimoji
記事: 4

Nate

ようこそ、mojimojiさん!

あなたの「親」ボーン、「子」ボーンおよび「ターゲット」ボーンのIK 2ボーンについて。IKは親と子のボーンを回転するため、子ボーンの先端はターゲットボーンの位置にあります。IKコンストレイントを作成する時、親と子ボーンを動かしたくない場合、ターゲットボーンは正確に子ボーンの先端に存在しなければなりません。これを行うには:

1) ターゲットボーンを子ボーンの「子」ボーンとして作成します。
2) axes(軸)を???に変更し、ターゲットボーンのポジションを X,0と入力し、設定します。Xは子ボーンの長さです。
3) ターゲットボーンの親を変更し、IKコンストレイントを作成します。
アバター
Nate

Nate
記事: 7648

mojimoji

こんにちは。

返信いただき、ありがとうございます。

教えていただいた方法を試してみたのですが、うまくいきませんでした。
しかし、IKが機能しない条件は分かりました。

【A】root > parentBorn > childrenBorn でchildBornにIKを設定した場合
・IKは動作する

【B】root > aBorn > parentBorn > childrenBorn でchildBornにIKを設定した場合
・このままではIKは動作しない。
・parentBornの親をrootか、aBorn以外のbornにすればIKは動作する。

こうして見ると、こういう仕様なだけだと思えるのですが、合っていますでしょうか?
また、【B】の条件でもIKが動作してくれるとありがたいのですが、そうなる予定はありますか?

度々申し訳ありませんが、よろしくお願いいたします。

---

追記

【B】の条件の際、aBornをparentBornの親にするのではなく、
transformConstraintのターゲットをeBornにすることで解決できました。

お騒がせいたしました。

---

さらに追記

解決してませんでした。
ターゲットをさらにIK等で動かした場合、transformConstraintは機能しないんですね。
やはり、【B】のようなparentBornの上の階層に複数のbornが存在しても
IKが機能してくれるとありがたいです。

よろしくお願いいたします。
mojimoji
記事: 4

Nate

(using English so I can reply faster, sorry!)

I recorded how to add an IK target without the bones moving (described in my post above):

You can see parentBone and childBone do not move when IK is added.

I don't understand your example【B】. You explained you have bones root > aBone > parentBone > childBone, but which bones do you want controlled by IK?

Spine supports IK using 1 or 2 bones, for example childBone or parentBone, childBone:


If you want 3 bone IK, for example aBone, parentBone, childBone, unfortunately Spine cannot do that. With 1 or 2 bones, IK can be solved directly with math. With 3 or more bones, IK is more complicated and does not have a direct math solution, it is done incrementally. This means the solution depends on the rotation of the bones in previous frames. To jump to the middle of an animation, we would have to start at the beginning of the animation and compute the IK solution for each frame until we get to the middle. Doing that is expensive.

Consider if aBone, parentBone, childBone used 3 bone IK, this would be one solution:


This would also be a solution (target has not moved):


There are an infinite number of solutions for 3+ bone IK. This is why the IK solution must depend on previous frames. We may do that in the future, but so far we prefer to keep it easy to apply an animation at any frame, without worrying about the pose in previous frames.
アバター
Nate

Nate
記事: 7648

mojimoji

Thank you for your reply.
Let me apologize for my poor English.

Videos are easier to understand!
The problem I have is below Video.

ikconst_01.gif


If it is difficult, I’ll give up on that IKcontroll.
thank you.
mojimoji
記事: 4

Erikari

制約を並べ替えることができます。 これは最初に適用されるものを変更します。
(Eng: You can reorder the constraints. this will change which one is applied first.)
順序を変更するには、リスト内の制約を下にドラッグするだけです (To change the order, just drag the constraint in the list down)

段落はユーザーガイドで見つけることができます: (you can find a paragraph in the user guide:)
Constraints: Order
アバター
Erikari

Erikari
記事: 764

mojimoji

ユーザーガイドに出ているとは知らず、失礼いたしました…。
でも、出来ました!
ありがとうございます!!
mojimoji
記事: 4

Erikari

大丈夫です、心配しないで(: (私はどちらも知らなかった :D )
it's ok, don't worry (: (I didn't know either :D )
アバター
Erikari

Erikari
記事: 764


Return to 日本のSpine ユーザー