본문으로 바로 가기

SDF 도형 카탈로그

시각 참고 자료: 이니고 킬레스 — 3D 거리 함수

SDF란 무엇입니까?​

*부호가 있는 거리 함수(Signed Distance Function)*는 공간상의 임의의 점에서 도형의 가장 가까운 표면까지의 거리를 반환합니다. 내부에서는 음수, 표면 위에서는 0, 외부에서는 양수를 반환합니다. 이 거리는 힘 곡선의 입력값이 됩니다. 즉, 표면에 가까울수록 힘이 커지고, 멀어질수록 힘은 없어집니다.

SDF 도형은 내비게이션 모듈(버블 형태)에서 사용됩니다.

도형은 primitive와 parameters 다음과 같이 블록으로 정의됩니다:

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

기본 도형​

프리미티브매개변수비고
spherer (반지름)가장 단순한 도형
ellipsoida (vec3 형식의 반축 반지름)근사 SDF; 힘 계산에 정확함
boxb (vec3 형식의 반치수)축 정렬
rounded_boxb (반치수), r (모서리 반지름)전체 크기 = b + r
box_frameb (반치수), e (모서리 두께)상자의 와이어프레임 윤곽
planen (vec3 형식의 법선), h (n (방향 오프셋)무한 반공간; n은 정규화되어야 합니다

캡슐과 원기둥​

프리미티브매개변수비고
capsulea, b (vec3 형식의 끝점 위치), r (반지름)반구형 캡
capsule_verticalh (반 높이), r (반지름)Y축의 약어
capped_cylindera, b (vec3 형식의 축 끝점), r (반지름)평평한 끝 캡
capped_cylinder_verticalh (반 높이), r (반지름)Y축의 약어

토러스 계열​

프리미티브매개변수비고
torusr1 (주반지름), r2 (튜브 반지름)XZ 평면상의 도넛
capped_torussc (vec2 형식의 캡 방향), r1, r2호(arc); sc = (cos θ, sin θ)
linkle (반길), r1 (고리의 반지름), r2 (튜브 반지름)체인 링크 형태

원뿔​

프리미티브매개변수비고
conec (vec2 형식의 각도 (sin α, cos α)), h (높이)꼭짓점이 잘린 무한 원뿔
capped_conea, b (vec3 형식의 끝점), r1 (바닥 반지름), r2 (윗면의 반지름)절두체
rounded_conea, b (vec3 형식의 끝점), r1, r2구형 캡이 달린 절두체
solid_anglec (vec2 형식의 각도), r (반지름)원뿔로 잘린 구

특수 도형​

프리미티브매개변수비고
vesica_revolveda, b (vec3 형식의 축), w (폭)렌즈 형태
rhombusla, lb (대각선), h (압출 반높이), r (반올림)마름모 단면
pyramidh (높이)정사각형 밑면
octahedronr (내접 반지름)정팔면체
hexagonal_prismr (외접 반지름), h (반 높이)Y축 방향
triangular_prismw (반폭), h (반 높이)Z축 방향
매개변수 유형

스칼라 매개변수(r, h, e 등)은 일반적인 숫자입니다. 벡터 매개변수(a, b, n)는 객체입니다: { "x": 0.0, "y": 0.0, "z": 0.0 }. Vec2 매개변수(c, sc)는 객체입니다: { "x": 0.707, "y": 0.707 }.

JSON 예시​

구:

{ "primitive": "sphere", "parameters": { "r": 0.05 } }

타원체 (X/Z 방향으로 더 넓음):

{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }

상자:

{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }

둥근 상자:

{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }

캡슐:

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

평면 (+X 방향 경계):

{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }

토러스:

{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }

캡이 부착된 원뿔 (절두체):

{
"primitive": "capped_cone",
"parameters": {
"a": { "x": 0.0, "y": -0.05, "z": 0.0 },
"b": { "x": 0.0, "y": 0.05, "z": 0.0 },
"r1": 0.04, "r2": 0.01
}
}

지원되지 않는 프리미티브가 제공되면, 서비스는 원점으로부터의 거리를 기반으로 한 구형 유사도 평가로 대체합니다.