아바타
아바타 애드온은 아바타 특정 기능을 지원하기 위한 공통 기반과 사용자가 자신의 아바타를 맞춤화할 수 있도록 아바타 시스템을 만드는 방법을 보여주는 간단한 아바타 시스템을 제공합니다.
아바타
AvatarRepresentation
클래스는 다음과 같은 기능을 제공합니다:
UserInfo
구독에서 아바타 이름 또는 url 변경- 주어진 URL에 대한 적절한 아바타 시스템 선택
- LOD 지원(아래 "LOD 지원" 세부 정보 참조)
IAvatar
인터페이스를 통한 아바타(색, 머리카락, ...)의 공통 기술 정의IAvatarRepresentationListener
를 구현하는NetworkRig
게임 객체의 하위에 아바타 로딩 완료 이벤트 브로드캐스팅(하드웨어HardwareRig
의 자식에 대해서도 하드웨어 리그 참조를 추적하는RigInfo
시스템이 설치되어 있는 경우).
LOD 지원
LODGroup은 AvatarRepresentation
에 형제로 추가할 수 있으며, 이 경우 AvatarRepresentation
은 다음과 같은 기능을 제공합니다:
- 동적으로 생성된 아바타 시스템의 렌더러를 LOD그룹에 추가 및 제거
- 아바타가 로드 중이거나 url이 잘못된 경우 더 높은 수준의 LOD를 표시합니다(
loadingMode
기준, 기본적으로 원격 사용자에 한함) IgnoreDistance
메소드로 LODGroup 활성화 여부 제어
아바타 표현 리스너
이 애드온은 IAvatarRepresentationListener
를 구현하고 아바타 로딩에 반응하는 일부 컴포넌트를 제공합니다.
로컬 아바타 컬링
로컬 아바타 컬링 시스템은 로컬 사용자를 위해 아바타를 숨기는 것을 목표로 합니다. 그렇게 하기 위해, 하드웨어 리그에 저장된 카메라는 컬링 마스크를 변경하여, 계층을 숨기도록 하고, 로컬 사용자와 연관될 때 아바타 게임 객체에 적용될 것입니다.
로컬 아바타 컬링은 HardwareRig
게임 객체에 LocalAvatarCulling
을 추가하여 수행됩니다.
이 시스템이 작동하려면 RigInfo
시스템이 필요하므로 HardwareRig
의 LocalAvatarCulling
이외에 필요한 것은 다음과 같습니다:
- networkRunner 게임 객체의
RigInfo
NetworkRig
게임 객체의RigInfoRegister
와HardwareRig
게임 객체의RigInfoRegister
손 표현 관리자
NetworkHandRepresentationManager
그리고 HardwareHandRepresentationManager
는 온라인과 오프라인에서 손의 표현을 관리할 수 있는 옵션 컴포넌트입니다.
주로 받은 아바타 피부색을 바탕으로 손을 색칠할 수 있는 것이 목적입니다.
또한 연결 상태, 로드된 아바타 시스템에서 손의 가용성 등을 기반으로 오프라인 및 온라인 손의 외관 로직을 결정하는 다양한 옵션을 제공합니다.
하드웨어 핸드에는 온라인 데이터를 기반으로 오프라인 핸드(일반적으로 시계)의 일부가 이동하도록 하는 장식 시스템도 있습니다.
이는 네트워크 핸드를 차단하는 표면과 같은 특수한 경우에 유용합니다. 하드웨어 핸드 장식이 있는 경우 네트워크 핸드 보간 대상을 따르도록 합니다(네트워크 핸드 보간 대상을 수동으로 변경할 때 유용합니다. 핸드 차단 등)
낮은 폴리 간단한 아바타
LowPolySimpleAvatar
는 플레이어가 선택한 아바타에 따라 낮은 폴리 아바타(LODGroup 용)를 구성하는 역할을 합니다(단순 아바타 모델일 수도 있고 Ready Player Me 모델일 수도 있습니다).
이를 위해서는 AvatarRepresentation
의 OnRepresentationAvailable
콜백을 사용합니다.
그런 다음 선택된 아바타에 따라 로우 폴리 아바타의 신체, 머리카락, 옷 색상에 대한 재료를 구성합니다.
또한, 아바타 모델이 단순 아바타인 경우, 헤어 메시는 단순 아바타 모델에 해당하는 헤어 LOD 메시로 구성됩니다.
간단한 아바타
이 추가 기능에는 사용자가 아바타를 구성하는 다양한 매개변수를 선택할 수 있도록 아바타 시스템을 만드는 방법을 보여주는 간단한 아바타 시스템이 포함되어 있습니다: 피부색, 옷 메시, 머리카락 재료 등...
SimpleAvatar
에는 다음과 같은 메소드가 포함되어 있습니다:
- 새로운 "간단한 아바타" URL 덕분에 아바타를 바꿉니다
- 무작위 "간단한 아바타" 모델을 생성합니다
- 특정 아바타 파라미터(머리, 옷, 스킨) 구성
- 아바타의 눈과 입을 애니메이션
또, 새로운 간단한 아바타가 탑재되면, RepresentationAvailable
메소드로 AvatarRepresentation
에 알려줍니다.
데모 씬은 Assets\Photon\FusionAddons\Avatar\Demo\Scenes\
폴더에서 확인할 수 있습니다.
따라서 간단한 아바타를 테스트하려면 AvatarLODSimpleAvatar
씬을 엽니다.
사용자가 생성되면 SimpleAvatarNetworkRig(Clone)
게임 객체를 선택하고 UserInfo
AvatarURL
파라미터를 변경합니다.
예를 들어, simpleavatar://?hairMesh=1&skinMat=2&clothMat=0&hairMat=0&clothMesh=1
이라는 URL을 사용할 수 있습니다
눈동자 움직임 시뮬레이션
정적인 시선을 보여주는 아바타를 피하기 위해 눈동자 운동 시뮬레이션 시스템을 사용할 수 있습니다. 이 시스템은 물체(아바타 눈)를 움직여 GazeTarget
을 가진 다른 물체를 추적할 수 있습니다.
그렇게 하려면:
- 장면에는
GazeInfo
컴포넌트가 포함되어 있어야 합니다(배경 스레드가 일정한 간격으로 실행되어 목표로 할 새 대상을 결정합니다) - 아바타 객체는
Gazer
컴포넌트를 보유해야 하며, 눈동자 게임 객체를gazingTransforms
에 제공해야 합니다(gazingTransformOffsets
을 통해 일부 회전 오프셋을 제공하는 것도 가능합니다) - 또는 성능을 향상시키기 위해
eyeRendererVisibility
필드의Gazer
컴포넌트에RendererVisible
를 제공할 수 있습니다.RendererVisble
에서 아바타 렌더러가 보이지 않는 것을 감지하면 이 아바타에 대해 눈동자 시뮬레이션이 실행되지 않습니다
Oculus 립 동기화
일부 아바타 시스템은 고급 립 동기화가 필요할 것입니다. 이를 위해 아바타 애드온은 Oculus 오디오 SDK 라이선스(https://developer.oculus.com/licenses/audio-3.3/) / 메타 플랫폼 기술 SDK 라이선스 계약 (https://developer.oculus.com/licenses/oculussdk/) , 그리고 Oculus Integration하에 출시된 오큘러스 립싱크 라이브러리 버전을 포함합니다
의존성
- Text Mesh Pro (사용자 이름판을 표시하는 데만 사용됨)
- Photon Voice SDK
다운로드
이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.
지원되는 토폴로지
- 공유 모드
변경 이력
- 버전 2.0.3: 정확한 타입의 랜덤 아바타 추가
- 버전 2.0.2: 무작위 아바타 로딩 지원
- 버전 2.0.1: 손 메시 애니메이션 제거 (하드웨어로 핸드로 이동)
- 버전 2.0.0: Fusion 2.0 지원
- 버전 1.0.2: UserName & AvatarURL에 NetworkString 사용
- 버전 1.0.1: LookAtCamera에 대한 네임스페이스 수정
- 버전 1.0.0: 최초 릴리즈