Ready Player Me アバター統合
原理
このアドオンは、Ready Player Meの半身アバターの統合を可能にします。
全身アバターの適用はまだ追加されていませんが、必要であればコードを簡単に適応させて対応することができます。
機能
アバターアドオンの互換性
このアドオンは、アバターアドオンと互換性があります。
RPMAvatarLoader
の親階層にAvatarRepresentation
コンポーネントが存在する限り、この互換性により、以下を実現できます。
- アバターが読み込まれたことをリスナーに通知する
- 読み込まれたReadyPlayerMeアバターをLODグループに追加する
RPMAvatarLoader
は単独で使用することもでき、UIやアバターの選択などに便利です。
アバター編集
さらに、このアドオンは読み込まれたReadyPlayerMeアバターにいくつかの変更を加えます。これらの変更はすべてオプションであり、どの変更を適用するかはRPMAvatarLoader
クラスのavatarOptionalFeatures
マスクで選択できます。
HideRPMHands
: 選択されている場合、ReadyPlayerMeの手が非表示になります。これは、VRSharedベースのサンプルのように、別の手の表現ソリューションが提供されている場合に関連します。OptimizeAvatarRenderers
: ReadyPlayerMeアバターがURPコンテキストで美しく表示され、パフォーマンスコストを抑える(シャドウなしなど)ことを保証します。DetectColorForAvatarDescription
: アバターのテクスチャを分析して、RPMAvatarInfo.AvatarDescriptionに色が含まれることを確認します。手の色を肌に合わせて変更したり、髪や衣服の色を使用してアバターの簡素化されたLOD表現をカスタマイズするのに便利です。EyeMovementSimulation
: ReadyPlayerMeアバターの目を目のシミュレーションシステムに接続し、アバターの近くにあるGazeTarget
コンポーネントを持つオブジェクトを追従させることができます。LipSynchronisation
: 顔のメッシュブレンドシェイプをOculusのリップシンクに接続します。ただし、MacOSおよびWebGLではこれができず、シンプルな音声レベル検出システムに置き換えられます。LipSyncWeightPonderation
: OculusリップシンクのブレンドシェイプのウェイトがReadyPlayerMeアバターメッシュに対して高すぎる値を生成するため、適応が必要です。これはOVRLipSyncContextMorphTarget
のコードを変更するか(こちら参照)、またはこのオプションを使用してLateUpdate
で値を固定することができます。EyeBlinking
: アバターにReady Player Meが提供するまばたきスクリプトを適用し、自然にまばたきができるようにします。OnLoadedSoundEffect
: アバターのダウンロード完了時に音を再生するためにSoundManagerを使用します。DownloadThrottling
:PerformanceManager
を使用して、同時に複数のReadyPlayerMeアバターのダウンロードを防ぎます(これにより帯域幅が飽和し、適切なネットワーク通信が妨げられる可能性があります)。
デフォルトでは、すべてのオプションが選択されています(AllOptions
値)。しかし、たとえばアバターをシンプルな選択UIで表示する場合、HideRPMHands
とOptimizeAvatarRenderers
オプションのみを選択することが適切です。
キャッシュシステム
同じアバターがシーン内で複数回使用される場合、このアドオンは同じアバターの再ダウンロードを防ぐキャッシュシステムを提供します。
同じアバターが再度ダウンロードされる場合、すでに利用可能な場合は最初のもののコピーがインスタンス化されます。
最初のアバターがまだダウンロード中の場合、2回目のダウンロードは少し待機します(最大maxSameDownloadWaitTime
、デフォルトでは10秒)。
ReadyPlayerMeは、同じURLが2回目に使用された場合、一部のアバターゲームオブジェクトを削除することがあることに注意してください。このアドオンのキャッシュシステムはこれを防ぎますが、2回のダウンロードが同時に発生し、最初のダウンロードがmaxSameDownloadWaitTime
を超えて完了するのに時間がかかると、2回目のダウンロードがトリガーされ、完了時に最初のアバターが消去されます。このシナリオは、特別なケース(混雑したシーンで多数の重複が存在する)以外では発生しないはずですが、それが問題とならないように、アバターのコピーを常に作成することで、ReadyPlayerMeがそれを削除するのを防ぐことができます。ただし、これによりコピーを作成するための時間が必要になります。
そのためには、RPMAvatarLoader
コンポーネントのcopyRPMLoaderAvatar
をチェックするだけです(デフォルトではチェックされていません)。
RPMAvatarLibrary
シーンに、プロジェクト内でプレハブとして利用可能な事前ダウンロードされたアバターのライブラリを追加することができます。このライブラリコンポーネントであるRPMAvatarLibraryは、このプレハブと、RPMAvatarLoader
によって読み込まれる際にこのプレハブを使用するフェイクURLとのマッピングを含んでいます。
最新のReadyPlayerMeアバターの肌色に主に役立つメタデータフィールドを入力することができますが、メタデータが未入力の場合、ライブラリは自動的にメタデータを検出しようとしますので、メタデータの入力は必須ではありません。
このRPMAvatarLibrary
は、参照されたプレハブを使ってアバターキャッシュを単に事前に埋め込むもので、まるでそれらが実際に一度ダウンロードされたかのように動作します。
インストール
このアドオンは、機能するためにReady Player Me UPLMパッケージを必要とします。それを行うために、ReadyPlayerMeのドキュメントに記載されているように、以下のgitパッケージをインストールしてください:
https://github.com/readyplayerme/rpm-unity-sdk-core.git
これは、Ready Player Meコアパッケージのバージョン3.3(com.readyplayerme.core)でテストされています。
依存関係
- Avatarアドオンバージョン 1.0.0
- Ready Player Me 3.3
- Oculus.Lipsync (Avatar アドオンに含まれるバージョン)
デモ
デモシーンはAssets\Photon\FusionAddons\RPMAvatar\Demo\Scenes\
フォルダにあります。
RPMAvatarLoading
シーンでは、以下のようにいくつかのReadyPlayerMeアバターがロードされます。
- ReadyPlayerMeオンラインエディタで提供されたURLで指定されたアバター。UserInfoコンポーネントを使用してそのアバターのURLをネットワーク上でロードし、同期します。
- キャッシュシステムをデモンストレーションするための同じアバター。
- Fusionのネットワークオブジェクトに関連付けられていないオフラインアバター(UIなどで使用される可能性があります)。
- カスタムアバターURLと
RPMAvatarLibrary
を使用してロードされたアバタープレハブ。
RPMAvatar
シーンでは、RPMNetworkRig
プレハブが使用されており、必要な機能のほとんどを組み込んでいます。以下を参照してください。
- シンプルなアバターURLとRPM URLの両方と互換性があります。
- シンプルなアバターまたはRPMアバターの肌、衣服、髪の色によって彩色されるローポリのフォールバックを提供します。
- アバターの肌の色を受け取る手のモデルが含まれています。
- 最後のLODとしてビルボードを提供します。
EyeMovementSimulation
機能をデモンストレーションします。アバターの目は、GazeTarget
コンポーネントを使ってTarget
ゲームオブジェクトを追従します。アバターの頭と目にGazeTarget
が含まれているため、プレイヤー同士が互いを見つめ合います。
ダウンロード
このアドオン最新バージョンはaddon projectに含まれています。
サポートされているトポロジ
- shared mode
Changelog
- Version 1.0.1: Fix avatar V3 hair and clothes color detection
- Version 1.0.0: First release