Resonite 逸般人向けアバターセットアップ解説
はじめに
この解説の内容は上級者向けです。一般人向けではない、アバターセットアップのノウハウを取り扱います。
アバターセットアップに正解はありません。人それぞれに、様々な表現や目的があり、それを実現するための手法も異なります。
ここでは、技術的な知識を共有する事で、アバターによる様々な自己表現の可能性を広げる事を目的としています。
多くの手法を解説する予定ですが、あくまでも逸般人向けであり、初心者や通常のユーザー向けではありませんのでご注意ください。
内容を熟考し、実験し、理解してからアバターの設定を弄りましょう。
目次
ボタンを押す位置(人差し指)の調節
アバターの両手人差し指(第一関節)に、ボタンを押す機能が標準で入っています。この機能によって、ボタンを指で押す事ができます。
しかし、初期設定は第一関節の位置なのでボタンの押し心地はあまり良くありません。
そこで、ボタンを押す機能を指先へ移動(Offset)させることにより、ボタンの押し心地を改善します。
- テスト用のButtonを作成します。(押しながら調節します。)
- 左右それぞれの、人差し指第一関節のスロットを開く。
- TipTouchSourceコンポーネントを探す。
- Offsetを設定する。
指先方向へ移動させます。(y軸へ約0.02m)
アバターのスケールや手指の構造に合わせて、適宜調整してください。 - ボタンを押して、押し心地を確認してください。
アバターの保存もお忘れなく。
応用編「他の部位にTipTouchSourceを追加する」
TipTouchSourceを鼻や口等に設定する事で、人差し指以外の部位でもボタンを押せるようになります。(ボタンの誤操作にはご注意ください。)
鼻先に追加する方法。
- 頭(Head)スロットを開く。
- 子スロットを新規作成して名前を付ける。
- スロットの座標を鼻先に移動。
(位置を鼻先へ。Z+が前。) - 以下のコンポーネント3つをアタッチ。
Input > Interaction > TipTouchSource Users > Common Avatar System > Fingers > AvatarHandDataAssigner Users > Common Avatar System > AvatarUserReferenceAssigner
AvatarUserReferenceAssignerはアバターの Head Proxy スロットにあるのを使っても良いです。 - TipTouchSourceコンポーネントの名前を掴んで、AvatarHandDataAssignerコンポーネントのTouchSource欄に入れる。
- TipTouchSourceコンポーネントのAutoUpdateUser項目を掴んで、AvatarUserReferenceAssignerコンポーネントのReferences(list)に追加する。
- アバターを着る。
(アバターを着た時にAvatarUserReferenceAssignerが働きます。) - 鼻でボタンを押して、押し心地を確認してください。
(ただし、ボタンが視界外にある場合は反応しません。ボタン側のAcceptOutOfSightTouch設定をTrueにすることで、視界外でもそのボタンが押せるようになります。)
フルトラで首が伸びちゃう時の対策
フルボディートラッキング時に、アバターの首が伸びてしまうことがあります。
頭の遊びを少なくすることで首の伸びを抑えることが可能です。
フルトラ時に限らず、アバターアンカー着席時等にも効果があるので、フルトラユーザーでなくともこの設定は有用です。
ちなみに、この現象はローカル(自分のみ)で発生しているので、他人からの視点ではアバターの首は伸びてないです。そのため、設定後の確認は自身で行う必要があります。
- AvatarRootスロットを開く。
- VRIKAvatarコンポーネントを探す。
- HeadMaxFixDistanceの値を小さくする。
例:「0.025」→「0.001」
脚を動かさない設定
移動中の脚IKアニメーションをなくして、棒立ちにします。
自動の歩行アニメーションを完全に止めることで、フルボディートラッキングの動きのみにする事が可能です。
(将来、アップデートで内容が変わるかもしれません。)
!注意!
この設定をONにすると、アバターアンカー(椅子)に入った時に、脚が正しく動作しません。アバターアンカーに入る際は、OFFにしてください。
- ダッシュメニューを開く。
- 設定画面のその他を開く。
- レガシー項目の「足のシミュレーションを抑制」をONにする。
フルトラしてるかの判定方法
フルトラしているか、フルトラしていないかの判定を取ります。
フルトラに関わるギミックや設定をアバターに組込む際に役立ちます。
例えば、トラッカーが一個だけ電池切れや接続切れで、アバターが変な姿勢になってしまう事があります。全てのトラッカーを監視し、状態を自分に知らせるギミックをアバターに組込むことで、追跡停止時に即応可能になります。
- Hips Proxyスロットを開く。
- AvatarPoseNodeコンポーネントを探す。
- SourcelsTracking項目がTrueなら追跡中。
もし5点トラッキングであれば、左右どちらかの足(Foot Proxy)を参照してください。(トラッカーの電池切れ等も考慮するなら、全ての追跡点をOR判定する事になる。)
- IsTracking項目は、フルトラだけではなく、アバターアンカーに入った時もTrueになる。
- デバイス設定で「トラッカーを使用」をOFFにした場合、IsTrackingとSourcelsTrackingはTrueのままで、SourcelsActiveがFalseに変化する。
- SourcelsActive項目は、トラッカーが電池切れ等になってもTrueのまま。
また、この項目を手動でTrueにしてもTrue表示にならないが、インスペクターを開きなおすとTrueになっている。なんだこれ?
声が出る位置
ユーザーの発声位置は初期設定だとHMDの位置なので、目の前辺りから声が出ています。
通常は問題ないのですが、自身のスケールを大きく変えたときや、口が取外せるアバター等は、発声位置を変更することでより良くなります。
ただし、ウィスパーボイス(ヒソヒソ話)モードの基準点は移動できないで注意が必要です。
ウィスパーボイスモードの基準点は移動できません。
通常のアバターであれば、発声位置の移動は0.1m程度なので問題ないのですが、約1m以上離すとウィスパーボイスモードでの会話は不可能になります。
ちなみに、ウィスパーボイスモードの見た目は移動できますが、あくまでも移動するのは見た目だけっぽい。
(もしウィスパーボイスモードの基準点も一緒に移動させる方法をご存じの方がいらっしゃいましたら、教えて頂けると幸いです。)
- アバターのHead等のスロットを開く。
発声位置のスロットを開いてください。 - 子スロットを新規作成して、適当に名前を付ける。
- 座標を動かして発声位置へ近付ける。
- Head Proxyスロットを開く。
- AudioOutputコンポーネントを掴んで、先ほど新規作成したスロットへ移動させる。
- フレンドに声を聴いてもらい、正しく声が出ているか確認してもらいましょう。
瞬きと他表情との競合対策
瞬きと競合する表情の設定方法です。
笑顔等(目を閉じる系表情)のときに瞬きが働くと、ブレンドシェイプが同時に動作して予期せぬ表情になる事があります。
目の設定を適切に行い、瞬きブレンドシェイプとの競合を回避します。
EyeLinearDriverのCloseSubtractLimits(list)に瞬きと競合するブレンドシェイプを入れることで、そのブレンドシェイプが動作している間は瞬きを抑制できます。
- Eye Managerスロットを開く。(Headの中)
- EyeLinearDriverコンポーネントを探す。
- 表情に合わせて、Left・Right・Combined何れかのCloseSubtractLimits(list)のAddを押してリストを増やす。(複数の表情を登録可能。)
例えば、両目を閉じる笑顔ならCombinedを、右目を閉じるウィンクならRightをAddする。 - 競合する表情(ブレンドシェイプ)の名前を掴んで、Source欄に入れる。
- 必要に応じてMultiplierで影響力を設定する。
自分の声を確認する
自分の声(マイク入力)が、ちゃんと聞こえるかを確認します。
方法を2パターンご紹介いたします。(このほかにも、ユーザー製のアイテムで確認する事もできます。)
- オーディオストリームで聞く方法(入力音声の確認ができる)
- アバターを改造して、常時聞く方法(ボイチェンユーザー向け)
マイク関係には様々なトラブルがあります。例えば…
- エコーバック(声が返ってくる)現象
エコーバックしているユーザーがセッションに居ると、大変迷惑です。
スピーカーとマイクの距離は離しましょう。もし、ループバック機能を使用している場合は必ずOFFにしましょう。 - ボイスチェンジャー(変声器)
発言内容が聞き取れるかどうか自分の耳で確認しましょう。
ボイチェン入れ忘れ防止の確認にも利用できます。 - マイクの設定が不適切
ノイズゲートやノーマライズの設定等が適切でないと、音量が小さすぎたり一言目が聞こえなかったりします。
使用するマイクに合わせて、適切に設定を行いましょう。 - うっかりミュート
Resoniteの設定、マイクの設定、PCの設定などでマイクをミュートしたことを、うっかり忘れてしまう事もありえます。
標準機能の音声配信機能を使い、マイク入力を確認します。(あくまでもマイク入力の確認です。実際に聞こえる音声ではないので注意しましょう。)
ダッシュメニューを開き以下の手順で確認してください。
ホーム > 音声配信 > 音声入力デバイスの選択 > 入力された音声を聞く
確認が終わったら、再生を停止または画面を閉じましょう。
アバターに音声モニタリングシステムを追加します。
無言ユーザーや、ボイチェンユーザーのモニタリング用に使えます。
アバターに組込みたい逸般の方は頑張って設定してみてください。
- AvatarRootスロットを開く。
- 適当に子スロットを作って名前を付ける。
必要に応じてスロットの場所や位置を調整してください。 - 以下のコンポーネントをアタッチする。
Audio > AudioOutput Users > Common Avatar System > Audio > AvatarVoiceSourceAssigner
- AudioOutputコンポーネントのSource項目を、AvatarVoiceSourceAssignerコンポーネントのTargetReference欄に入れる。
必要に応じて、AudioOutputコンポーネントのVolume設定等を調整してください。 - 機能をローカル化します。
- 以下のコンポーネントをアタッチする。
Transform > Drivers > ValueUserOverride<bool> Users > Common Avatar System > AvatarUserReferenceAssigner
AvatarUserReferenceAssignerはアバターの Head Proxy スロットにあるのを使っても良いです。 - ValueUserOverrideコンポーネントのPersistentOverridesをTrueにする。
- ValueUserOverrideコンポーネントの_overrides(bag)をAddして一つ作る。
- User項目を掴んで、AvatarUserReferenceAssignerコンポーネントのReferences(list)に追加する。
- ValueをTrueにする。
- AudioOutputコンポーネントのEnabled項目を、ValueUserOverrideコンポーネントのTarget欄に入れる。
- 以下のコンポーネントをアタッチする。
- アバターを着る。
(アバターを着た時にAvatarUserReferenceAssignerが働きます。) - フレンドに声を聴いてもらい、ループバックが発生していないか確認しましょう。
対マテリアルツール耐性
マテリアルツールで撃たれた時に、アバターのマテリアルを変更させない方法。
- AvatarRootスロット等を開く。
- MaterialApplyPolicyコンポーネントをアタッチする。
詳細はAssets/Taggingをご覧ください。
ブレンドシェイプを分割して表情を増やす
左右同時に動く表情等のブレンドシェイプを、左右別々に動作するブレンドシェイプに分割できる。
例えば、両眉が一緒に動くブレンドシェイプを、2クリックで左右に分割できる。
表情の少ないアバターや、アイトラッキング等を使用する場合に重宝します。
- SkinnedMeshRendererコンポーネントを探す。
- 分割したいBlendShapeWeights(list)の三本線アイコンを押す。
- コンテキストメニューが開くので、「ブレンドシェイプをX軸で分割」を押す。
Fluxを使用する事で、より細かな設定も可能です。
詳細はSkinnedMeshRendererをご覧ください。
腕の長さを合わせる
アバターの腕の長さを調整して、現実の腕の長さと合わせます。
これにより、VRモードでプレイした時に、腕の違和感が減り一体感が増します。
左腕の編集方法を解説します。(右腕も同様に行ってください。)
- AvatarRootスロットを開く。
- VRIKコンポーネントを探す。
- leftArmのArmLengthMlpの値を調整する。(アバターを着たままやると調整しやすいです。)
これだけだと、肘や手首が破綻する可能性があるので、代替のボーンスロットを作り、差し替えます。
- 「UpperArm.Lスロット」と「LowerArm.Lスロット」それぞれの子スロット新規作成ボタンを押す。
- 「UpperArm.L - Childスロット」と「LowerArm.L - Childスロット」それぞれのScale(Y軸)をArmLengthMlpの値と同じにする。(スロットの名前も分かりやすくしておくと良いです。)
- 体のSkinnedMeshRendererを探す。
- Bones(list)内の「UpperArm.Lスロット」と「LowerArm.Lスロット」を「UpperArm.L - Childスロット」と「LowerArm.L - Childスロット」に差し替える。
※衣装(袖)のボーンも、同様に差し替えてください。
ボーン追加方式で着せ替えしている人は、追加したボーンスロットの階層移動をお忘れなく。
「アバターを着る」を他人に操作させない
アバターにレーザーを当ててトリガーすると、「アバターを着る」コンテキストメニューが表示されます。
これを自分だけ操作できるようにして、他人には操作できないようにします。
一応、SimpleAvatarProtectionが付いていれば、他人が着ることはできません。
他人でもメニューが操作できるのが嫌な場合に設定します。
詳細はAvatarEquipBlockをご覧ください。
- AvatarRootスロットを開く。
- コンポーネントを2つアタッチする。
Transform > Drivers > ValueUserOverride<bool> Uncategorized > AvatarEquipBlock
- AvatarEquipBlockをローカル化します。
- ValueUserOverrideコンポーネントのDefaultとPersistentOverridesをTrueにする。
- ValueUserOverrideコンポーネントの_overrides(bag)をAddして一つ作る。
- User欄に自分のUserを入れる。
- AvatarEquipBlockコンポーネントのEnabled項目を、ValueUserOverrideコンポーネントのTarget欄に入れる。
雛形(編集用)
あ
メモ(執筆予定)
- アイトラ&顔トラ設定
- 固視微動&瞬き設定
- スカート貫通対策
- 綺麗なプロキシー
- 脚の接地判定
- 服を脱ぐ
- キャリブレーションするときの中央位置の再設定
- 抜け殻が自動でTポーズになる
- サムネイル設定
- 喋ると光る
- 視界に髪の毛等を映さない方法
- 視界の限界を伸ばす方法