본문으로 건너뛰기

SDF 형상 카탈로그

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

SDF란 무엇인가요?​

부호가 있는 거리 함수는공간 내의 임의의 점에서 형상의 가장 가까운 표면까지의 거리를 반환합니다. 내부에서는음수, 표면 위에서는0, 외부에서는양수가됩니다. 이 거리는 힘 곡선에 입력되며, 표면에 가까울수록 힘이 커지고, 멀어질수록 힘은 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원호.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
}
}

지원되지 않는 프리미티브가 지정된 경우, 서비스는 원점으로부터의 거리를 기반으로 한 구형에 가까운 평가 방식으로 대체됩니다.