SDF 图形目录
视觉参考资料: 伊尼戈·奎莱斯 — 3D 距离函数
什么是SDF?
*带符号距离函数(Signed Distance Function)*会返回空间中任意一点到该几何体最近表面的距离。内部为 负数,表面上为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 | 弧(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
}
}
如果提供了不受支持的基元,服务将使用基于距原点距离的 球面近似评估来替代。