本文へスキップ
バージョン: 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)形状によって定義されます。 形状が異なれば、ナビゲーションの感触も変わります。等方性のドリフトには球体、 特定の軸を優先させるには楕円体や箱型、通路にはカプセル型が用いられます。

球体(デフォルト)

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

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

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

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

角が丸いボックス — 角が丸い長方形のデッドゾーン

{
"shape": {
"primitive": "rounded_box",
"parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 }, "r": 0.008 }
}
}

カプセル — 細長い廊下

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",
"workspace_bounded": true
}
}
}
}
]
}

速度曲線

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

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

中心モード

バブルの中心は、カーソルを追従させたり、カーソルにスナップさせたり、座標空間内で固定させたりすることができます。

center_mode行動ユースケース
auto_follow (既定値)カーソルの位置に向かってゆっくりと漂いながら center_drift_speed カーソルがバブルの中にあるとき汎用ナビゲーション — ボタンを押すたびに、中央がカーソルの下で「元の位置に戻る」
fixedセンターは自動的に移動することはありません特定の基準点を中心としたアンカーナビゲーション
track_cursorセンターは1ティックごとにカーソルにスナップしますテレポート式の移動 — カーソルは常にバブルの中心に位置します
{ "center_mode": "fixed" }

どのモードでも、カーソルが外側の境界を越えてしまった場合、中心がカーソルを追跡し、 バブルをカーソルの周囲に保ち、カーソルが外へ飛び出さないようにします。


ワークスペースの境界

ほとんどのデバイスには、物理的な到達範囲に制限があります。 workspace_bounded が設定されている場合、 バブルの中心はデバイスの物理的な作業領域内に保持されるため、 その結果生じるナビゲーションによって、カーソルが到達可能な範囲外に追いやられることはありません。

{ "workspace_bounded": true }

初期位置が作業領域の外側にある場合、モジュールは時間をかけてそれを 作業領域内にゆっくりと戻します(workspace_transition_speed / workspace_transition_ease) スナップさせずに — 起動時のハプティックによる急激な動きを回避します。


アバターの境界

いつ avatar_boundary_enabled が設定されると、最終的な アバターの世界座標 (ワークスペース+カーソル)が、任意のSDF形状の内側に固定されます。 軸ごとの固定処理をスクリプトで記述することなく、 ユーザーを部屋、廊下、車両のコックピットなどの内部に収めるのに便利です。

{
"avatar_boundary_enabled": true,
"avatar_boundary": {
"primitive": "box",
"parameters": { "b": { "x": 5.0, "y": 3.0, "z": 5.0 } }
}
}

について avatar_boundary このシェイプは、バブルシェイプと同じプリミティブを受け付けます (sphere, ellipsoid, rounded_box, capsule, box、……)。


衝突時の挙動

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

  • 一時的な速度制限区域 膨らむ (最大 collision_inflate_scalevelocity_zone_width) これにより、ユーザーが障害物の周りを より自由に動き回れるようになります。
  • ~とともに stop_at_collision, バブルの中心は衝突力の方向へ 移動することを拒否するため、ユーザーがワークスペースを 硬い壁にぶつけてしまうのを防ぎます。
{ "stop_at_collision": true, "collision_threshold": 0.5, "collision_inflate_scale": 2.0 }

パラメータリファレンス

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

パラメータデフォルト説明
shape{sphere, r=0.05}デッドゾーンを定義するSDF形状
velocity_zone_width0.03 m速度制御シェルの厚さ
max_velocity1.0 分/秒最大航行速度
velocity_ease"linear"距離→速度のイージングカーブ
center_mode"auto_follow"センターがカーソルをどのように追跡するか
workspace_boundedfalseクランプの中心をデバイスの物理的な作業領域に合わせる

パラメータ一覧

フィールドタイプデフォルト説明
centervec3(0,0,0)マウント空間における初期バブルの中心
shape形状{sphere, r=0.05}デッドゾーンSDF形状
velocity_zone_widthfloat0.03流量制御シェルの幅(m)
max_velocityfloat1.0最大航行速度(m/s)
velocity_easeストリング"linear"距離→速度のイージング
reset_velocity_on_entrybooltrueカーソルが速度ゾーンに再進入した際、累積速度をリセットする
bump_widthfloat0.003表面の凹凸(m)
bump_stiffnessfloat500.0表面の凹凸によるばね定数
spring_innerfloat4.0バブルセンターの春
spring_surfacefloat7.0地表の春
spring_outerfloat12.0外縁の春
wall_stiffnessfloat700.0外側の境界を越えて硬い壁に跳ね返る
damping_innerfloat0.2中央での減衰
damping_surfacefloat0.7表面での減衰
damping_outerfloat5.0外縁部での減衰
rotation_enabledboolfalseワークスペースの回転をナビゲーションの方向に適用する
scale_enabledboolfalseワークスペースのスケールをナビゲーション速度に適用する
center_mode列挙型"auto_follow""auto_follow" / "fixed" / "track_cursor"
center_drift_speedfloat0.03ドリフト速度 auto_follow 速度(m/s)
workspace_boundedboolfalseバブルの中心をデバイスの作業領域に固定する
workspace_transition_speedfloat1.2初期クランプ遷移の速度
workspace_transition_easeストリング"quadratic_in_out"初期クランプ遷移の緩和
stop_at_collisionboolfalse衝突方向への移動をブロックする
collision_thresholdfloat0.001衝突を検知するための外力閾値(N)
collision_inflate_scalefloat2.0衝突時の速度ゾーン幅の乗数
avatar_boundary_enabledboolfalseアバター境界のクランプを有効にする
avatar_boundary形状{sphere, r=0.1}アバター位置の制約条件に対するSDF形状

検証ルール

  • velocity_zone_width > 0
  • 0 ≤ bump_width < velocity_zone_width
  • max_velocity > 0
  • spring_inner ≤ spring_surface ≤ spring_outer
  • damping_inner ≤ damping_surface ≤ damping_outer
  • collision_threshold > 0, collision_inflate_scale ≥ 1.0
  • すべての速度の値は非負である

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


イベント

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

既知の制限事項

  • 不均一な拡大・縮小と回転: 両方が rotation_enabled そして scale_enabled がオンになっている場合、速度の方向がわずかに不正確になります。これは、座標軸に回転が適用されていないためです。
  • ワークスペース境界での遷移:スムーズなクランプバック遷移は初期化時のみ実行されます。通常の使用中にバブルの中心がワークスペースの外へ逸脱した場合、クランプはイージングなしで即座にスナップします。
  • デバイスごとのサイズ調整:バブルのサイズ(半径、ゾーン幅)は、デバイスの物理的なスケール係数に応じて調整されません。Minverse Inverse3 同じ絶対サイズがInverse3 、デバイスによって表示が異なって見える場合があります。