SDF 도형 카탈로그
시각 참고 자료: Inigo Quilez — 3D 거리 함수
SDF란 무엇입니까?
*부호 있는 거리 함수(Signed Distance Function)*는 공간상의 임의의 점에서 도형의 가장 가까운 표면까지의 거리를 반환합니다. 내부는 음수, 표면 위는 0, 외부는 양수입니다. 이 거리는 힘 곡선의 입력이 됩니다. 즉 표면에 가까울수록 힘이 커지고, 멀어질수록 힘은 없습니다.
SDF 도형은 Navigation 모듈(버블 형태)에서 사용됩니다.
도형은 primitive와 parameters 블록으로 정의됩니다:
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
기본 도형
| 프리미티브 | 파라미터 | 비고 |
|---|---|---|
sphere | r (반지름) | 가장 단순한 도형 |
ellipsoid | a (vec3 형태의 반축 반지름) | 근사 SDF; 힘 계산에 정확함 |
box | b (vec3 형태의 반치수) | 축 정렬 |
rounded_box | b (반치수), r (모서리 반지름) | 전체 크기 = b + r |
box_frame | b (반치수), e (모서리 두께) | 상자의 와이어프레임 윤곽 |
plane | n (vec3 형태의 법선), h (n 방향 오프셋) | 무한 반공간; n은 정규화되어야 합니다 |
캡슐과 원기둥
| 프리미티브 | 파라미터 | 비고 |
|---|---|---|
capsule | a, b (vec3 형태의 끝점 위치), r (반지름) | 반구형 캡 |
capsule_vertical | h (반높이), r (반지름) | Y축 축약형 |
capped_cylinder | a, b (vec3 형태의 축 끝점), r (반지름) | 평평한 끝 캡 |
capped_cylinder_vertical | h (반높이), r (반지름) | Y축 축약형 |
토러스 계열
| 프리미티브 | 파라미터 | 비고 |
|---|---|---|
torus | r1 (주반지름), r2 (튜브 반지름) | XZ 평면상의 도넛 |
capped_torus | sc (vec2 형태의 캡 방향), r1, r2 | 호(arc); sc = (cos θ, sin θ) |
link | le (반길이), r1 (고리 반지름), r2 (튜브 반지름) | 체인 링크 형태 |
원뿔
| 프리미티브 | 파라미터 | 비고 |
|---|---|---|
cone | c (vec2 형태의 각도 (sin α, cos α)), h (높이) | 꼭짓점이 잘린 무한 원뿔 |
capped_cone | a, b (vec3 형태의 끝점), r1 (밑면 반지름), r2 (윗면 반지름) | 절두체 |
rounded_cone | a, b (vec3 형태의 끝점), r1, r2 | 구형 캡이 있는 절두체 |
solid_angle | c (vec2 형태의 각도), r (반지름) | 원뿔로 잘린 구 |
특수 도형
| 프리미티브 | 파라미터 | 비고 |
|---|---|---|
vesica_revolved | a, b (vec3 형태의 축), w (폭) | 렌즈 형태 |
rhombus | la, lb (반대각선), h (압출 반높이), r (둥글림) | 마름모 단면 |
pyramid | h (높이) | 정사각형 밑면 |
octahedron | r (내접 반지름) | 정팔면체 |
hexagonal_prism | r (외접 반지름), h (반높이) | Y축 방향 |
triangular_prism | w (반폭), 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
}
}
지원되지 않는 프리미티브가 제공되면, 서비스는 원점으로부터의 거리를 기반으로 한 구형 유사 평가로 대체합니다.