Ccdikとfabrikとの使い分けにつきまして

お世話になっております。

現在4.21で追加されたCCDIKと従来からあるFABRIKについて検討しようとしているところなのですが、
どのように使い分けるのがよろしいのでしょうか?

また、4.22の環境について調べていませんので、すでに対応されていたら恐縮なのですが、

CCDIKにつきましては、骨の角度制限がリファレンスポーズからのRoll,Pitch,Yawの角度制限になっているとありがたいのですが、そちらについて、ご対応の予定はありますか?

また、FABRIKにも角度制限などがあると嬉しいのですが、こちらはご対応の予定はありますか?

お世話になっております。

公式として明確に推奨する使い分けの案内はないのですが、CCDIKは「肩から指先など、比較的短い IK チェーンのリアルタイム計算に適した軽量の IK アルゴリズム」であり、「FABRIKとは異なり、CCDIKは角度拘束を定義する機能を提供します」と紹介されています。CCDIKとFABRIKは内部の計算方法が異なる上にエディタでの設定や制御するボーン数などの条件によって挙動・負荷が変わるため、使い分けに関して明確な基準をお伝えするのは難しいというのが正直な所です。

一般的にはCCDIKよりもFABRIKの方が解に収束するための反復回数が少ないため、パフォーマンス面で有利に立つ可能性はあります。しかし、回転の制約が追加された場合は1回の反復処理が遅くなるため、速度差が逆転する可能性もあると言われています。

また、以下の動画が参考になるかもしれません。CCDIKは角度制限を元に計算を行う関係で、長いIKチェーンの場合はあまり良くない解に落ち着く可能性があります。


個人的な考えにはなりますが、IKチェーンが短い場合はCCDIK、長い場合はFABRIKを使用し、もしよりパフォーマンス・精度を高めたい場合はそれぞれに対して独自の制約を追加するという方針がよいのかもしれません。

CCDIKにつきましては、骨の角度制限がリファレンスポーズからのRoll,Pitch,Yawの角度制限になっているとありがたいのですが、そちらについて、ご対応の予定はありますか?
確認した限りでは対応予定はなかったため、以下の番号で機能リクエストを行いました。
UE-72768 Request: Angle limit function of each axis to CCDIK

ただ具体的な対応時期に関してはお約束できません。そのため、もしお急ぎの場合は FAnimNode_CCDIK::UpdateChainLink における実装をご確認いただき、独自の制限を追加することになるかと思います。

FABRIKにも角度制限などがあると嬉しいのですが、こちらはご対応の予定はありますか?

大変申し訳無いのですが、現状は対応予定はなくプロジェクト毎に適した制限を独自に追加していただく形になっています。その際はLeg IKにおけるFABRIKに対しての角度制限の実装が参考になるはずです。

ご参考になれば幸いです。
よろしくお願いいたします。

ご返答ありがとうございます。

ご意見を参考にしつつ検討を進めたいと思います。