SDF 형상 카탈로그
시각적 참고 자료: 이니고 킬레스 — 3D 거리 함수
SDF란 무엇인가요?
부호가 있는 거리 함수는공간 내의 임의의 점에서 형상의 가장 가까운 표면까지의 거리를 반환합니다. 내부에서는음수, 표면 위에서는0, 외부에서는양수가됩니다. 이 거리는 힘 곡선에 입력되며, 표면에 가까울수록 힘이 커지고, 멀어질수록 힘은 0이 됩니다.
SDF 형상은 내비게이션 모듈(버블 형상)에서 사용됩니다.
모양은 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 | 원호.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
}
}
지원되지 않는 프리미티브가 지정된 경우, 서비스는 원점으로부터의 거리를 기반으로 한 구형에 가까운 평가 방식으로 대체됩니다.