시퀀스 애니메이션 URO 이슈

[이슈 현상]

런 타임에 시퀀스가 재생되는 경우,

애니메이션 내부에 Notify가 존재하고 해당 애니메이션이 재생되는 액터 URO가 활성화 되어있을 때,

간헐적으로 Notify 출력이 되지 않고 애니메이션이 튀는 이슈가 존재 합니다.

(시퀀스 재생이 아닌 레벨에 액터를 배치한 상태에서는 문제 없음)

[원인]

UAnimSequenceBase::GetAnimNotifiesFromDeltaPositions 함수 파라미터로 전달받는

PreviousPosition 값이 URO로 인해 스킵된 시간 정보가 그대로 적용되는 문제로 확인됩니다.

void UAnimSequenceBase::GetAnimNotifiesFromDeltaPositions(...) { ... // 이 부분에서 간헐적으로 예외처리 되어버림 if( (NotifyStartTime <= CurrentPosition) && (NotifyEndTime > PreviousPosition) ) { } ... }

[보충]

시퀀서가 재생될 때 결정되는 PreviousPosition 은

UE::Anim::FAnimSync::TArray<FAnimTickRecord> UngroupedActivePlayerArrays[index].TimeAccumulator

를 통해 결정되는 것으로 확인됩니다.

AnimNode Tick

FAnimNode_AssetPlayerBase::CreateTickRecordForNode 함수가

FAnimNode_SequenceEvaluatorBase::UpdateAssetPlayer 내부에서 호출되는데,

해당 노드에서 캐싱중인 InternalTimeAccumulator의 주소가

FAnimTickRecord.TimeAccumulator에 적용됩니다.

Sequence Tick

시퀀스로 재생될 경우 일반적인 Tick이 아닌

UMovieSceneSequenceTickManager::TickSequenceActors

를 통해 Tick이 진행되는데,

void E::MovieScene::FEveluateSkeletalAnimations::SetAnimPosition(const FSetAnimPositionParams& Params) const 함수의 내부에서

Params.FromPosition 값이 최종적으로

void FAnimSequencerInstanceProxy::UpdateAnimTrack(…) 함수 파라미터 InFromPosition를 통해 InternalTimeAccumulator 가 갱신 됩니다.

URO로 인해 AnimNode Tick이 진행되지 않는 동안 진행된 Sequence Tick으로 InternalTimeAccumulator 값은 이미 증가 되었고,

이로 인해 UAnimSequenceBase::GetAnimNotifiesFromDeltaPositions 함수에서 유효하지 않은

PreviousPosition 값으로 Notify 출력 여부를 결정합니다.

안녕하세요.

말씀해주신 이슈를 재현하기 위해 URO가 적용된 캐릭터를 레벨시퀀서를 통해 애니메이션을 실행시킨 후, AnimNotify실행이 생략되는지를 테스트해 보았으나 해당 이슈를 재현할 수 없었습니다.

영상을 보았을 때 ControlRig가 관련로직에 영향을 주지않았나 추측이 되지만 해당 현상을 재현할 수 없었기때문에 정확한 원인을 파악하기 힘든 것 같습니다.

해당 재현이 가능한 샘플프로젝트를 첨부해주시면 다시 한번 확인 후 답변드리도록 하겠습니다

감사합니다.

혹시 제공해 드린 샘플 프로젝트에 문제가 있다면 말씀해주시기 바랍니다.

안녕하세요. 답변 감사합니다.

테스트 방법입니다.

  1. 아래 프로젝트에서 게임을 실행
  2. Enter 키를 입력(시퀀스 재생)하면 전방의 캐릭터가 5회 애니메이션을 짧게 출력
  3. 애니메이션 시작 시점에 세팅된 나이아가라 노티파이 출력
  4. 간헐적으로 출력되지 않는 이슈 확인(URO 체크 해제하면 문제 없음)

안녕하세요.

제공해주신 샘플 프로젝트에서 말씀해주신 이슈가 재현되는 것을 확인하였습니다.

해당 현상은 MeshComponent의 AnimationMode가 UseAnimationAsset 일 경우에 발생하는 것으로 보이며, 해당 케이스에 대하여 버그리포트 하였습니다.

추후 관련되어 버그트래커가 생성된다면 공유드리도록 하겠습니다.

감사합니다.