トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

OVRCameraRigでVRMに憑依するとき髪などを表示させない1人称対応

VRMアバターに憑依したとき、顔や髪のメッシュが見えて邪魔な時がある

 

VRMにはVRMFirstPersonというコンポーネントがついていてどのメッシュが一人称では表示させない用かとかは自動で設定されている。

でもこれを発動させるには外部スクリプトからFirstPerson.Setupを呼び出さないといけないっぽい

vrm-c.github.io

 

まず手動でレイヤーの9にFIRSTPERSON_ONLY_LAYERと、10にTHIRDPERSON_ONLY_LAYERを設定しないといけない

10にすでに何か入ってる・・・

どのアセットが入れたんだろう?名前的にMetaのMovementSampleだな・・・

VRMFirstPersonでの参照を変えようかと思ったけどpackage内にあるから変えれなさそう・・・

まあMetaのほうはたぶんサンプル用だから消していいか。

 

こんな感じにした

 

そのあとVRMFirstPersonの使い方の記事にあるサンプルスクリプトをVRMファイルに貼ってカメラとかを設定する。FirstPersonは勝手に入った。

カメラのレイヤーの設定部分はスクリプトに含めず手動で設定してもよさそう。以下の記事ではそうしている

qiita.com

肝心なのはVRMFiest.Setup();を呼び出すこと。

これで無事邪魔なもの表示されなくなった~~

 

追加で首に巻いているものも非表示にしたい。

と思ったらそのメッシュもVRMFirstPersonに既に入ってた・・・でも実行してもレイヤー変わってない。

もしかしてSkinnedMeshRendererしか変えてくれないのかな?

手動でレイヤー変えた

 

HanaToolv4でパーフェクトシンク&OVR対応!(おまけv5 & VRM1.0)

新しいVroidStudioでつくったVRMファイルにパーフェクトシンク対応する。

HANA_Tool_v4

Unity2022.3.7f1

uniVRM v0.117.0

VRM0.x

booth.pm

昔の自分の記事を見ながらやったけど、いろいろ変わってた

bibinbaleo.hatenablog.com

書き出し

VroidStudioから書き出すとき透明メッシュはOffにする必要があるらしい

透明メッシュを消去するのチェックをオフにする。かなりポリゴン数増える

新しいHanatoolならVRM1.0に対応しているけど、私の買ったやつは対応してないので0.0で書き出す。まだ1.0じゃないと動かないアプリってない気がするし、ネットに落ちているもろもろの便利ツールは0.0じゃないと動かないイメージなので0.0にした

Unity

そしてunivrmとhanatoolをUnityに入れて、VRMファイルも入れる

https://github.com/vrm-c/UniVRM/releases

Reader

HANA_tool>Reader

Faceを選んで入れて、ReadBlendshapeを押したらパーフェクトシンク対応のBlendeShapeが追加される

ClipBuilder

Hanatool>ClipBuilderでARkitを選んでClipBuildするとBpendShapeClipにも↑のパーフェクトシンク対応のClipができる

書き出し

これでVRM書き出しをしてwaidayoで無事動いた

OVR

っていうかClipBuilderにOVRある!

あらかじめreaderでパーフェクトシンク用のblendshapeをfaceに適用した状態でClipBuilderでOVRの設定をすると、OVRの表情に対応した名前のクリップができる

そしてちゃんとClipを見ると表情が変わっている!

 

これ使えば手作業でパーフェクトシンクのクリップをOVR用の名前に変える必要なかったんだ~

bibinbaleo.hatenablog.com

おまけ:v5でVRM1.0にパーフェクトシンク

v5はVRM1.0用の別商品

kuniyan.booth.pm

VRM1.0で書き出し

その際に改変OKにしておく必要がある

そうしないと編集が許可されていませんと出た

書き出したVRM1.0対応のものをUnityに入れる。

<VRM1.0を初めて触ったのでメモ>

インポート時一瞬で入るしフォルダとかもできない

Inspectorもぜんぜん違う・・・こんな違うんだ・・・

あとBlendShapeClipはExpressionというのになったらしい

vrm-specification/specification/VRMC_vrm-1.0/expressions.ja.md at master · vrm-c/vrm-specification · GitHub

Readerでパーフェクトシンク用のBlendShapeデータを書き込む部分は同じ。

そのあとv5ではClipBuilderではなくExpressionBuilderを開く。

OVRとかARKitとかの設定はない。

ここでアバター本体を設定してBuildExpressionをすると、Blendshape名と同じ名前のClipができる。つまり今回はARKit用のパーフェクトシンクのBlendshapeと同じ名前のClipができた

 

mocopi x VR with Unity【MetaXRSDK】

前回mocopiのUnity用SDKのサンプルを下半身優先モードで動かすとこまでやった

bibinbaleo.hatenablog.com

今回はVRIKとMetaXRSDKで動かしていたVRを使うものを、mocopiを使って動かしてみる。

前置き

UnityEditorで動かない~と前回記事に書いていたが、受信の設定で使っているUnityEditorを消したら動いた

 

そのことに気付く前にQuestビルドで動くか試そうとしたが、なんか動かなかった。

でもClusterはQuest版でもmocopi動かせるし実際受信はしたのでできるはず

tech-blog.cluster.mu

公式にも書いてある

Sony Corporation - mocopi

 

今回はUnityEditorで動けば十分なのでいったんQuestビルドは気にしない。

FinalIKあり

この時の設定にmocopiを追加したバージョン

bibinbaleo.hatenablog.com

mocopiのほうは下半身優先モードにしてUDPで送信

 

Mocopi AvatarをAnimatorのついているアバターにつける

そしてMocopiSimpleReceiverを置いて、mocopi avatarを付けたアバターを参照

VRIKのFixTransformのチェックを外したらとりあえず足動いた。

かわいいね

シェーをしようとしている

youtu.be

FinalIKなし(失敗)

せっかくmocopiで足が動くので、有料のVRIKをなしで使えるようにしたい。

昔ChatGPTに作ってもらったHMD+コントローラーを使った上半身だけのIKシステムを使えないかな?

スクリプトは以下にある

bibinbaleo.hatenablog.com

AnimatorでIKPassにチェックを入れる

ハンドのトラッキングにはRightHandAnchorを直接参照しないと動かなかった。(mocopi未受信の時)

これでmocopiを受信したが動かしたが腕が動かなかった。

なんと実行中mocopiが有効な時、AnimatorからAnimatorControllerが消えている。

なので今回のAnimator経由のオリジナルIKが使えなかった。

あとコントローラーでの移動モーションも使えない・・・

skeltonの更新とかち合うから消すようにコードに書いてあるな~LateUpdate使うじゃダメなのかな?Updateからこの関数は呼び出されていた

下半身優先モードじゃなくて普通のモードにして手もmocopi経由にするか?でもコントローラーでの移動させたいしな~

最後に

まあ毎回mocopi使うのめんどくさいし、しばらくはVRIKも使うだろうからいいか

でもVRIKを使うにしてもAnimatorが消える問題は解決しないといけないか・・・

 

そういえばライセンス

商用ライセンス契約について
Mobile SDK
個人のお客様向け:本SDKは法人のお客様のみの提供となります。
法人のお客様向け:お問い合わせフォームから商用ライセンス契約についてお問い合わせください。

各種Receiver Plugin
個人のお客様向け:商用利用・非商用利用に関わらず、2024年3月31日以降も無料でご利用いただけます。
法人のお客様向け:お問い合わせフォームから商用ライセンス契約についてお問い合わせください。

www.sony.net

Vroidアバターの指をQuestのハンドトラッキング経由で動かす

前回コントローラー入力経由での指動かしはやった。

bibinbaleo.hatenablog.com

 

移動操作とかあるアプリだからコントローラーはどうせ必須かなと思ったけど、Quest公式のデモでは移動もハンドジェスチャーでやってたし、AppleVisionProもコントローラーないし、せっかくだしハンドだけで、移動やUI入力移動までできるようにしてもいいかも

まずはキャラクターの指を動かす。

HandPoseTransferForOculusQuest

こちらを使わせていただく

github.com

エラー

MetaXRSDKv60では_LeftHandOVRSkelton.ShouldUpdateBonePosesがエラーになる

最新のOVRSkeltonにはShouldUpdateBonePosesというフラグがない。

とりあえずコメントアウトした。

動かす

サンプルシーンを見る限りOculusWristControllerとOculusHandPoseTransferを適当なオブジェクトにに貼って、手の位置やOculusのHandプレハブ、キャラのプレハブを付けるといい

MetaのOVRHandプレハブをRight(Left)ControllerAnchorの下に置いて、HandTypeの左右を設定する

Oculusの手を表示するならデフォルトの黒色は邪魔なのでマテリアルを変える。

OVRHandPrefabのSkinnedMeshRendereのマテリアルを変えたらいい

あとは同じようにセットアップしたらとりあえずは動いた。

修正

自分の目に見えるOculusの手と、鏡に映るOculusの手の向きが違う。ホラー映画みたいで面白い

これはOculusWristControllerを変えると変わる。全部0にしたら正しくなった。

 

あとこのアセットを使う前から、コントローラーを置いてハンドトラッキングモードにすると手の角度が変になる。

これはVRIKで参照しているGameObjectの角度を変えるといい感じになった。

左手

親指

でも右手の親指だけ、動きと逆向きに曲がる;;

と思ったけど、ブログ用のモデルだと起こらず正常だった。

同じVroidhub製なはずなんだけど微妙に作りが違うのかな?

と思ったが、もう一度やったらやっぱりこのモデルでも逆に曲がった。

👍の指をしている

 

QuestのハンドトラッキングでUI入力【Poke】

Pokeって呼ばれる、ハンドトラッキングのハンドで直接UIとかを押すやつを実装する。

Quad

Meta公式のBuilding Block内にPokeというのはあるが、これはQuadを使っている。

bibinbaleo.hatenablog.com

uGUIが慣れ親しんでてよかったけどエフェクトとかも付けれるしQuadでやったほうがいいのかな?

 

MovementSampleにもPokeでUI切り替えれるものあったけど、中身見たら結構複雑

使う

BuildingBlockのPokeableItemを使って実装してみる

デザイン変更

押したときの色の変化はここ

3DのTextMeshProをVisualの下に置く

大きさはButtonVisualで変えれたけど、実行したら元の大きさに戻った・・・

ButtonVisualについているRoundedBoxPropartyの値を変えないといけなかった。ここで角丸にもできる!親のVisualsの値を0.03ぐらい小さくして、子の数字を扱いやすくした

こちらの記事が詳しい

rhikos-prgm.hatenablog.com

イベント

Block内のPokeを押したときのイベントはInteractableUnityEventWrapperというのを使えばいい。多分デフォルトはではついてなさそうだったのでつけた

qiita.com

これでできた

uGUI

uGUIで同じ方がやっていることにあとで気づいた

rhikos-prgm.hatenablog.com

ドキュメント

https://developer.oculus.com/documentation/unity/unity-isdk-canvas-integration/#PointableCanvas

 

こちらの記事の時とOculusのコンポーネント名が変わっているものがいくつかあった

PointablePlaneはPointableCanvasだと思われる

でもうまく参照できない・・・

BoxProximityFieldもない

うわ~ん

最後に

ハンドトラッキングのUI入力と言えばPoke!と思ったけど、普通にポインターでやったほうがいい気がしてきた。手を大きく動かさなくていいし、Appleもそういってた。

以下のドキュメントにRayでやる方法みたいな項目ある。

https://developer.oculus.com/documentation/unity/unity-isdk-canvas-integration/#PointableCanvas

 

Blocksのサンプルはcube colliderの表面に手から出るRayが反応するというものだった。

ハンドトラッキング独自のRayというより、コントローラーの時に作ったRayは使えないのかな~?次はそれをやってみよう

bibinbaleo.hatenablog.com

 

mocopi下半身優先モードxUnityとSteamVRモードと自作拡張バンド

mocopiの下半身強化により、VRと組み合わせてもっと精度よくトラッキングできるようになった

www.sony.net

あと機能SteamVRにも対応したのでVRchatでも全身トラッキングできるようになったらしい。

ClusterはSteam前から独自で対応していたので前やった。VRChatもOSC受信で対応してたはず

bibinbaleo.hatenablog.com

バンド自作

腕につけていたものを膝上につけるにあたり、バンドを拡張する必要がある。

公式から配布されていたけど、1/10で終わったらしい。

マジックテープあればなんとかなりそう

できた

セリアにある結束用面テープ60cm

長さ十分に足りそうだったので半分に切る

そして半分に切った端っこを少し切って両面テープとか縫い合わせとかで端に止める

完成。少し幅が広かったので入れやすいように先っぽを細くした

 

下半身強化モード+Unity

アプリ起動時に高度機能にチェック

VR向け下半身優先を選ぶ。VR向けなのに頭はそのままなんだ!

下半身強化モードとPCVRモード違うのか~

どういう動きをしたら強化されてることが分かりやすいんだろう?

とりあえずアプリ上ではちゃんと動いた

 

Unityにリアルタイム送信

UnityのSDKをダウンロードしてUnityに入れる

Unity2022.3.7f1

mocopi-receiver-plugin-for-unity_1.0.5.1.zip

www.sony.net

アプリの外部機器との接続設定をmocopi(UDP)にして、IPアドレスとポートを確認。

 

Editorでサンプルシーンを動かしたが前回同様やはり動かない。

一応ファイアウォールの設定も変えた

富士通Q&A - [Windows 10] Windows Defender ファイアウォールで、手動でポートを開く方法を教えてください。 - FMVサポート : 富士通パソコン

 

動いた!受診の規則からUnityEditorの使ってるバージョンごと消したらいい!

qiita.com

昔waidayoを試したときもそれで動いたんだった。苦労した記憶ばかりで動いた記憶が消えてた

bibinbaleo.hatenablog.com

ビルド(もう必要ない)

Monoビルドして試しても動かない・・・前回試したとき何のモードでビルドしたか分からないけど、なんも設定せずにビルドしたら動いた気がするんだけどな・・・

 

公式にはIL2CPPにせよって書いているのでやる。

www.sony.net

IL2CPPのモジュールを入れた。

けど.Net4.xがない

.NET framworkでいいっぽい

forum.unity.com

TargetArchitextureの項目を見つけられない。あ、Windowsビルドでは要らないのか

 

ビルドするとVRM10でエラーが出るのでVRM全部消した

次はVisualSudioがあーだこーだって出る

ググったらVisualStudioInstallerから「C++によるデスクトップ開発」を入れるとよさそう

そしたら動いた!!

youtu.be

っていうか前回やった時こんなに苦労しなかったはずなのに・・・

 

そしてこれをUnityでOculusのVRのRigと一緒に使うにはどうしたらいいのかな~

UnityEditorで動かないからテストしずらい・・・

Androidビルドは対応してそうだから毎回ビルドすればいいのかな

SteamVRモード

基本的にはこのページの通りだがいろいろ引っかかったのでそこをメモ

www.sony.net

PCにSlimeVRというのを入れる必要がある

github.com

一番下のにチェック入れる

これを入れただけじゃSlimeVRが存在しなかったので、もう一度インストーラーをクリックしてアップデートしたらSlimeVRServerというのが入った。これでよさそう

 

mocopiアプリ起動してPCVRを選ぶ。

こっちのモードは頭が胸になってる!

センサーは体につけずにスマホとmocopiの接続をする。この画面が出てるからつけるのかと思っちゃった

そのあと設定の外部接続でPCのIPアドレスを入れる

これデフォルトのままでいいのかと思って全然PCとmocopiが接続されない~~って詰まってた

PCのipconfigで調べる

 

あとPCとスマホを同じWiFiにつなぐのを忘れない

 

そしてSlimeVRを起動して、mocopiで緑のボタンを押して送る。

すると全部表示される。

SteamVRにも早い段階でSlimeVRのアイコンが出てた。3つでいいのかな?

そのあと各センサーと紐づけ。紐づけてから体に身に着ける。左右がイラストだと鏡写しみたいになってるので、感覚やイラストは信じず文字だけを信じたほうがいい。私は間違えた

BodyProportionでAutomaticProportionを選ぶ。

ここが難しい・・・

身長の設定は立っていればいいのでできた

そのあとなんか5つぐらいの動きをしないといけないけど、HMD被りながらその情報を見れないし、音声で案内ないし、動きあっているかよくわからない

しかもそのあとの結果がボーンみたいなので表示されるけどぐちゃぐちゃ

これはあとでわかったけど、次のステップのキャリブレーションをしたらいい感じになるので気にしなくてよさそう。

キャリブレーションは腕を側面につけてまっすぐ立つのと、しゃがんだポーズをしたらフルトラッキングが完成。

追記

精度微妙だと思ってたけど、これのせいかも。私も設定でオンになっていなかった。あと日本語化できるんだ・・・

VRChat・Cluster

VRChatのメニューからFBTというのをやってキャリブレーションした。

そして気づいたが右足と左足が逆になってた。

いろいろやりなおしてもう一度動いたが、膝に手を当てるような動きをしてもぜんぜん合わない。

とりあえず足は動くが精度微妙~

Clusterの6点トラッキングもやった

こちらも動いたけど膝に手をついてもずれるな~

youtu.be

SlimeVRの設定難しいよ・・・

 

あと胸のセンサーを2回軽くタップするとニャーと言ってキャリブレーションされる

左太もももやりにくいけど一応反応した

Unity

SteamVRPluginを使えば、SteamVR経由で情報取れるのかな?

assetstore.unity.com

zenn.dev

VRoidアバターの指をQuestのコントローラー入力で動かす【Unity】

QuestのハンドトラッキングでVRMの指動かすサンプルとか記事は結構あるけど、コントローラー入力経由で動かすのは結構古いものしかない?

OculusFinger

7年前のコードだから動くかな~と思ったら何もしなくてもほぼ動いた!ありがたい!

eyln.hatenablog.com

Meta XR SDK v60

Unity2022.3.7

 

指全部に↑の記事のスクリプトを貼る。

これでとりあえずボタンに反応して指は動いた!

ただいろいろあれなので調整

VRoid用調整

VRM固有なのかVroid固有なのかよくわかってない。Vroidかな?

小指判定

Autoだと小指以外は判定できた。小指はVRoidだとLittleになっている。このスクリプトだとPinky

スクリプトのここを変えると自動判定してくれる

右左判定

あと右手判定もできなかった。"right"という名前で判定しているので"_r_"で判定した。

方向

あとそのままだと指が前後じゃなくて左右方向に曲がった。

左手は実行中にInspectorでYが1になっているAxisをZを1にしたら親指以外はいい感じになった。(右手は-1にする)

親指は実行しながらパラメーターいじっていい感じに調整してメモ

それをSetupFingerType()でもろもろ変更する。

左手

右手

 

MetaXRSDKだけで、スティック移動・回転・uGUI入力・ボタン入力

サンプルを触ってやれそうな気がしてきたのでやる

bibinbaleo.hatenablog.com

既存のシーンに追加していく

スティック移動・回転

OVRPlayerControllerというプレハブが用意されていて、その下にOVRCameraRigも入っていた。でももういろいろ変更したCameraRigが既存のシーンにあるので、そのプレハブをUnpackして、OVRCameraRigを消して、既存のものに置き換えた

それだけで移動した!やった~

でもVRIKの歩行モーションはどう設定しても不自然だったので、Animationを用意したほうがよさそう。

qiita.com

回転の角度はRotationAmountかな?これを3にしたら90度回転している気がする

移動速度はacceleationかな?

こちら項目の解説があった

raspberly.hateblo.jp

Jumpは自分で呼び出すらしいけど、なんか見当たらない。スクリプトの中にはあるのに

uGUIのコントローラー入力(v62)

昔のシステムを使ってたら、Rayが途中で切れなくなったし、ポインターも表示されなくなった;;

試しにControllerDrivenHandPosesシーン見たら、なんか変わってた。決定したらカーソルの形も変わる。Questのネイティブのデザインと同じっぽい

OVRRayHelperというのが追加されて、いろいろいい感じになってた

OVRControllerPrefabについているHelperスクリプトにOVRRayHelperをセットする必要がある。これがないとポインターがうまく動かなかった

Canvas側は変わらない。RightControllerAnchorがはまっているから右手だけなのかと思いきや左手でも操作できた

Buttonに何かついてた。UIButtonSquishHelper

EventSystem

GazePointerはコントローラー使うならたぶんいらない。スクリプトオフにしても動いた

OVRManagerのControllerDrivenHandPosesTypeを変えている

 

これで自分のシーンに持ってきてOVRControllerHelperにセットしたら動いた。

 

これはOVRControllerHelperにセットしてなくてうまくいかず泣いてた時の画像

デザイン

そのままだとカーソルが大きかったので小さくした。

ただ、今回カーソルが2Dになっているが、UIが斜めになっているとうまく2Dが斜めになってくれない。常に地面に対して垂直

あとボタンによってカーソルが表示されないものがある。

前やっていたように3Dの球のほうがいいかな・・・

変えた。

これで常にカーソル表示されるしいい感じ!

クリックしたとき自動で小さくなった。

uGUIのコントローラー入力(v60)

基本この記事の通り

qiita.com

楽をするために、ControllerDrivenHandPosesシーンからGazePointerControls(LineRendererが含まれる)をプレハブ化して、持ってきた。

CanvasはGraphic Raycasterを消してOVR Raycasterを付ける。Pointerに手を設置

EventSystemも既存のInputModuleを消してOVRInputModuleを付ける。以下のように設定

JoyPadClickButton(=決定ボタン)は複数選べる。サンプルシーンの設定を持ってきた

あとOVRPointerVisualizerを適当なオブジェクトにつけて、LineRendereを設定すると、手からRayが出るようになる

最初のQiita記事の方がこれを編集してUIに当たった場所にGazeIconの子に設置した任意のポインターが表示できるようなコードを上げてくださっているのでそれを使った。

これで動いた~~

デザイン

あとLINERendereやGazeのSphereのデザインを編集していい感じにした。

LineRendereのColorって変更しても反映されないのか?Materialの色しか反映されない。

Materialの色を白にして、Colorでグラデーションを付けても反映されない。

あとGazeIconの先につけるSphereの大きさは0.5でちょうどよかった。実行するときLineRendereの幅に影響されるのかな?Colliderがあるとアバターがぶっ飛んだので取った

ControlsとGazePointerとEventSystemをまとめてプレハブ化したら少しは楽に使いまわせるだろうか?

ボタン入力

簡単にやるならController Buttons Mapperを適当なオブジェクトに付けてボタンとイベントを選択するだけ。

 

VRTK v4触ろうかな~?

昔ガッツリ使っていたVRTK

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

 

あんまりアップデートされていない印象だったが、v4になってアセットストアも別ページになって出ていた

assetstore.unity.com

XR Interaction ToolkitとかMetaXRSDKを触ったけど、いまいち使いづらそうなのでVRTKも触ってみる。

Unity2021.3までは動作保証しているけど、Unity2022でも動くだろうか?

あと今後のことを考えると1年半前でアップデートが止まっているものはあんまり使わないほうがいいかもしれない。

 

最近はあんまり使っている人がいない印象

 

ドキュメント

VRTK - Virtual Reality Toolkit

Academy | Educational guides and tutorials to accelerate learning.

インストール

アセットストアからインストールしたけどこれだけしか入らない

個別に必要な機能をインポートするっぽい

Window>Tilia>PackageImpoter

長いLoadingの後何かボタンを押すと一覧が出てきた

ここで一覧が見れる

www.vrtk.io

AXISというのがスティック移動なのかな~?と思ったので入れてみる。

Packageに入る

Readmeを読む

なんかプレハブをヒエラルキーに置くって書いてる

最後に

MetaXRSDKのほうでやりたいことできそうな気がしてきたのと英語ばっかりでつらいので途中でやめた

日本語の記事書いている人いないのかな~

あとtiliaってなに・・・?

XR Interaction ToolkitのVRサンプルを見る

何のツールキットを使うか

UnityのVR環境で自作Vtuberアプリっぽいアプリを作っている。

MetaXRSDKの機能でアイトラとフェイストラッキング、VRIK+OVRCameraRigでアバターを動かすというのはした。

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

あと

・指を動かす
・コントローラーでの移動
・アバター変更
・Xボタンで鏡だす
・コントローラーで45度回転

というのをしたいが、何のツールを使って実装すべきか。

MetaXRSDKをすでに使っているので、全部これを使うか?

それともUnityのXR Interaction Toolkitを使っていろんなプラットフォームに対応できるようにするか?

XRKaigiでUnityJapanの人がXR Interaction Toolkitよくなった的なことを言っていた。

XR Interaction Toolkit | XR Interaction Toolkit | 2.0.1

そもそもMetaXR SDKはOpenXRに対応しているのか?それなら気にせずMetaXRSDK使えばいいか?

よくわからないけどアイトラッキングもOpenXRベースで使えるらしい

qiita.com

あとは昔使っていた豚さんのVRTKとかのサードパーティーや別のUnityAssetもある。v4というのが出ていて2021.3.0fまでは対応している。でも1年半以上更新はない

assetstore.unity.com

 

よくわからないのでまずXR Interaction Toolkitを触ってみる

前触ったの4年前><

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

今回は触らないけどパススルーのMRも追加されている

https://cdn-ak.f.st-hatena.com/images/fotolife/b/bibinbaleo/20240105/20240105165652.png

XR Interaction Toolkitのサンプル

XRKaigiで紹介されていたVRテンプレートにいろいろ入っているらしいので、触ってみる 

あった

UIクリックもスティック移動も回転も入ってる!

コントローラーのチップもある

UI

UIをつかんで動かすのもあった。

あと直接タッチしてUIクリックもできた。こういうのPokeっていうんだね。AppleVisionの動画で知った

ボタンにもタッチしたとき用のフィードバックエフェクトがあるけど何とも言えない。あんまり気持ちいエフェクトではなかった

 

UIはCanvasにTrackedDeviceGraphic Raycasterというのをつければいいのかな?

回転

回転の設定

移動

移動は左手はスティック入力移動ができて、右手はテレポート移動になっていたが、Smooth Motion Enabledのチェックの違いかな?

Smooth Motion Enabledにチェックが入っていないテレポート移動の時は、回転ができるけど、チェックを入れてスティック移動にすると回転ができなくなる。

smooth Turn Enabledにチェックを入れると回転がスムーズになる。

TunnelingVignette

移動や回転の時に出てくる黒い視界を狭めるもの。設定できる

Ray

コントローラーから出ているRay。まっすぐとかカーブを選べるっぽい

Meta Gaze Adapter(失敗)

他にサンプルないかなとPackageManagerのXRInteractionToolkitを見たら、Meta Gaze Adapterあった!ここに入ってるんだ~せっかくだからやろう

サンプルシーンがあるのかと思ったけどなかった。

qiita.com

上の記事を参考にしつつ、いろいろ当てはまらないところがあったので適当にやったけどうまくいかなかった

適当なキューブにこれを付ける。この内容自体はOVREyeGazeと近い

bibinbaleo.hatenablog.com

あとMetaXRSDKのv60を入れる

そのあとこの画面でWindowsとAndroidどっちもFixとApplyした。

OculusProjectConfigのEyeTeackingSupportにチェック

Androidビルドしたら動くかと思ったが動かない。ビルドめっちゃ時間かかったのに~::

最後に

割とやりたいことはできそうだが、思ったより設定項目がいっぱいあって、MetaSDKも入れている中でこれを使うの気後れしそう・・・

OVR特有の機能を使わないなら最初からこれだけ使うのはありっぽそう

XYボタンなどを押したときに何か反応するとかはサンプルにはなかった。

 

次はMetaのSDKの中に入っているBuilding Blocks(とサンプルをもう一度)をちゃんと触る

前回サンプル触った時、偏って面白そうなのしか触ってない。

bibinbaleo.hatenablog.com

 

VRIK(FinalIK)+MetaXRSDKv60

なんやかんや自分でセットアップするのは始めたな気がするVRIKを最新のMetaXRSDKv60と組み合わせて、VRMキャラをVRで動かす。

・Unity2022.3.7f1

・MetaXRSDK v60

・FinalIK(VRIK)v1.9

・VRM0.1

 

VRIKのドキュメント。設定項目の解説がある

www.root-motion.com

解説

qiita.com

初期セットアップ

とりあえず動かすのは簡単だった。

アバターにVRIKスクリプトを付ける

Referenceは自動で付いた

OVRCameraRigのCenterEyeAnchor、LeftHandAnchor、RightHandAnchorをSolverの各HeadTarget、LeftArm>Targetなどにつける

OVRCameraRigはFloorLevelにした

これで実行するだけでとりあえずは足もIK通じて動いた。

調整

ただそのままだと、いろいろ不具合があったので調整

ターゲット

まず右手、左手の角度が90度曲がってる。

HandAnchorの下にターゲット用の空のオブジェクトを作って角度調整

左手90,右手-90

頭も少し前にする。頭の中が見えるので

それを参照する

脚の調整

FootDistanceが足の開き具合。0.3はでかく感じた。

StepThresholdはどれくらいで頭が動いたら足が移動するか。0.3だと変な格好になる

 

どちらも0.2にした

内股というレベルじゃないけどとにかく足がクロスして変

Beat Saber アバターのガニ股や内股を修正する方法 | のしろぐ

各足のSwivel Offsetの値を変えると足の角度が変わった

身長

あと私の身長がアバターに追い付いていないのか、常に少ししゃがんだ状態になる。

Min Head Heightが最初0.8だったのを自分の目線近くの伸長にしたらしゃがまなくはなった

でも手を現実の自分の体の頭にもっていっても、アバターだと胸の部分に来る。手の位置が実際の体に対して合っていない・・・

アバターの大きさを変えるか、カメラの位置を変える

procongame.hatenablog.com

追記:移動モーションはAnimationを使う

Questのコントローラーのスティックで移動できるようにした。

そしたら一応VRIKが追従して足を動かしてくれるけど、引きずられてたり態勢がひどい。

移動はアニメーションを再生できるようにする。

この記事の通りに設定した

qiita.com

でもVRIKのLocomotionのWeightを0にすると、移動しない。

この記事にあるスクリプトを使ってポジションをずっと変更するようにした。

qiita.com

もう少し工夫するならスティック移動しているときだけLocomotionを0にしたほうがいいかもと思ってやってみたが、移動→停止したときにアバターが一瞬変な場所に行くのでやめた

最後に

初めてセットアップ記事書くと思ったら昔書いてたw

bibinbaleo.hatenablog.com

参考

qiita.com

makers.scnet.co.jp

QuestProのアイトラッキングをVRoid(VRM)の目に反映した!!

前回QuestProのフェイストラッキングをVRMに反映するというのはやってみた

bibinbaleo.hatenablog.com

次はアイトラッキング

OVREyeGaze

OVREyeGazeというのを使う

公式リファレンス

https://developer.oculus.com/reference/unity/v60/class_o_v_r_eye_gaze/

こちらの記事通りにやってみた

note.com

こういうコンポーネント。右と左を選べる。

フェイストラッキングのと同じように許可を設定

これで動いた

TrackingModeはHeadとWorldをそれぞれ試したところ、Headだと自分の頭の位置?に追従するので常に目の前にこのオブジェクトが表示され目の動きに合わせて回転した。

Worldは原点の位置?最初自分の足元らへんに表示されて、自分が動いても追従しない。

VRMに対応

こりんさんのメモに以下のように書いてあった

手っ取り早い使い方としては、キャラクターの眼球に相当するオブジェクトにOVREyeGazeをアタッチして、EyeをそれぞれLeftとRightに設定、Apply Rotationをオンにして、Tracking ModeをHead Spaceにすると視線の向きにあわせて眼球のオブジェクトが回転します。

tech.framesynthesis.co.jp

VRoidに眼球オブジェクトはないけど、Root下のFaceeyeを回転させると目も動く

ただこのTransformは実行中外部から値を変更はできない?こうやってもダメだった

サンプルシーンではRoot下の目についてた。

これかな?Animtorを付けていて実行順の問題?

qiita.com

とりあえずAnimetorをオフにしたら動いた

OVREyeGazeスクリプト内のUpdateをLateUpdateにしたらAnimatorをオンにしても動いた。Packages内にあるとスクリプトを変えれなかったのでAssets下に置いた

 

でも頭の回転にも反応してめっちゃうごく。これ、ヘッドセットのトラッキングもしてたら別にこれでもいいのか?

公式ドキュメントを読む

https://developer.oculus.com/documentation/unity/move-eye-tracking/

サンプルで設定されていたViewpointのような「ワールド空間方向の参照フレームが必要です。通常、この基準フレームは目の前方向に設定する必要があります。これは、目のゲームオブジェクトの初期オフセットを計算するためにあります。」だって

追加した

これを追加しても特に変わらない

TarackingSpaceをWorldにしたら、頭の回転と共に目も回転することはなくなった

範囲調整

でも動く範囲がやばいので制御したい

こちらの記事では別途フィルター処理をかけたらしい

synamon.hatenablog.com

 

これで設定できないかな~と思ったが、VRMのLookAt機能を使わない限り関係なさそう?

qiita.com

すでにいい感じになってる。

ChatGPTに言って角度制限してもらうようにしてみた。確かに範囲内の値にはなるが、全然動きがない

解決!x0.2の値にする

目の可動範囲を強制的にある値の間に制限するのではなく、動きを何分の1かにしたらいい感じになった!

 



ChatGPTにOVREyeGazeを直接いじってもらった

 
 
public float rotationScaleFactor = 0.5f;
 
~~
LateUpdate内
 
        if (ApplyRotation)
        {
 
          var scaledRotation = ScaleEyeRotation(pose.orientation);
            transform.rotation = CalculateEyeRotation(scaledRotation);
        }
 
~~
 
 
private Quaternion ScaleEyeRotation(Quaternion eyeRotation)
{
    // 目の回転を Euler 角に変換
    Vector3 eyeEuler = eyeRotation.eulerAngles;

    // Euler 角を -180度から180度の範囲に正規化
    eyeEuler.x = NormalizeAngle(eyeEuler.x);
    eyeEuler.y = NormalizeAngle(eyeEuler.y);
    eyeEuler.z = NormalizeAngle(eyeEuler.z);

    // 回転をスケーリング
    eyeEuler.x *= rotationScaleFactor;
    eyeEuler.y *= rotationScaleFactor;
    eyeEuler.z *= rotationScaleFactor;

    // スケーリングされた Euler 角から Quaternion に戻す
    Quaternion scaledRotation = Quaternion.Euler(eyeEuler);
    scaledRotation.Normalize();
    return scaledRotation;
}

private float NormalizeAngle(float angle)
{
    while (angle > 180) angle -= 360;
    while (angle < -180) angle += 360;
    return angle;
}

 

値はいろいろ試したけど0.2ぐらいでよさそう。

ただ上下を見たとき、片方が逆を向く症状があって、ChatGPTに直してもらっていい感じになったのに、別のモデルで試すとまた再発した

直してもらった時

private Quaternion ScaleEyeRotation(Quaternion eyeRotation)
{
    // ...(既存のコード)

    Quaternion scaledRotation = Quaternion.Euler(eyeEuler);
    scaledRotation.Normalize();
    return scaledRotation;
}

ってやったのだが、これをもとの

    return Quaternion.Euler(eyeEuler);

にしたら、その別のモデルでは正しくなった。

なんなんだろう~

メモ:動かない

OVRBody

OVRBodyの動きを反映させたら目線が動かなくなった。

bibinbaleo.hatenablog.com

OVRBody側が送る値に上書きされている。

スクリプトの実行順を変えたら動いた。OVRBodyの動きを送っているAvatarMotionTransferよりOVREyeGazeを下にする

VRM1.0

アバターをVRM1.0にしたらまた動かなくなった。

VRMInstanceのUpdateTypeをLateUpdateからUpdateにしたら動いた

 

Meta XR SDKのサンプルいろいろ&UnityEditor上で実行

久々にQuest+Unity開発の環境構築した。

bibinbaleo.hatenablog.com

 

いろいろサンプル触る。

UnityEditorで動かす

その前に

前回久しぶりにQuest開発をしたときはBuild&Runすらうまくいかなくて、毎回apkをビルドして、DeveloperHub経由で実機に入れてたけど、さすがにめんどくさいのでEditorで確認できるようにしたい。

昔やった時HandTrackingとかもエディタで動かせた気がするし行けるはず。

Unity + Meta Quest開発メモ - フレームシンセシス

ここをこう言う設定にする

あとOculusソフトウェアの設定で開発者ランタイムでアイトラッキングとか表情とかを有効にする

これでQuestLinkを有効にしてUnityで実行。

プラットフォームはAndroidでいい。

 

最初自分のシーンで動かしてた時、動かなくてこちらの記事に書いたある設定にもした。DevelopmentmodeとかRunDeviceにQuestPro

note.com

Passthrough Relighting

一番下のやつっぽい。

Oppy

サンプルシーンをそのままビルドしてもパススルーが効かなかったので、OVR CameraRigでPassthrough SupportedをRequiredにする

そしたら動いた!キャラに影が落ちるのと、家にそって貼られたメッシュに対してキャラのろうそくの光が反射する。

関係ないけど、パススルーの明るさって変更できるのか~

MetaXRCoreSDKのサンプル

ControllerDrivenHandPoses

コントローラーを持った状態で、コントローラー+手が表示されたり、手だけが表示されたりするサンプル

HandTest_Custom

ハンドトラッキングでオリジナルの手を動かせる

MovementSDK

フェイストラッキングやアイトラ、ボディトラッキングのサンプルがある!!

https://developer.oculus.com/documentation/unity/move-overview/

サンプルの詳しい説明

https://developer.oculus.com/documentation/unity/move-samples/

ARkitのBlendShapeと互換性のあるキャラのサンプルもあるようだ

Githubのページはここ

github.com

AddPackageで

https://github.com/oculus-samples/Unity-Movement.git

そしたらPackagesないのここに入る。これをAssetsしたに動かす

あとセットアップとして画面上部のMovementからCheckProjectSetupTool

FixAll

あとGithubに書いてある影の設定とかもしたけどしなくてもよさそう

あとシーン全部追加

これで実行したら動いた!

別途UnityEditorでも動くように設定したので、フェイストラッキングとかアイトラもUnityEditor上で動く

メニューはハンドで押す

MovementAura

MovementBlendshapeMappingExample

ARkitのBlendShape

顔のBlendeShapeのメッシュにARKitFaceというコンポーネントがあってこれで変換してるのかな?

このコンポーネントを使ったら自分のパーフェクトシンクでも反映できたのでこの記事更新する!!

bibinbaleo.hatenablog.com

 

MovementHighFidelity

上半身反映

MovementHipPinning

椅子に座った姿勢反映。でも私はうまくいかなかった。グロくなった

MovementRetargeting

リターゲティングはメニューがいっぱいあってよく分からない

MovementISDKIntegration

コップをいい感じに自動で持つ

MovementLocomotion

全身反映。QuestProだと足は動かない

Quest3だと足とかも反映されるはず。

 

その他

試してない

【Unity】QuestProでVRoidのモデルにフェイストラッキング。パーフェクトシンクも添えて【v60】

Unityで、Vroid製のVRMモデルをQuestProのフェイストラッキングに合わせて動かす!

QuestのデフォアバターとかWorkroomで試すのはやった。

bibinbaleo.hatenablog.com

パーフェクトシンク

できればパーフェクトシンクにも対応したい。

Vroidモデルにパーフェクトシンク対応させるのは、以前はHanaToolでやった

bibinbaleo.hatenablog.com

 

Hanatool以外にいいツールないかTwitterでみたら今はUnityを使わないHana_Appが主流っぽい

booth.pm

今回は以前作ったパーフェクトシンク対応のモデルを使う

Quest開発の環境設定

Questの開発100年ぶり・・・

最近OculusIntegrationじゃなくて Meta XR UPM packages に変わったらしい 

https://developer.oculus.com/downloads/package/meta-xr-sdk-all-in-one-upm/?locale=ja_JP

Minimal Unity Version: 2021.3.26f1

UnityAssetStoreから入れられる。えっUPMじゃないのか?

assetstore.unity.com

インストールを押したら、Oculus独自のライセンス画面が出た!

公式のガイドページはこちらかな?ちょっと古い気がするが

Get Started with Meta Quest Development in Unity | Oculus Developers

このページが分かりやすい。このページに沿ってやった

https://developer.oculus.com/documentation/unity/unity-tutorial-hello-vr/

 

Meta Quest Developer Hub(旧Oculus Developer Hub)も事前に準備しておけって書いてあったので一応インストールしたけど、いらなかった気もする。

https://developer.oculus.com/downloads/native-android/

 

Unityでプロジェクト作って、AndroidにSwitchして、questを開発者モードにしてPCにつないで、RunDeviceにQuestを出す。Refreshしたら出た

そしてOculus>setupみたいなメニューからこの画面を出してFixAllやAllpyをこれらがすべて消えるまでやる。そしたらもろもろの設定を勝手にやってくれる!便利!

あとはシーンを用意する。

ミニマムだとOVRCameraRigを追加するだけ。名前で検索する際PackagesのほうにあるのでAllにしたほうがいい

今回は適当なMetaXRのパッケージのsampleをインポートしてそれをビルドした

いずれの場合も対象の機材にチェックが入っているか確認。

そしてBuild&Run!

ちゃんとビルドされた!

このあとBuild&Runしたら失敗することがあったけど、Buildだけして、MetaDeveloperHubソフトからapkをドラックで入れたら動いた。

ちなみにMeta XRのサンプルはいろいろ面白いものがあるってTwitterで見かけた気がするので、それは別記事で試そう~

VRM表示

uniVRM入れて、VRMモデルを入れて、OVRCameraを置いたシーンにVRMモデルを置いたら普通に表示された。

最初の設定だと、カメラがUnityの0の高さにあって、上のほうにVRMモデルがあったのでTracking Origin TypeをFloorLevelにしたら目の前に表示された

フェイストラッキング

こちらを参考にやっていく!

note.com

OVRFaceExpressionsと、↑の記事内のFaceExpressionsControllerをVRMモデルのfaceにつける。

OVRCameraRigで以下のFaceTrackingの設定をする

 

するとQuestProでビルドすると無事自分のまばたきが反映された!

コードの内容的にOVRでの目を開く閉じるのパラメーターの値を、Vroidの13,14番目のBlendeshape(=目を開く閉じる)の値に入れている

パーフェクトシンク対応

追記:HanaToolのOVR用パーフェクトシンク

HanaToolでOVR用のブレンドシェイプを作れる!これでこの苦労はいらない

bibinbaleo.hatenablog.com

--

 

パーフェクトシンクはiOSのFaceIDの規格に対応するためのもの。

QuestProのフェイストラッキングとはデータの種類や名前は違うので置き換えないといけない

hinzka.hatenablog.com

パーフェクトシンクで設定した名前をOVR用に置き換えるのは、BlendShapeのインスペクターで置き換えればいい

はいぬっかさんの記事の表を元にひとつずつやっていった。

そしてこちらの方のFaceExpressionsControllerVRMをfaceに付ける。

github.com

こうやって全部置き換えたのだが、1、2個パラメーターを置き換えたときはその部分と瞬きは反応していたのに、全部置き換えたら瞬きしか反応しなくなった;;

なんでかわからないので、別のキャラで4つずつぐらいパラメーターを置き換えて行ったら、半分ぐらい置き換えたけど今のところちゃんと動く。

JawOpen(OVRではJawDrop)が口の閉じ開きなので、それは優先的にやったほうがいい。

あとは頬をプクーってやるのが可愛くて楽しい。

ちなみにOVRの最新版のv60では舌も追加されている。

www.moguravr.com

v60(現時点での最新版)のo_v_r_face_expressionsのリファレンス。

https://developer.oculus.com/reference/unity/v60/class_o_v_r_face_expressions/

本当だ。舌がある。

パーフェクトシンクの方も舌はあるので、これもパラメーター置き換えて、さっきのスクリプトにパラメーター追加したら良いかな?

ちなみに多分舌を出すパラメーター名は両方同じ「TangueOut」っぽい

追加したら瞬き以外が反応しなくなった;;

視線

視線はパーフェクトシンク(=ARkit)には入ってたかな・・・?

OVRのフェイストラッキングの方のパラメーターにはなさそう

 

アイトラッキング自体はできるので、別途対応方法を考えないといけないかな?軽くググってもVRMモデルでやっている人はいなさそう

note.com

 

waidayoでやったら目線動いた。

youtube.com

VRMではBlendeShapeでやる方法とボーンで目線を動かす方法がある。

qiita.com

いずれにしてもVRMの公式の機能を使うならLookAtという形式でしか動かせないのかな?

vrm.dev

ここでできた

bibinbaleo.hatenablog.com

 

VRMアバターをQuestの動きに沿って動かすのは別途VRIK使わないといけないかな~

こちらの記事に紹介されているボディトラッキングも試したら、上半身はちゃんと取得できた!

note.com

ここでできた

 

追記 ARKitFace

Unity-Movementというフェイストラッキングなどのサンプルが入っている公式のアセットの中に、ARKitのBlendShapeをOVR用に変換するスクリプトが入っていた!

github.com

https://developer.oculus.com/documentation/unity/move-body-tracking/

bibinbaleo.hatenablog.com

これはVRMでも使えて、VroidのFaceにOVRFaceExpressionsと共につけて、AutoGenerateを押すとある程度は変換されたが、いろいろ間違っている部分もあった

これを一つ一つ手作業で置き換えていくのめんどくさいな・・・

コピペもできないし・・・

置き換えないで動かしたら、結構変な表情になった

追記:音声のリップシンク

あとでuLipSyncで音声からの口パクをやったが、uLipsyncのスクリプトをオフにしても口を動かしてなくてもしゃべったら口が動くな~と思ったら、フェイストラッキングがAudioからも口を動かしていたせいっぽい



ImagineWebARアセットのWorldTracker【Unity】

こちらのアドカレに参加しています

adventar.org

前回ImagineWebARアセットのImageTracker機能を使ったので、今回はWorldTrackerを使う

bibinbaleo.hatenablog.com

こちら

assetstore.unity.com

この記事での環境

Unity2022.3.7

Imagine WebAR - World Tracker Version 1.3.1

今回作ったもの

マーカーなしで、平面にキャラクターが表示される。読み込みがかなり時間かかるかも?

bibinba.github.io

キャラがこっちを見てくれます。

公式デモ

デモページがUnityアセットページから見れる

webar.imaginerealities.com.au

3種類ある

置く場所を選ぶ

表示される

なんか精度があまりよくない。回り込んだら位置が変わる。あとすごいカメラが広角

デバッグカメラモードがある

3DofVFX

2本指で回転や大きさ変更ができる。移動もできるっぽいけどなんか操作が難しい。思ったようにできない

作る

シーンにWorldTrackerとARCameraを追加。

(ドキュメントに書いてあるWorldCaneraは昔のバージョン、今はARCameraに統一された)

WorldTrackerの2か所に、追加したARCameraをセット

スワイプなどの操作設定もここにあるので、いらなかったらコンポーネント消したらよさそう

MainObjectの下に表示したいものを置く

ビルドするときはwTrackerのテンプレートを選ぶ

これでビルドして前回と同じくGithubPageにUpした。

bibinba.github.io

Placementインジケーターは出たけど、オブジェクトがなんか画面に引っ付いて表示される。空間に出ない

しょうがないのでデモシーンでモデルを置き換えてビルドしたらちゃんと出た。

さっきの公式のデモページよりトラッキング精度いい気がする。バージョンが上がったてるからかな?

あとオブジェクトの大きさは何で決まっているんだろう?Unity内では1.8mぐらいあるキャラクターだけど、ARだと半分ぐらいの大きさしかない

各種設定

いろいろな設定はWorldTrackerでできる。大体の項目の説明はドキュメントに書いていたが、MaxPixelsとMaxPointsが書いてない

discordで検索したけど出てこない・・・

聞いてみたらすぐに回答してくれた!

Basically, these can be used to boost the tracking quality at the expense of framerate. Max pixels is the length of the camera image to be processed, and max points are the number of feature points being tracked.

基本的に、これらはフレームレートを犠牲にしてトラッキング品質を高めるために使用できます。 最大ピクセルは処理されるカメラ画像の長さであり、最大ポイントは追跡される特徴点の数です。

どっちも高くしたらフレームレートを犠牲にトラッキングよくなるのかな?

追記:ver1.4

フレームレートがあがったらしい

• [修正済み] 高解像度デバイスでフレーム レートが大幅に低下するバグ。 また、すべてのデバイス全体で全体的なパフォーマンスとフレームレートも向上しました
• [追加] 3DOF モードと連携して動作する実験的な地理位置情報機能。 ゲームオブジェクトを GPS 座標に固定できるようになり、ユーザーが近くにいるときに探索できるようになりました
• [追加] 地理位置情報に必要な実験用コンパス機能
• [追加] 実験的な 3DOF オービットモード
• [追加] 3DOF モードの ExtraSmoothing プロパティを使用して、モーション センサーのノイズを滑らかにします。
• [追加] 画像トラッカーとの実験的な相互運用性。 Image Tracker バージョン 1.7.0 と同じプロジェクトで使用できるようになりました。
• [修正済み] iOS 17 で Chroma ビデオが切り取られる傾向があるという重大な問題。
• [修正] カメラフィードが暗く/黒くなる潜在的なバグ
• [追加] UnpausePauseOnEnableDisable および PauseOnDestroy は、ARCamera の Monobehaviour イベント OnEnable、OnDisable、および OnDestroy で UnpauseCamera() および PauseCamera() を自動的に呼び出します。

アップデートしたら既存のシーン壊れた。

ARCameraとWorldTrackingプレハブの構造が変わっているっぽいので、新しく追加してUIとかいろいろ置き換えた。

あとWebGLのテンプレートもフォルダコピーしてカスタマイズしていたけど、元のを使わないと動かない。

うまく動いてもGPSのダイアログがiOSだと出てくる。使わないならindex.htmlのこの部分をコメントアウトすると出なくなった

追記:カメラが遠くなるとアバターの髪が爆発する

VRMアバターをARで表示したとき、スマホでアバターからカメラを遠ざけると髪がぶわっとなる。

おそらく実際にカメラとアバターの距離を変えているのではなく、アバターを小さくすることで離れているように見せているせい。

このWorldTrackerの6DofSettingsのdepthModeを変えたら治った

ちなみにこれをやる前にモデルサイズを変えても爆発しないようにVRMのコードを変更したりもしたけど、Editorではちゃんと爆発しなくなるが、なぜかビルド状態だと爆発した;;

mu-777.hatenablog.com