特定条件下でワールド固定したカメラが大きく振動する事象について

この記事は約3分で読めます。

ワールド固定したカメラが大きく振動し、カメラが固定されなくなることがあります。

座標について

VRChatでは、各アバターそれぞれに原点がある仕組みとなっています。
つまりアバターから取り出したオブジェクトはワールドを原点とした座標ではなく、アバターから見たときの座標に従って動いています。

アバターは各プレイヤーが動かすものですから、アバターを原点としてさまざまなアイテムやオブジェクトを配置するのは合理的なことです。

カメラが振動する原因

アバターから取り出したオブジェクトはアバターの座標を基準に動くと説明しました。
たとえばカメラを取り出せばカメラはついてきますし、武器を持てばちゃんと手元についてきます。

しかしワールドに固定したい需要はあります。具体的にはカメラを特定の場所に固定する用途です。
主に集合写真を撮影する場合に使われます。

技術的にどのように実現されているかといえば、アバターが移動したベクトルのインバースを取る仕組みになっています。
つまり、アバターの移動量のちょうどマイナス1倍で動かせばお互いの移動量を打ち消し、結果としてワールドから見たときの座標で固定されているように見えることになります。

ワールド固定の一例としては、以下の記事をご覧ください。

VRChat備忘録⑥ ワールド固定のやり方(おにぎりを軌道に乗せよう)|こむぎ*|note
こんにちは、こむぎ* と申します。 VRChatの片隅を漂う無言勢の様な何かです。 今回は、以前の記事で書いた Parent Constraint の応用である、ワールド固定のやり方・原理について書いてみたいと思います。 以前の記事 ↓ はじめに 今回も、まず最低限の手順を書き、その後で解...

Position ConstraintとRotation Constraintでアバターの位置と回転方向のマイナス1倍に連動するように設定されています。

ここで注意すべきなのは、プレイヤーがある一定速度でワールド内を動いているとき、ワールド固定したオブジェクトはそのマイナス1倍のベクトルで移動している点です。

アバターが動いているときはワールド固定したオブジェクトも(アバターから見て)常に動いている状態になります。
ごく一般的な速さであれば、これらの計算は間に合うため問題が発生することは稀です。

複雑な動きをしたり、あまりにも速すぎる場合は計算が間に合わなくなることがあります。
その場合、間に合わなくなった分だけワールド固定したオブジェクトは動いてしまいます。

たとえば上記のブランコ(のアバター)の場合、最も左側の椅子はおよそ毎秒2回転しています。
このような複雑かつ高速な動きをすると遅延が発生し、ワールド固定したカメラが振動し正常に撮影できなくなります。
自分で撮影できなくなるため、こうしたものを外から撮影してもらいたいときは第三者に撮影してもらう必要があります。

ワールドに固定されたカメラが振動していることがあるのは、この計算が間に合わなくなっていることが大半です。

極端に複雑な動きをするとワールド固定したカメラが振動するのはVRChatの仕様です。このような場合は静止している他プレイヤーに写真を撮影してもらってください。

タイトルとURLをコピーしました