メインコンテンツへスキップ

ナビゲーション

ナビゲーションモジュールを使用すると、 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 }
}
}

楕球体――X/Z方向はY方向よりも幅が広い​

水平方向のドリフトに対するハンドルの反応が、垂直方向よりも緩い場合に使用します:

{
"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 アクティブ化時の初期中心位置を制御する:

relativeposition の意味
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 その際、気泡は次のように反応します:

  • 速度区会臨時膨張(最大で velocity_zone_width の collision_detection.inflate_ratio 倍)とし、ユーザーが障害物を回避する際に、より広い操作スペースを確保できるようにした。
  • 当 collision_detection.enabled 「為」 true(デフォルト値)の場合、バブルの中心は衝突力の方向への移動を拒否し、ユーザーが作業領域を硬い壁に引き込んでしまうのを防ぎます。

衝突検出にはヒステリシスしきい値付近での揺らぎを防ぐための仕組み:衝突が一度有効になると、それが有効な状態を維持し、 |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.02follow = true その時点でのドリフト速度(m/s);0.0 各周期をカーソルに直接表示する
shape形状{rounded_box, r=0.01, b=(0.05,0.02,0.03)}死区 SDF 形状
velocity_zone_widthfloat0.03速度制御用ハウジングの幅(メートル)
max_velocityfloat0.5最大航行速度(m/s)
velocity_easeストリング"quadratic_in"距離から速度への減速関数
reset_velocity_on_entrybooltrueカーソルが速度領域に再び入った際、累積速度をゼロにリセットする
bump_widthfloat0.005表面の触覚用突起の幅(メートル)
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 隠しフィールド

以下の 2 つの機能セットは、JSON モードのバージョン 3.5 では省略されていますが、その実装はバージョン 3.6 に向けて再設計が進められています:

  • アバター 境界クランプ:フィールド avatar_boundary_enabled、avatar_boundary 和 avatar_boundary_hysteresis。
  • ワークスペースの境界制約:フィールド workspace_bounded、workspace_transition_speed 和 workspace_transition_ease。

tick コードは引き続きデフォルト値でコンパイルおよび実行されますが、クライアントは 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

無効な引数を使用した POST あるいは configure.navigation リクエストは拒否され、以下がトリガーされます。 invalid-value 事件;以前の設定は引き続き有効です。


事件​

事件名トリガーのタイミング
navigation-startedデバイス上のナビゲーションが有効になりました
navigation-updatedナビゲーションが有効な状態にあるとき、その設定が更新されます
navigation-stoppedナビゲーションが停止されました(明示的に無効化、DELETE (リクエストまたはセッションの終了)
invalid-valueナビゲーションの設定が検証に合格せず、拒否されました

既知の制限事項​

  • 3.5 ワークスペース境界とアバター境界の非表示:これら2つの機能は、バージョン3.6に向けて再設計中であるため、JSONモードには存在しません。詳細は、前述の「パラメータリファレンス」の説明を参照してください。
  • 不均一な拡大縮小 + 回転:当 rotation_enabled と scale_enabled 同時に有効にすると、速度の方向にわずかなずれが生じます――回転は拡大縮小軸には適用されません。
  • デバイスのサイズに合わせて拡大・縮小:気泡のサイズ(半径、領域の幅)は、デバイスの物理的な拡大・縮小倍率に応じて変化しません。MInverse とInverse3 では同じ絶対サイズが使用されているため、両者の操作感が異なる場合があります。