본문으로 이동

탐색

‘내비게이션’ 모듈을 사용하면 커서 Inverse3 가 애플리케이션의 작업 공간을 이동할 수 있게 해줍니다. — 이를 ‘속도 제어 이동’ 또는 ‘게임패드 방식의 드리프트’라고도 부릅니다. 물리적 작업 공간의 경계에 있는 단단한 벽에 부딪히는 대신, 커서는 유연한 쉘 안으로 들어가며, 가상 중심점으로부터의 거리에 따라 속도가 결정되어 작업 공간 전체가 미끄러지듯 이동합니다. 커서를 멀리 밀수록 장면이 더 빠르게 스크롤됩니다.

주요 기능(그리고 현재 유일한 기능)은 버블 탐색입니다. 버블의 모양은 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 경로​

방법Chemin역할
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 } }
}
}

캡슐 — 길게 뻗은 협곡​

두 개의 종단점 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 네 개의 영역으로 구성된 — position, relative, follow, speed — 이는 다음과 같이 구성된 기존의 평면 배치를 대체하는 것으로, center, center_enabled, center_mode et center_drift_speed.

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

센터의 앵커리지​

position et relative 활성화 시 중심점의 초기 위치를 제어합니다:

relative의미론 position
true (기본값)position 는 커서와의 편차 — 초기 중심은 cursor + position. 기본값을 사용하면 (0, 0, 0), 거품이 커서 위치에 정확히 나타납니다.
falseposition 는 응용 공간 내의 절대점 — 입력 시에는 마운트 공간으로 변환되고, 출력 시에는 다시 애플리케이션 공간으로 변환되므로, 왕복 처리 후의 값들이 일치하게 됩니다.

중심점의 후속 이동​

follow et speed 버블이 활성화된 후 매 사이클마다 동작을 제어합니다:

followspeed행동이전 등가어
false (기본값)무시했다중심점은 초기 위치에 그대로 머무릅니다 — 고정 중심점.center_mode: "fixed"
true> 0센터는 슬라이더 쪽으로 다음과 같은 속도로 이동합니다. speed (m/s) 커서가 그 범위 내에 있는 동안.center_mode: "auto_follow" (avec center_drift_speed)
true0.0센터는 매 사이클마다 커서 위치에 고정됩니다 — 순간이동 효과.center_mode: "track_cursor"
버전 3.5에서 기본값이 변경되었습니다.

센터의 기본 동작은 이제 다음과 같습니다. fixe (follow = false). 이전 버전들은 기본 커서로 전환되었는데 (auto_follow). 설정하십시오 center.follow = true 이전 드리프트 동작을 복원하려면, 다음을 조정하십시오. center.speed 이전 값과 일치하도록 de center_drift_speed.

Lorsque follow = true 커서가 바깥쪽 경계를 넘어가면, 중심은 값이 무엇이든 상관없이 커서를 따라갑니다. speed, 그 주위에 거품을 유지하고 커서가 빠져나가지 못하게 하기 위해서입니다.


충돌에 대한 대응​

거품은 커서에 가해지는 외부 힘 중 허용치를 초과하는 힘에 반응합니다. collision_detection.force_threshold :

  • 속도 제한 구역 확대된다 일시적으로 (~까지 collision_detection.inflate_ratio fois velocity_zone_width) 사용자가 장애물을 피할 수 있는 여지를 더 많이 확보할 수 있도록 하기 위해서입니다.
  • Lorsque collision_detection.enabled vaut 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.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 버전의 숨겨진 챔피언들

JSON 3.5 스키마에서는 두 가지 기능 그룹이 제외되었으며, 해당 기능들의 구현은 3.6 버전을 위해 재구성되고 있습니다:

  • 아바타의 국경 점령 : 들판 avatar_boundary_enabled, avatar_boundary et avatar_boundary_hysteresis.
  • 작업 영역의 경계 설정 : 들판 workspace_bounded, workspace_transition_speed et workspace_transition_ease.

틱 코드는 여전히 기본값으로 컴파일되고 실행되지만, 클라이언트는 HTTP나 WebSocket을 통해 해당 필드를 읽거나 쓸 수 없습니다. 3.6 버전에서는 아바타의 경계가 다음과 같은 형태로 다시 등장할 예정입니다. bounds 1단계로, ‘버블’ 객체와 동일한 수준이며, 배치 변환이 완전히 적용된 상태입니다. 중심 지그 분석이 완료되면 작업 영역의 경계가 다시 설정됩니다.

검증 규칙​

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

Un POST ou configure.navigation 무효한 매개변수가 포함된 요청은 거부되며, 이벤트가 invalid-value 이 메시지가 전송되면, 이전 구성은 계속 유효합니다.


행사​

행사명다음과 같은 경우 트리거됩니다.
navigation-started이 기기에서 탐색 기능이 활성화되어 있습니다.
navigation-updated이미 활성화된 상태인 탐색 구성이 업데이트됩니다.
navigation-stopped탐색이 중지되었습니다(명시적으로 비활성화됨, DELETE (또는 로그아웃)
invalid-value검증 과정에서 탐색 구성이 거부되었습니다.

알려진 한계​

  • 3.5 버전에서 작업 공간 구분 및 아바타 경계선이 숨겨져 있습니다. 이 두 가지 기능 그룹은 3.6 버전을 위해 개편 중인 관계로 JSON 스키마에서 제외되어 있습니다. 위의 ‘매개변수 참조’ 섹션에 있는 참고 사항을 참조하십시오.
  • 비균일한 크기 조정 + 회전 : lorsque rotation_enabled et scale_enabled 두 가지가 모두 활성화된 경우, 회전 효과가 크기 조정 축에 적용되지 않기 때문에 속도 방향이 약간 부정확해집니다.
  • 기기별 크기 조정: 버블의 크기(반지름, 영역 너비)는 기기의 물리적 배율에 따라 조정되지 않습니다. MInverse 와 Inverse3 는 동일한 절대 크기를 사용하므로, 각 사이트에서 버블 크기가 다르게 보일 수 있습니다.