유니티 메타 아바타2에 로코모션 행동 추가하기 #Adding Locomotion to an Avatar

Meta Avatar SDK 31버전부터는 Avatars 2.0의 도입으로 인해, 3인칭 뷰에서 아바타가 다리를 가지게 되었습니다.

 

아바타 다리가 생김에 따라 아바타에 적절한 애니메이션이 필요하게 되었는데요. 예를 들어, 점프, 걷기, 뛰기 등.

아바타를 더 생동감 있게 만들기 위해, OvrAvatarAnimationBehavior라는 새로운 컴포넌트를 사용하여 아바타에 전신 로코모션을 추가할 수 있게 되었습니다.

OvrAvatarAnimationBehavior컴포넌트는 아바타가 환경에 맞게 움직일 수 있도록 하는 애니메이션 컨트롤러를 구현하며, 헤드셋의 움직임을 기반으로 애니메이션을 작동시킬 수 있습니다. 또한, 커스텀 전신 애니메이션을 사용할 수도 있습니다.


전신 로코모션으로 아바타 애니메이션 활성화

OvrAvatarAnimationBehavior

  1. Avatar Entity GameObjectOvrAvatarAnimationBehavior 컴포넌트를 추가합니다.
  2. OvrAvatarAnimationBehavior는 사용자의 헤드셋 움직임을 캡처하고 해당 데이터를 사용해 애니메이션 컨트롤러를 작동시킵니다.
  3. OvrAvatarAnimationBehavior는 Unity의 Mecanim Animation System을 활용하며, 사용자의 헤드셋 움직임에 따라 아바타가 걷고, 회전하고, 앉는 동작을 작동시킵니다.
  4. 기본 설정상태의 컴포넌트는 애니메이션 컨트롤러를 자동으로 활성화합니다.

Legs Network Loopback Sample Scene은 아바타에 로코모션을 추가하는 방법을 보여주므로 참고하시길 바랍니다.


애니메이션 컨트롤러 기능

걷기

  • 헤드셋의 움직임을 추적하여, 움직임의 속도와 방향에 맞는 걷기 애니메이션을 실행합니다.
  • 3가지 속도(짧은 걸음, 일반 걷기, 조깅)와 8가지 방향(앞, 뒤, 좌우 측면 및 대각선 방향)으로 총 24개의 애니메이션 클립을 조합하여 로코모션 애니메이션을 구성합니다.

앉기

  • 헤드셋의 추적된 높이가 특정 임계값 이하로 내려가면, 아바타는 앉는 동작을 수행합니다.

기울기

  • 헤드셋의 roll(좌우 기울기)pitch(앞뒤 기울기) 값을 기반으로 아바타가 좌우 또는 앞뒤로 기울어집니다.

앉는 자세

MecanimLegsAnimationController

  • 앉는 애니메이션은 헤드셋 추적에 의해 활성화되지 않으며, 런타임 중 수동으로 Toggle을 컨트롤해야 합니다.
  • MecanimLegsAnimationController 컴포넌트에서 IsSitting 속성을 true로 설정하면 앉는 자세로 전환됩니다.
  • false로 설정하면 앉는 동작이 비활성화됩니다.
  • Legs Network Loopback 예제 장면에서는 오른쪽 Touch 컨트롤러의 B 버튼을 눌러 이 기능을 테스트할 수 있습니다.

Remote Avatar 크기 조정

  • 현재 Remote Avatar의 모든 가상 높이는 동일합니다(약 1.78m).
  • 사용자의 키가 아바타의 가상 높이와 크게 다를 경우 문제가 발생할 수 있습니다. (예를 들어 사용자 키가 2m가 넘는다면..)
  • 이를 해결하기 위해, 사용자의 아바타를 동적으로 크기 조정할 수 있는 기능이 존재합니다.

EnableRemoteScaling 활성화

OvrAvatarAnimationBehavior

  • EnableRemoteScaling을 활성화하면, RemoteScaleFactor 값을 변경하여 원격 아바타의 크기를 ±20% 범위에서 조정할 수 있습니다.
  • 런타임 중에도 변경 가능하며, 속성 인스펙터나 스크립트를 통해 조정할 수 있습니다.

사용자 스케일링 계산

  • 사용자가 서 있을 때 헤드셋의 y-좌표를 계산하여 Scale Factor를 계산합니다.
  • 예를 들어, 사용자의 실제 신체 높이가 아바타와 동일하다면 헤드셋의 y-좌표는 Unity에서 약 1.65가 됩니다.
  • 스케일 팩터는 헤드셋 y-좌표를 1.65로 나눈 값으로 계산됩니다.

참고: EnableRemoteScaling이 활성화되면, Avatar SDK가 관련 원격 OvrAvatarEntity의 Transform 스케일을 수정하여, 사용자가 설정한 다른 스케일 값을 덮어쓸 수 있습니다.


MR 부분은 다루지 않겠습니다

제가 MR 프로젝트를 하지 않기 때문입니다.


사용자 정의 애니메이션(custom animations)지원

아바타에 사용자 정의 애니메이션을 추가하기 전에 Meta Avatars의 애니메이션이 Unity에서 어떻게 작동하는지 기본 개념을 이해하는 것이 중요합니다.


애니메이션 개요

Avatar 애니메이션에는 세 가지 구성 방식이 있습니다.

Avatar 애니메이션에는 세 가지 구성 방식 / 우측 사진은 완전 사용자 정의 애니메이션이다 / 기본 내장 애니메이션은 Meta SDK가 제공하는 걷기같은 애니메이션을 지칭함

  1. 기본 내장 애니메이션 - Default, built-in animations
  2. 완전 사용자 정의 애니메이션 - Fully custom animations
  3. 기본 애니메이션과 사용자 정의 애니메이션을 혼합한 하이브리드 방식 - A hybrid mix, using the default animations with some custom animations

OvrAvatarAnimationBehavior컴포넌트가 있으면 자동으로 rig가 생성되는데, 아바타는 이 rig에 의해 애니메이션이 실행됩니다.

각 구성 방식에서, 보이는 아바타(Local Avatar나 Remote Avatar를 말하는 것)의 동작은 애니메이터와 애니메이션 컨트롤러가 연결된 별도의 리그(rig)에 의해 구동됩니다.

OvrAvatarAnimationBehavior / Enable Debug Rig Visual  

  • 이 Rig에는 메쉬가 붙어 있지 않으며, 사용자 정의 애니메이션에 사용되는 인간형 리그의 뼈대 및 관절을 디버깅 시각화할 수 있습니다.
  • OvrAvatarAnimationBehavior 컴포넌트에서 Enable Debug Rig Visual 체크박스를 활성화하면 런타임에 디버그 시각화가 표시됩니다.

Rig 구성

  • 보이는 아바타 자체에는 애니메이터가 없습니다(Local Avatar나 Remote Avatar를 말하는 것). 이는 VR 모션 트래킹애니메이션 Rig 사이의 처리(두 모션을 자연스럽게 연결하는 것을 뜻함)가 필요하기 때문입니다.
  • SDK는 두 가지 Rig 프리팹을 제공합니다.
    • RT Rig Variant
    • Humanoid RT Rig Variant
  • Unity의 인간형 아바타 형식에 맞지 않는 고유한 리그 구조를 사용하며, 애니메이션 리타게팅(re-targeting)을 통해 Unity의 인간형 애니메이션을 아바타에 적용합니다.

애니메이션 전환(Transition) 처리

Unity의 애니메이션 그래프는 하나의 동일 Rig내에서만 전환을 지원하므로, OvrAvatarDefaultStateListener를 사용하여 기본 애니메이션과 사용자 정의 애니메이션 간 전환을 처리합니다.

  • OvrAvatarDefaultStateListener 컴포넌트를 사용자 정의 애니메이션 그래프의 상태에 연결해 전환을 구성할 수 있습니다.

입력 블렌딩 (Input Blending)

  • OvrAvatarAnimationBehaviorInput Blended 옵션은 기본적으로 활성화되어 있어 상체 추적과 하체 애니메이션을 혼합합니다.
  • 사용자 정의 애니메이션만으로 아바타를 구동하려면 이 옵션을 비활성화 하시면 됩니다.

좌우 팔 블렌드 계수 (Left/Right Arm Blend Factor)

  • 좌우 팔 블렌드 계수를 통해 아바타의 상체 포즈를 VR 입력(헤드셋 및 컨트롤러 추적)과 애니메이션 간에 조정할 수 있습니다.
  • 값 범위:
    • 1: VR 입력 100% 반영
    • 0: 애니메이션 100% 반영
    • 중간값: 두 가지 요소의 선형 혼합

 


사용자 정의 애니메이션 블렌드 계수 (Custom animation blend factor)

  • Custom Animation Blend Factor 속성은 기본 애니메이션과 사용자 정의 애니메이션 간 전환을 처리합니다.
  • 값 범위:
    • 0: 기본 애니메이션 100% (Meta Avatars SDK에서 기본적으로 제공하는 애니메이션)
    • 1: 사용자 정의 애니메이션 100%
    • 중간값: 두 요소의 선형 혼합

 


발 고정 (Foot Planting)

  • 사용자 정의 애니메이션에 발 움직임이 포함된 경우, 캐릭터가 움직일 때 발이 미끄러지는 것처럼 보일 수 있습니다.
  • 이를 해결하기 위해 발 고정 시스템이 제공됩니다.
    • LeftFootPlantedRightFootPlanted 곡선을 사용하여 발의 접지 여부를 정의합니다.
    • 값:
      • 1: 완전히 접지
      • 0: 지면에서 떨어짐
      • 값이 변화할 때 코드가 부드럽게 전환을 처리합니다.

 


발자국 이벤트 (Avatar Footfall Events)

  • 아바타가 땅에 발을 디딜 때 이를 감지하려면 OvrAvatarManager.OnAvatarFootFall 이벤트를 사용할 수 있습니다.
  • 어떤 발이 땅에 닿았는지 알 수 있어 발소리 재생 등에 활용 가능합니다.