Ready Player Me Avatar Integration
基本原理
このアドオンは、Ready Player Me半身アバターのインテグレーションを提供します。
全身アバターの対応はまだ追加されていませんが、必要に応じて簡単に対応させることができるようなコードにはなっています。
機能
Avatarアドオンとの互換性
このアドオンは、Avatarアドオンと互換性があります。
AvatarRepresentation
コンポーネントがRPMAvatarLoader
の親ヒエラルキーに存在するなら、以下のような点から互換性が保たれます。
- アバターがロードされたことを通知する
- 読み込まれたReadyPlayerMeアバターを
LODGroup
に追加する
RPMAvatarLoader
は単独で使用することも可能で、UIやアバター選択画面などで便利です。
Avatarの編集
このアドオンは、読み込まれたReadyPlayerMeアバターにいくつかの修正を適用できます。適用できる修正はすべてオプションで、RPMAvatarLoader
クラスのavatarOptionalFeatures
マスクから選択できます。
HideRPMHands
:選択されると、ReadyPlayerMeの手が非表示になります。VRSharedサンプルで使用される手など、他の手の表現が提供されているかどうか関連します。OptimizeAvatarRenderers
:ReadyPlayerMeアバターが、URP環境で綺麗に表示され、パフォーマンスコスト(影なしなど)が下がります。DetectColorForAvatarDescription
:RPMAvatarInfo.AvatarDescription
に色を含むことを保証するため、アバターのテクスチャを分析します。肌に合わせて手の色を変えたり、アバターの単純化されたLOD表現のカスタマイズで髪や服の色を使用したりする場合に便利です。EyeMovementSimulation
:ReadyPlayerMeアバターの目を、目のシミュレーションシステムに接続します。目は、アバター近くのGazeTarget
コンポーネントを持つオブジェクトを追跡します。LipSynchronisation
:顔メッシュのブレンドシェイプを、Oculusリップシンクに接続します。MacOSとWebGLは利用不可能で、シンプルな声量検知システムに置換されることに注意してください。LipSyncWeightPonderation
:ReadyPlayerMeアバターメッシュでは、Oculusリップシンクのブレンドシェイプの比率が非常に高い値になります。そのため、OVRLipSyncContextMorphTarget
コード(こちらを参照)を変更するか、このオプションを使用してLateUpdate
で値を修正する必要があります。EyeBlinking
:ReadyPlayerMeアバターで提供されている目のまばたきスクリプトを適用して、自然にまばたきさせます。OnLoadedSoundEffect
:アバターのダウンロードが完了した時に、SoundManager
を使用して音を再生します。DownloadThrottling
:PerformanceManager
を使用して、複数のReadyPlayerMeアバターを同時にダウンロードする(帯域が飽和して、正しいネットワーク通信を阻害する)ことを防ぎます。
デフォルトでは、すべてのオプションが選択(AllOptions
値)されていますが、例えば、アバターをシンプルな選択画面UIで表示する場合は、HideRPMHands
とOptimizeAvatarRenderers
オプションのみを選択するのが適切です。
キャッシュシステム
シーン内で同じアバターが何度も使用されていたら、アドオンのキャッシュシステムによって、同じアバターの再ダウンロードは行われません。
同じアバターが2回目にダウンロードされた時に、1回目のアバターが利用可能なら、そのコピーがインスタンス化されます。
1回目のアバターがダウンロード中なら、2回目のアバターは少し待機(最大でmaxSameDownloadWaitTime
、デフォルトでは10秒)します。
ReadyPlayerMeは、同じURLが2度使用された時に、アバターのゲームオブジェクトを削除することがあることに注意してください。このアドオンのキャッシュシステムはこれを防ぎますが、もし同時に2つのダウンロードが発生し、1つ目のダウンロード完了までにmaxSameDownloadWaitTime
以上の時間がかかり、2つ目のダウンロードを開始した場合、1つ目のアバターが削除されます。このシナリオは、非常に特殊なケース(混雑したシーンで、多くの重複がある)でしか発生しませんが、問題を確実に回避したいなら、常にアバターのコピーを作成し、このコピー作成コストを犠牲にすることで、ReadyPlayerMeからの削除を防ぐことができます。
これを行うには、単純にRPMAvatarLoader
コンポーネントのcopyRPMLoaderAvatar
を有効(デフォルトでは無効)にしてください。
RPMAvatarLibrary
シーンにダウンロード済みアバタープレハブのライブラリを追加することが可能です。このライブラリコンポーネントRPMAvatarLibrary
は、アバターのマッピングを含み、RPMAvatarLoader
で読み込まれたプレハブに疑似URLを使用します。
最新のReadyPlayerMeアバターの肌色に便利なメタデータフィールドを手動で設定することもできますが、ライブラリは自動的にメタデータを検出しようとするため、メタデータの記述は必須ではありません。
RPMAvatarLibrary
は単純に、参照されたプレハブがあたかもダウンロードされたかのようにして、アバターのキャッシュを設定します。
インストール
このアドオンを動作させるには、ReadyPlayerMe UPM packageが必要です。
ReadyPlayerMe documentationに従って、以下のGitパッケージをインストールしてください。
https://github.com/readyplayerme/rpm-unity-sdk-core.git
アドオンは、Ready Player Me core package (com.readyplayerme.core) version 3.3でテストされています。
依存関係
- Avatar addon
- Feedbabck addon
- Ready Player Me 3.3
- Oculus.Lipsync (version included in the Avatar add-on)
デモ
デモシーンはAssets\Photon\FusionAddons\RPMAvatar\Demo\Scenes\
フォルダーにあります。
RPMAvatarLoading
シーンは、複数のReadyPlayerMeアバターをロードします。
- ReadyPlayerMeオンラインエディターで提供されたURLで指定されたアバター、
UserInfo
コンポーネントでアバターのURLの読み込みと同期を行うユーザー - キャッシュシステムを説明するための同じアバター
- オフラインアバター、Fusionのネットワークオブジェクトに関連しないもの(UIなどで使用されるもの)
- カスタムアバターURLと
RPMAvatarLibrary
によって読み込まれるアバターのプレハブ
RPMAvatar
シーンはRPMNetworkRig
プレハブを使用して、多くの必要な機能を組み込んでいます。
- シンプルなアバターのURLとRPMのURLに互換性があります
- ローポリのフォールバックを提供し、アバターの肌・服・髪の色に基づいた色が付きます
- 手のモデルを含み、アバターの肌の色になります
- LODでビルボードを提供します
EyeMovementSimulation
機能を説明します。アバターの目は、GazeTarget
コンポーネントを持つTarget
ゲームオブジェクトを追跡します。アバターの頭と目にはGazeTarget
があるため、プレイヤーは互いに見つめ合うことができます。
ダウンロード
このアドオンの最新バージョンは、Industries アドオンのプロジェクトに含まれています。
対応するトポロジー
- 共有モード
更新履歴
- Version 2.0.2: Display simple lipsync option only on required platforms + add random avatar feature
- Version 2.0.1: Support loading random avatar + fix default avatar height
- Version 2.0.0: Fusion 2.0 support
- Version 1.0.1: Fix avatar V3 hair and clothes color detection
- Version 1.0.0: First release