주요 내용으로 이동

탐색

내비게이션 모듈을 사용하면 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 라우팅​

방법경로용도
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 와 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 시점의 표류 속도(미터/초);0.0 각 주기마다 커서에 직접 표시
shape모양{rounded_box, r=0.01, b=(0.05,0.02,0.03)}데드존(SDF) 형상
velocity_zone_widthfloat0.03속도 제어 하우징의 폭 (미터)
max_velocityfloat0.5최대 항해 속도 (미터/초)
velocity_ease문자열"quadratic_in"거리-속도 완화 함수
reset_velocity_on_entrybooltrue커서가 속도 구간에 다시 진입하면 누적 속도를 0으로 초기화합니다.
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충돌에 필요한 외력의 크기 (뉴턴)
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 와 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에 숨겨진 작업 공간 경계와 아바타 경계: 이 두 가지 기능은 3.6 버전을 위해 재설계 중이므로 JSON 모드에서는 모두 존재하지 않습니다. 상단의 ‘매개변수 참조’에 있는 설명을 참조하십시오.
  • 비균일 확대/축소 + 회전:그때 rotation_enabled 와 scale_enabled 두 기능을 동시에 사용하면 속도 방향에 약간의 오차가 발생합니다. 즉, 회전 효과가 확대/축소 축에는 적용되지 않습니다.
  • 기기 크기에 따라 크기 조정: 기포 크기(반지름, 영역 너비)는 기기의 물리적 확대/축소 비율에 따라 조정되지 않습니다.MInverse 와 Inverse3 는 동일한 절대 크기를 사용하므로, 두 사이트의 사용감이 다를 수 있습니다.