お世話になっております。
図のようなコピーポーズを用いたアニムグラフを作成して、
基本となるモデルの骨が持つアニメーションを、他の同名の骨を持つモデルでのアニメーションに使用しています。
このとき、基本の骨と比率の異なる基本骨を持ったメッシュにコピーを行うと、
基本の骨と同じ比率でアニメーションしてしまい、体の大きいキャラクターなどは破綻してしまいます。
この場合のスケルトンのリターゲットの設定など、解決方法がありましたらご教示お願いいたします。
以上、よろしくお願いします。
お世話になっております。
図のようなコピーポーズを用いたアニムグラフを作成して、
基本となるモデルの骨が持つアニメーションを、他の同名の骨を持つモデルでのアニメーションに使用しています。
このとき、基本の骨と比率の異なる基本骨を持ったメッシュにコピーを行うと、
基本の骨と同じ比率でアニメーションしてしまい、体の大きいキャラクターなどは破綻してしまいます。
この場合のスケルトンのリターゲットの設定など、解決方法がありましたらご教示お願いいたします。
以上、よろしくお願いします。
お世話になっております。
残念ながら、CopyPoseFromMeshは単純にコピー元における各BoneのTransformをコピー先の同名Boneに渡すという非常にシンプルな作りになっています。そのため、例えばSkeletonにおけるRetargeting Optionsの設定を使用していません。
そのため、本件を解決するためには「各ボーンの回転成分のみをコピーする処理」を追加する必要があります。Copy Pose From Meshを改造する場合は FAnimNode_CopyPoseFromMesh::Evaluate_AnyThread
における以下の処理にフラグに応じてTransformをそのままコピーするか回転成分のみをコピーするかの処理分けを追加することになるかと思います。
// only apply if I also have parent, otherwise, it should apply the space bases
if (ParentIndex != INDEX_NONE && MyParentIndex != INDEX_NONE)
{
const FTransform& ParentTransform = SourceMeshTransformArray[ParentIndex];
const FTransform& ChildTransform = SourceMeshTransformArray[SourceBoneIndex];
OutPose[PoseBoneIndex] = ChildTransform.GetRelativeTransform(ParentTransform);
}
else
{
OutPose[PoseBoneIndex] = SourceMeshTransformArray[SourceBoneIndex];
}
よろしくお願いいたします。
回答ありがとうございます。
追加で質問になるのですが、
このクラスを継承した独自クラスを作成してブループリントに公開することで、エンジン改造をしないままにCopyPoseの内容を変更した代わりの機能の作成は可能でしょうか?
よろしくお願いします。
お世話になっております。
手元の環境で試した所、AnimNode_CopyPoseFromMesh
をただ継承しただけのAnimGraphをゲームモジュール側で作成することができました。そのため、頂いた質問内容は実現可能です。ただし単純なテストしかしていないため、もし何か不具合など発生した場合は改めてご質問いただけますと幸いです。
よろしくお願いいたします。