跳到主要内容

SDF 形状目录

可视化参考: Inigo Quilez — 3D Distance Functions

什么是 SDF?​

*有符号距离函数(SDF)*返回空间中任意一点到形状最近表面的距离——内部为负,表面上为零, 外部为正。该距离会作为力曲线的输入:离表面越近,力越大;离得越远,力越小,直至为零。

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

如果提供了不受支持的图元,服务会回退为 基于原点距离的类球形求值。