본문으로 바로 가기

탐색

‘내비게이션’ 모듈을 사용하면 ‘ 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 │
└──────────────────────────────────────────┘
구역커서 위치행동
토트존거품 속이동 효과 없음. 부드러운 감쇠. 장면을 자유롭게 조작할 수 있습니다.
속도 제한 구역표면과 외곽선 사이‘거리 → 속도 곡선’은 작업 영역을 커서 방향으로 이동시킵니다.
Wandzone외부 국경을 넘어단단한 스프링이 커서를 풍선 안으로 밀어 넣으며, 이동 속도가 제한됩니다.

세 구역 모두에서 촉각적인 스프링-댐퍼 힘이 작용합니다. 표면, 드리프트 쉘, 그리고 외벽을 느낄 수 있습니다.


빠른 시작 – 버블 내비게이션 활성화​

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

시작 (최소 – 둥근 모서리의 직육면체를 갖춘 표준 블라제)​

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

종료​

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

기타 HTTP 경로​

방법PfadZweck
GET/{type}/{id}/config/navigation?session=<expr>현재 내비게이션 설정 + 상태
POST/{type}/{id}/config/navigation?session=<expr>탐색 시작 또는 새로 고침
DELETE/{type}/{id}/config/navigation?session=<expr>탐색 종료

블래저 형태 카탈로그​

버블의 사각지대는 부호 거리 함수(Signed Distance Function, 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_easeGefühl언제 사용하나요?
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" (mit center_drift_speed)
true0.0매 박자마다 중심점이 커서 위치로 이동합니다 – 마치 순간이동하는 듯한 느낌입니다.center_mode: "track_cursor"
버전 3.5에서 기본값이 변경되었습니다.

이제 중심점의 기본 동작은 다음과 같습니다. 축제 (follow = false). 이전 버전에서는 기본적으로 중심점이 커서 방향으로 이동하도록 되어 있었습니다 (auto_follow). Setzen Sie center.follow = true, 예전의 드리프트 동작을 복원하고, 다음을 조정하십시오. center.speed 이전 값인 center_drift_speed an.

Wenn follow = true 금색 영역에서 커서가 바깥쪽 경계를 넘어가면, 중심점은 다음 사항과 관계없이 커서를 따라갑니다. speed, 그래야 방울이 계속 그를 감싸고 커서가 빠져나가지 못하게 됩니다.


충돌 거동​

이 기포는 외부 커서 힘에 반응하여, collision_detection.force_threshold überschreiten:

  • 속도 제한 구역 확대된다 일시적으로 중단됨 (~ collision_detection.inflate_ratio-다음 분야의 velocity_zone_width), 장애물을 우회할 수 있는 여유를 더 확보할 수 있도록.
  • Wenn collision_detection.enabled auf 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커서가 속도 구간에 다시 진입할 때 누적 속도를 0으로 재설정합니다.
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 gilt. 영역 (0, 1]; 1.0 히스테리시스를 비활성화합니다
3.5에서 Felder가 숨김 처리됨

버전 3.5의 JSON 스키마에는 두 가지 함수 그룹이 포함되어 있지 않으며, 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

아인 POST 또는 configure.navigation 유효하지 않은 매개변수가 입력되면 거부되며, invalid-value-이벤트가 트리거되며, 이전 구성은 계속 유지됩니다.


이벤트​

이벤트 이름다음 조건이 충족될 때
navigation-started기기에서 내비게이션이 활성화됩니다
navigation-updated내비게이션 구성이 활성화된 상태에서 업데이트되고 있습니다.
navigation-stopped탐색이 종료됩니다 (명시적 비활성화, DELETE (또는 회의 종료 시)
invalid-value검증 결과 내비게이션 구성이 거부되었습니다.

알려진 제한 사항​

  • 3.5 버전에서 작업 영역 제한 및 아바타 경계가 숨겨져 있습니다. 이 두 기능 그룹은 JSON 스키마에 포함되어 있지 않으며, 3.6 버전에서 재구성될 예정입니다. 위의 ‘매개변수 참조’ 섹션에 있는 참고 사항을 참조하십시오.
  • 불균일한 크기 조정 + 회전: wenn rotation_enabled 그리고 scale_enabled 두 가지가 모두 활성화된 경우, 속도 방향이 약간 부정확해집니다. 즉, 회전이 크기 조정 축에 적용되지 않습니다.
  • 기기별 크기 조정: 버블 크기(반지름, 영역 너비)는 기기의 물리적 확대/축소 비율에 따라 조정되지 않습니다. MInverse 및 Inverse3 은 동일한 절대 크기를 사용하며, 이는 기기마다 다르게 느껴질 수 있습니다.