주요 콘텐츠로 건너뛰기
버전: 3.5.x

탐색

내비게이션 모듈을 사용하면 Inverse3 애플리케이션의 작업 공간을 이동시킬 수 있습니다. 이를 속도 제어 이동 ( rate-control locomotion ) 또는 “게임패드식 드리프트”라고도 부릅니다. 커서가 물리적 작업 공간의 가장자리에 있는 단단한 벽에 부딪히는 대신, 가상 중심으로부터의 거리가 작업 공간 전체를 미끄러지게 하는 속도로 매핑되는 유연한 영역으로 진입합니다. 커서가 더 멀리 밀수록 씬이 더 빠르게 스크롤됩니다.

주요(그리고 현재 유일한) 동작은 버블 내비게이션입니다. 버블 모양은 SDF 프리미티브를 사용하여 정의됩니다. 개념에 대해서는 ‘SDF란 무엇인가? ’를 참조하십시오.


버블 내비게이션 — 개념

장치의 장착 공간 내 중심점을 기준으로 가상 버블이 형성됩니다. 커서는 세 개의 동심원 구역을 통과하게 됩니다:

┌──────────────────────────────────────────┐
│ WALL ZONE │ cursor beyond outer shell
│ ┌────────────────────────────────────┐ │
│ │ VELOCITY ZONE │ │ soft shell → scene moves
│ │ ┌──────────────────────────────┐ │ │
│ │ │ DEAD ZONE (inside) │ │ │ no scene movement
│ │ │ │ │ │
│ │ │ ● centre │ │ │
│ │ │ │ │ │
│ │ └──────────────────────────────┘ │ │
│ │ bubble surface │ │
│ └────────────────────────────────────┘ │
│ outer boundary │
└──────────────────────────────────────────┘
구역커서 위치행동
사각지대거품 속이동 기능은 없습니다. 조명 감쇠가 적용됩니다. 장면을 자유롭게 조작할 수 있습니다.
속도 제한 구간표면과 외곽 경계 사이에서거리-속도 곡선을 따라 커서가 가리키는 방향으로 작업 영역이 이동합니다.
벽 구역외곽 경계를 지나단단한 스프링이 커서를 안쪽으로 밀어 넣으면 이동 속도가 포화 상태에 이릅니다.

세 구역 전체에 스프링-댐퍼 방식의 햅틱 힘이 가해지므로, 표면과 드리프트 쉘, 그리고 외벽을 모두 느낄 수 있습니다.


빠른 시작 — 버블 탐색 활성화

네비게이션은 영구적인 일회성 구성입니다. 한 번 전송하면 사용자가 명시적으로 중지하거나, 서비스를 다시 시작하거나, 세션을 종료할 때까지 활성 상태로 유지됩니다.

시작 (최소 — 기본 크기의 구형 버블)

{
"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 }
}
}

캡슐 — 길쭉한 복도

두 개의 종점 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매 초마다 커서 위치로 이동합니다텔레포트 방식의 이동 — 커서는 항상 거품의 중심에 위치합니다
{ "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_scale 횟수 velocity_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커서가 속도 영역에 다시 진입할 때 누적 속도를 0으로 초기화합니다
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
  • 모든 속도 값은 0 이상입니다

A POST 또는 configure.navigation 유효하지 않은 매개변수가 포함된 요청은 거부되며, invalid-value 이벤트가 발생하더라도 이전 구성은 계속 유효합니다.


이벤트

행사명해고된 시점
navigation-started기기에서 내비게이션이 활성화되었습니다
navigation-updated이미 활성화된 상태에서 탐색 설정이 업데이트됩니다
navigation-stopped탐색이 중지되었습니다(명시적 비활성화, DELETE, 또는 세션 종료 시)
invalid-value검증 과정에서 내비게이션 구성이 거부되었습니다

알려진 제한 사항

  • 비일정한 크기 + 회전: 둘 다 rotation_enabled 그리고 scale_enabled 이 기능이 켜져 있으면 속도 방향이 약간 부정확합니다. 스케일 축에는 회전 효과가 적용되지 않기 때문입니다.
  • 작업 영역 경계 전환: 부드러운 클램프백 전환은 초기화 시에만 실행됩니다. 정상적인 사용 중에 버블의 중심이 작업 영역 밖으로 벗어나면, 이완 효과 없이 클램프가 즉시 적용됩니다.
  • 기기별 크기 조정: 버블 크기(반지름, 영역 너비)는 기기의 물리적 배율에 따라 조정되지 않습니다. Minverse Inverse3 동일한 절대 크기를 Inverse3 , 기기마다 다르게 느껴질 수 있습니다.