x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

[Closed] 特定条件のモーション素材でカーブをいじるとプレビュー画面からキャラクタが消える

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

特定のモーション素材でカーブをいじるとデータを保存するまでRootのスケルトンのスケールが0になってキャラクタが消えてしまいプレビューしながら値が編集できないそうです。

発生の条件は、

・EnableRootMotionがON

・Adidive Anim TypeがMesh SpaceもしくはLocal Space

・カーブを追加し、編集する

再現できるサンプルと再現手順の動画を添付いたしますので調査のほどよろしくお願いします。link text

Product Version: Not Selected
Tags:
more ▼

asked Jul 11 '18 at 03:51 PM in Japanese

avatar image

Answers.Archive STAFF
1.6k 160 273 616

avatar image Answers.Archive STAFF Jul 11 '18 at 03:51 PM

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

再現プロジェクトを共有いただき、ありがとうございます。

こちらでも検証を進めてまいります。

引き続きよろしくおねがいします。

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

The question has been closed Jul 11 '18 at 04:02 PM by Nori Shinoyama for the following reason:

The question is answered, right answer was accepted


2 answers: sort voted first

ご報告ありがとうございます。 こちらでも再現し、データベースとして登録いたしました。

alt text

UE-61522 - If "Additive Anim Type" isn't "No Additive", constant values of curves can be broken

この問題は、AnimSequence.cpp内部のUAnimSequence::BakeOutAdditiveIntoRawData()にてAddtive用にCurveデータを再生する際に一定の値だった場合はキーを打たないようにしているためです。(IsNewKeyDifferent部分です。)

 if (!bHasKeys || IsNewKeyDifferent(RawCurve->FloatCurve.GetLastKey(), CurveEL.Value))
 {
     RawCurve->UpdateOrAddKey(CurveEL.Value, CurrentFrameTime);
 }


こちら修正されるまで、暫定的な対応としましては、上記if()をコメントアウトし、必ずその部分を通るようにしていただければと思います。

ご不便をおかけいたしますが、よろしくお願いいたします。

more ▼

answered Jul 11 '18 at 03:51 PM

avatar image

Answers.Archive STAFF
1.6k 160 273 616

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

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

こちら、手元でも再現いたしました。

コードを確認するとScaleを - FVector(1.f)行っている箇所があり、そこでscaleがマイナスされているのが原因でした。

以下のコードを編集することで現象を回避できると思いますので、ご検討いただけますでしょうか。

AnimSequence.hのResetRootBoneForRootMotionの宣言に引数を追加します。

 void ResetRootBoneForRootMotion(FTransform& BoneTransform, const FBoneContainer & RequiredBones, ERootMotionRootLock::Type InRootMotionRootLock, bool isScale) const;

AnimSequence.cppのResetRootBoneForRootMotionの定義を以下のように変更します。

 void UAnimSequence::ResetRootBoneForRootMotion(FTransform& BoneTransform, const FBoneContainer& RequiredBones, ERootMotionRootLock::Type InRootMotionRootLock, bool isScale) const
 {
     switch (InRootMotionRootLock)
     {
         case ERootMotionRootLock::AnimFirstFrame: BoneTransform = ExtractRootTrackTransform(0.f, &RequiredBones); break;
         case ERootMotionRootLock::Zero: BoneTransform = FTransform::Identity; break;
         default:
         case ERootMotionRootLock::RefPose: BoneTransform = RequiredBones.GetRefPoseArray()[0]; break;
     }
 
     if (isScale && IsValidAdditive() && InRootMotionRootLock != ERootMotionRootLock::AnimFirstFrame)
     {
         //Need to remove default scale here for additives
         BoneTransform.SetScale3D(BoneTransform.GetScale3D() - FVector(1.f));
     }
 }

同ファイルの呼び出しで引数を追加します。

 #if WITH_EDITOR
     // this happens only with editor data
     // Slower path for disable retargeting, that's only used in editor and for debugging.
     if (bUseRawDataForPoseExtraction)
     {
         const bool bShouldUseSourceData = (RequiredBones.ShouldUseSourceData() && SourceRawAnimationData.Num() > 0);
         const TArray& AnimationData = bShouldUseSourceData ? SourceRawAnimationData : RawAnimationData;
 
         BuildPoseFromRawData(AnimationData, OutPose, ExtractionContext.CurrentTime);
 
         if ((ExtractionContext.bExtractRootMotion && bEnableRootMotion) || bForceRootLock)
         {
             ResetRootBoneForRootMotion(OutPose[FCompactPoseBoneIndex(0)], RequiredBones, RootMotionRootLock, false);
         }
         return;
     }
 #endif // WITH_EDITOR
 
 
 // Once pose has been extracted, snap root bone back to first frame if we are extracting root motion.
     if ((ExtractionContext.bExtractRootMotion && bEnableRootMotion) || bForceRootLock)
     {
         ResetRootBoneForRootMotion(OutPose[FCompactPoseBoneIndex(0)], RequiredBones, RootMotionRootLock, true);
     }
 

以上となります。

また、挙動としてはバグに見受けられますので、別途バグ登録させていただこうと思います。

お手数をおかけしますが、よろしくお願いします。

more ▼

answered Jul 11 '18 at 03:51 PM

avatar image

Answers.Archive STAFF
1.6k 160 273 616

avatar image Answers.Archive STAFF Jul 11 '18 at 03:51 PM

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

エンジンをいじって対応してみます。

対応ありがとうございました。

avatar image Answers.Archive STAFF Jul 11 '18 at 03:51 PM

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

Save以降の処理まで確認ができておらず大変失礼いたしました。

現在こちらでSave後の挙動について調査を行っております。

引き続きよろしくおねがいします。

avatar image Answers.Archive STAFF Jul 11 '18 at 03:51 PM +

こちら急ぎ対応しております。お時間頂き恐縮ですが、今しばらくお待ちください。

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question