SDF 形状目录
视觉参考资料: 伊尼戈·奎莱斯 — 3D 距离函数
什么是SDF?
带符号的距离函数会返回空间中任意一点到形状最近表面之间的距离。在表面内部为负值,在表面上为零,在表面外部为正值。该距离将作为力曲线的输入,距离表面越近,力越大;距离表面越远,力越趋近于零。
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 | 圆弧。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
}
}
如果指定了不受支持的基元,该服务将 回退到基于距原点距离的球形近似评估。