本文へスキップ
バージョン: 3.5.x

ナビゲーション

ナビゲーションモジュールを使用すると、Inverse3 でアプリケーションの ワークスペースを移動させることができます。これは、レート制御移動や「ゲームパッドのようなドリフト」と呼ばれることもあります。 カーソルが物理的なワークスペースの端にある固い壁にぶつかる代わりに、 柔らかいシェルに入り、仮想的な中心からの距離が ワークスペース全体をスライドさせる速度に変換されます。カーソルが押し込む距離が長ければ長いほど、 シーンのスクロール速度は速くなります。

主な(そして現時点では唯一の)動作は、バブルナビゲーションです。バブルの 形状はSDFプリミティブを使用して定義されます。その概念については、 「SDFとは?」を参照してください。


バブルナビゲーション — コンセプト

デバイスのマウント空間内の中心点を基点として、仮想的なバブルが形成されます。 カーソルは、3つの同心円状のゾーンを通過します:

┌──────────────────────────────────────────┐
│ WALL ZONE │ cursor beyond outer shell
│ ┌────────────────────────────────────┐ │
│ │ VELOCITY ZONE │ │ soft shell → scene moves
│ │ ┌──────────────────────────────┐ │ │
│ │ │ DEAD ZONE (inside) │ │ │ no scene movement
│ │ │ │ │ │
│ │ │ ● centre │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────┘ │ │
│ │ bubble surface │ │
│ └────────────────────────────────────┘ │
│ outer boundary │
└──────────────────────────────────────────┘
ゾーンカーソルの位置行動
デッドゾーンバブルの中ナビゲーションなし。光の減衰あり。シーンを自由に操作できます。
速度制限区域表面と外縁の間「距離→速度」カーブは、ワークスペースをカーソルの向きに移動させます。
壁面エリア外縁を越えて硬いバネがカーソルを押し戻し、移動速度が頭打ちになる。

3つのゾーンすべてにスプリングダンパー式の触覚力が加わり、 表面、ドリフトシェル、そして外壁の感触が伝わってきます。


クイックスタート — バブルナビゲーションを有効にする

ナビゲーションは永続的なワンショット設定です。一度送信すれば、明示的に停止するか、サービスを再起動するか、セッションを終了するまで有効なままになります。

開始(最小 — デフォルトの角丸ボックス型バブル)

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": { "mode": "bubble" }
}
}
]
}

ストップ

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": { "mode": "disabled" }
}
}
]
}

その他のHTTPルート

方法パス目的
GET/{type}/{id}/config/navigation?session=<expr>現在のナビゲーション設定と状態
POST/{type}/{id}/config/navigation?session=<expr>ナビゲーションを開始または更新する
DELETE/{type}/{id}/config/navigation?session=<expr>ナビゲーションを停止

バブル形状カタログ

バブルのデッドゾーンは、符号付き距離関数(SDF)の形状で定義されます。 形状によってナビゲーションの感触が異なります。例えば、丸みを帯びた箱型(デフォルト)は 快適な長方形の休息ゾーンとなり、球体は等方性のドリフトを、 楕円体は特定の軸を優先し、カプセル型は通路に適しています。

角丸ボックス(デフォルト)

デフォルトのデッドゾーンは、幅が深くよりわずかに高い平らな形状となっており、 Inverse3 MInverseの両方で快適に感じられるよう調整されています:

{
"shape": {
"primitive": "rounded_box",
"parameters": { "b": { "x": 0.05, "y": 0.02, "z": 0.03 }, "r": 0.01 }
}
}

球体 — 等方性ドリフト

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

楕円体 — Y軸方向よりもX/Z軸方向の方が幅が広い

水平方向のドリフトを垂直方向よりも緩やかに感じさせたい場合に使用します:

{
"shape": {
"primitive": "ellipsoid",
"parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } }
}
}

カプセル — 細長い廊下

2つの終点 a/b さらに半径 r:

{
"shape": {
"primitive": "capsule",
"parameters": {
"a": { "x": 0.0, "y": -0.03, "z": 0.0 },
"b": { "x": 0.0, "y": 0.03, "z": 0.0 },
"r": 0.04
}
}
}

サイズ調整や動きの感覚を反映した完全な例:

{
"inverse3": [
{
"device_id": "04C3",
"configure": {
"navigation": {
"mode": "bubble",
"bubble": {
"shape": {
"primitive": "ellipsoid",
"parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } }
},
"velocity_zone_width": 0.025,
"max_velocity": 1.0,
"velocity_ease": "quadratic_in"
}
}
}
}
]
}

速度曲線

速度ゾーンの距離は、ワークスペースの速度に変換される前に、イージングカーブを通じてマッピングされます。ユーザーがシェルをさらに押し込むにつれて、シーンがどのように加速するかを想定して、適切なイージングを選択してください。

velocity_ease感じる使用時期
linear一定勾配予想通り、良いデフォルト
quadratic_in出だしはゆっくり、後半はペースを上げる地表付近での高精度、長ストロークでの高速動作
cubic_inスタートが非常に遅かった非常に正確で、ストロークが長く、徐々に加速する
sine_out滑らかで速いスタートを切り、外側付近でペースが横ばいになるレスポンシブ、大文字は控えめに
quadratic_out発進が速く、長距離走行も快適軽快な加速、快適なクルージング
{ "velocity_ease": "quadratic_in", "max_velocity": 1.5 }

センターの挙動

バブルの中心は、入れ子構造によって構成されています center 4つのフィールドを持つ オブジェクト — position, relative, follow, speed — 従来のフラットな レイアウトに代わって center, center_enabled, center_modeそして center_drift_speed.

{
"center": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"relative": true,
"follow": false,
"speed": 0.02
}
}

中心が固定されている場所

position そして relative 起動時の初期中心位置を制御する:

relative「~の語義」 position
true (既定値)positionカーソルからのオフセット — 最初の中心は cursor + position. デフォルトでは (0, 0, 0), バブルはカーソルの位置に正確に生成されます。
falseposition座標空間における絶対座標 — 入力時にマウント領域に変換され、出力時に再びアプリケーション領域に変換されるため、往復の値が一致します。

その後、センターがどのように動くか

follow そして speed バブルがアクティブになった後のティックごとの動作を制御する:

followspeed行動以前の同等品
false (既定値)無視された中心は初期化された位置に固定されます —固定中心center_mode: "fixed"
true> 0カーソル位置に向かって中心が移動します speed カーソルが中にある間、m/s。center_mode: "auto_follow" (~とともに) center_drift_speed)
true0.0カーソルの位置に毎フレーム瞬時に移動する —テレポートのような感覚center_mode: "track_cursor"
バージョン3.5でデフォルト設定が変更されました

デフォルトのセンター配置の動作は、現在 修正済み (follow = false). 以前のバージョンでは デフォルトでカーソルに向かって移動していました(auto_follow). 設定 center.follow = true 以前のドリフト動作を復元し、調整する center.speed 以前の値に合わせるために center_drift_speed.

いつ follow = true そしてカーソルが外側の境界を越えて進むと、中心は カーソルの位置に関係なく追従する speed、その周囲にバブルを維持し、 カーソルが外へ飛び出さないようにするためです。


衝突時の挙動

バブルは、外部からのカーソルによる力が collision_detection.force_threshold:

  • 一時的な速度制限区域 膨らむ (最大 collision_detection.inflate_ratiovelocity_zone_width) これにより、ユーザーが障害物を回避するための余裕が生まれます。
  • いつ collision_detection.enabledtrue (デフォルト設定では)、バブルの中心は 衝突力の方向へ移動しないため、 ユーザーがワークスペースを硬い壁にドラッグしてしまうのを防ぎます。

衝突検出の用途 ヒステリシス しきい値付近でのちらつきを防ぐには: 衝突が有効になると、それが有効な状態は |ext_force| …を下回る 製品 collision_detection.force_threshold × collision_detection.exit_ratio. 下げる exit_ratio ヒステリシス帯を広げる(衝突の粘着性を高める)には、 これを 1.0 ヒステリシスを無効にし、単一のしきい値を使用する。

{
"collision_detection": {
"enabled": true,
"force_threshold": 0.5,
"inflate_ratio": 2.0,
"exit_ratio": 0.7
}
}

パラメータリファレンス

最もよくチューニングされている

パラメータデフォルト説明
shape{rounded_box, r=0.01, b=(0.05,0.02,0.03)}デッドゾーンを定義するSDF形状
velocity_zone_width0.03 m速度制御シェルの厚さ
max_velocity0.5 分/秒最大航行速度
velocity_ease"quadratic_in"距離→速度のイージングカーブ
center.followfalseセンターがカーソルを追跡するかどうか
center.speed0.02 分/秒ドリフト率は、 follow = true

パラメータ一覧

フィールドタイプデフォルト説明
center.positionvec3(0, 0, 0)初期位置 — カーソルのオフセット値 relative = true、アプリの空間上の絶対的な位置が false
center.relativebooltruetrue: position カーソルからのオフセットです。 false: 絶対的なアプリ領域の座標を、境界でのマウント領域の座標に変換したもの
center.followboolfalsefalse: 中心は初期位置に固定されます。 true: 中央にカーソルを合わせる
center.speedfloat0.02(時)のドリフト速度(m/s) follow = true; 0.0 毎ティック、カーソル位置にスナップする
shape形状{rounded_box, r=0.01, b=(0.05,0.02,0.03)}デッドゾーンSDF形状
velocity_zone_widthfloat0.03流量制御シェルの幅(m)
max_velocityfloat0.5最大航行速度(m/s)
velocity_easeストリング"quadratic_in"距離 → 速度のイージング
reset_velocity_on_entrybooltrueカーソルが速度ゾーンに再進入した際、累積速度をリセットする
bump_widthfloat0.005表面の凹凸(m)
bump_stiffnessfloat200.0表面の凹凸によるばね定数
spring_innerfloat0.0バブルセンターの春
spring_surfacefloat10.0地表の春
spring_outerfloat15.0外縁の春
wall_stiffnessfloat700.0外側の境界を越えて硬い壁に跳ね返る
damping_innerfloat0.1中央での減衰
damping_surfacefloat4.0表面での減衰
damping_outerfloat7.0外縁部での減衰
rotation_enabledboolfalseワークスペースの回転をナビゲーションの方向に適用する
scale_enabledboolfalseワークスペースのスケールをナビゲーション速度に適用する
collision_detection.enabledbooltrue衝突方向への移動をブロックする
collision_detection.force_thresholdfloat1.0衝突に設定する外力の大きさ(N)
collision_detection.inflate_ratiofloat2.0衝突時の速度ゾーン幅の倍率(1.0以上でなければならない)
collision_detection.exit_ratiofloat0.7ヒステリシス比 — 衝突状態を維持する時間 |ext_force| < force_threshold × exit_ratio. 範囲 (0, 1]; 1.0 ヒステリシスを無効にする
3.5で非表示になっているフィールド

3.5のJSONスキーマからは2つのフィーチャーグループが除外されていますが、 その実装は3.6向けに再構成されています:

  • アバター境界のクランプ: フィールド avatar_boundary_enabled, avatar_boundaryそして avatar_boundary_hysteresis.
  • ワークスペースの境界: フィールド workspace_bounded, workspace_transition_speedそして workspace_transition_ease.

デフォルト設定では、ティックコードはコンパイルおよび実行されますが、クライアントはHTTPやWebSocket経由でそれらのフィールドを読み書きすることはできません。バージョン3.6では、アバター境界はトップレベルとして返されます。 bounds バブルオブジェクトのピアで、完全な配置 トランスフォームが適用されたもの。ワークスペースのバウンディングは、センター・ジッターの調査が 完了次第、返されます。

検証ルール

  • velocity_zone_width > 0
  • 0 ≤ bump_width < velocity_zone_width
  • max_velocity > 0
  • bump_stiffness ≥ 0
  • spring_inner ≥ 0 そして spring_inner ≤ spring_surface ≤ spring_outer
  • wall_stiffness ≥ 0
  • damping_inner ≥ 0 そして damping_inner ≤ damping_surface ≤ damping_outer
  • collision_detection.force_threshold > 0
  • collision_detection.inflate_ratio ≥ 1.0
  • collision_detection.exit_ratio(0, 1]
  • center.speed ≥ 0

A POST または configure.navigation 無効なパラメータを含むリクエストは拒否され、 invalid-value イベントが発生しても、以前の設定は有効なままです。


イベント

イベント名いつ解雇されたのか
navigation-startedデバイスでナビゲーションが有効になっています
navigation-updatedナビゲーションの設定が、すでにアクティブな状態で更新されます
navigation-stoppedナビゲーションが停止しています(明示的な無効化、 DELETE、またはセッション終了時)
invalid-valueナビゲーションの設定が検証で拒否されました

既知の制限事項

  • バージョン3.5ではワークスペースの境界とアバターの境界が非表示になっています。これらの機能グループはJSONスキーマから削除されていますが、バージョン3.6では再構成されています。詳細は、上記の「パラメータのリファレンス」の注記を参照してください。
  • 不均一な拡大・縮小と回転: 両方が rotation_enabled そして scale_enabled がオンになっている場合、速度の方向がわずかに不正確になります。これは、座標軸に回転が適用されていないためです。
  • デバイスごとのサイズ調整:バブルのサイズ(半径、ゾーン幅)は、デバイスの物理的なスケール係数に応じて調整されません。MInverse Inverse3 同じ絶対サイズInverse3 、デバイスによって表示が異なって見える場合があります。