영상을 불러오지 못했습니다

Root Motion 중 이동 리플리케이션이 멈춘 것처럼 보일 때

699 단어
3 분
Root Motion 중 이동 리플리케이션이 멈춘 것처럼 보일 때

Root Motion Montage 재생 중 다른 client에서 character 위치가 갱신되지 않거나 montage가 끝난 뒤 갑자기 보정되는 현상이 있었다.

문제 현상#

server와 owning client에서는 이동이 자연스러웠다. 하지만 simulated proxy에서는 일반 actor transform replication이 멈춘 듯 보였다. ACharacter::OnRep_ReplicatedMovement를 따라가면 networked root motion montage가 활성화된 동안 일반 보정과 다른 경로를 사용한다는 사실이 확인된다.

적용 범위#

ACharacter, CharacterMovementComponent, animation montage의 Root Motion을 network play에서 쓰는 프로젝트에 해당한다. custom movement나 Gameplay Ability System이 별도 prediction을 제공한다면 해당 계층도 함께 살펴본다.

원인#

Unreal의 networked Root Motion Montage는 server transform만 단순히 복제하지 않는다. montage 위치, root motion source와 server correction을 결합해 proxy를 갱신한다. montage trigger나 position이 올바르게 전달되지 않으면 proxy는 root motion 전용 경로에 들어가도 적용할 animation 상태가 부족하다. 이때 보정이 멈춘 것처럼 보인다.

재현 및 진단#

  1. server, autonomous proxy, simulated proxy에서 LocalRole, montage 이름과 position을 기록한다.
  2. IsPlayingNetworkedRootMotionMontage, RepRootMotion과 movement mode를 서로 비교한다.
  3. montage 시작 RPC가 server 권한을 거쳐 관련 client에 전달되는지 확인한다.
  4. AnimInstance의 Root Motion Mode가 역할별로 예상한 값인지도 살핀다.
  5. packet loss와 latency 조건에서 montage 시작·중단·blend out을 반복한다.

해결 방법#

일반적인 구성에서는 server가 montage 시작을 권한 있게 결정한 뒤 필요한 client에 동일한 montage 상태를 전달한다. animation blueprint는 network play에 권장되는 Root Motion from Montages Only를 사용하며 character movement의 기본 root motion replication 경로를 유지한다.

과거 사례에서는 simulated proxy의 Root Motion Mode를 Ignore Root Motion으로 바꾸자 server transform replication이 다시 보였다. 이 수정은 모든 프로젝트에 적용할 수 없다. server transform만을 단일 진실로 삼고 animation root delta를 절대 적용하지 않도록 설계한 경우에만 역할별 설정을 검토한다.

검증 방법#

  • listen server와 dedicated server에서 각각 두 client 이상으로 시험한다.
  • montage 시작·중단·연속 재생과 late join을 확인한다.
  • 높은 latency와 packet loss에서는 위치 오차, montage position과 correction 횟수를 측정한다.
  • root motion이 없는 montage와 같은 이동을 비교한다.

주의점#

simulated proxy에서 root motion을 무조건 끄면 발 미끄러짐, montage 위치 불일치와 collision 결과 차이가 생기기도 한다. OnRep_ReplicatedMovement의 한 branch만 우회하기 전에 montage replication과 권한 구조부터 고친다.

참고 자료#

글 공유하기

이 글이 도움이 되셨다면 다른 사람과 공유해 주세요!

Root Motion 중 이동 리플리케이션이 멈춘 것처럼 보일 때
https://hon454.github.io/posts/root-motion-replication-simulated-proxy/
작성자
Jihoon Jeon
게시일
2023-08-23
라이선스
CC BY-NC-SA 4.0

댓글

Profile Image of the Author
Jihoon Jeon
안녕하세요! 서브컬처와 자전거를 사랑하는 개발자 전지훈입니다.
공지사항
제 블로그에 오신 것을 환영합니다! 예시 공지입니다.
카테고리
태그
최신 일상
사이트 통계
게시글
46
카테고리
10
태그
139
총 단어 수
103,271
운영 일수
0
최근 활동
0일 전
사이트 정보
빌드 플랫폼
GitHub Actions
블로그 버전
Firefly v6.16.3
라이선스
CC BY-NC-SA 4.0