参数化曲面三角网格 · 设计全记录
项目概述
在 E3+ 参数化工作台中,从零搭建了一套可交互曲面三角网格系统:曲面形态、网格密度、内缩细分、抬升与侧面封合全部参数化,并在视口中实时驱动。
最终结构(5 个节点 / 3 个渲染层 / 9 个全局参数)
迭代历程
① 基础曲面三角网格
- 帧:
SurfaceDomain矩形(30×20m,视口可拖拽调整采样域) - 单元:代码节点按行列采样曲面 → 每个网格单元拆 2 个三角形
- 5 种曲面形态:波浪起伏 / 环形涟漪 / 扭转波面 / 马鞍面 / Perlin地形
- 参数:行数、列数、振幅、频率、扭转角、随机种子
② 纯线框化
去掉填充封面,输出独立闭合三角形线框——每个三角形都是三边闭环,相邻三角形共用边各画一次。
③ 三角形内缩细分
在每个三角形内部生成嵌套三角形:三条边各取滑动点 P = A + t·(B−A),三点连成独立闭合回路。t=0.5 即中点三角形。
④ 内缩层独立 + 渐变干扰
- 内缩三角形独立成组(可整体显隐、独立配色)
- t 值不再统一,改为随坐标线性渐变(先 X 后 Y 方向):
t = TMin + (TMax−TMin)·(坐标−min)/(max−min),形成经典的"干扰模式"渐变
⑤ 三维化:三角棱台
- 内缩层整体抬升 0.5m
- 外层三角形 ⇄ 抬升内缩三角形之间 Loft 封合侧面(3 侧面四边形 × 2 三角形)
- 每个网格单元变成完整的三维三角棱台:9216 个侧面三角形
关键技术发现
节点级参数(L4)修改不生效 —— 平台级快照问题
经过 5 项对照实验(面板修改 / lint 重编译 / project_get 同步 / API 推送 / 代码重编译),确认运行器执行的是陈旧参数快照,前端面板对代码节点参数的修改永远到不了执行端。
解决方案:全部参数迁移到项目级全局参数(L1),经 project_update 定义,代码用 Get<T>() 读取 —— 实测每次运行实时生效,前端面板修改立即可见。这是本项目最值钱的踩坑经验。
参数系统(项目属性面板)
| 分组 | 参数 | 说明 |
|---|---|---|
| 网格 | 行数 / 列数 | 三角网格密度 |
| 形态 | 曲面类型 / 振幅 / 频率 / 扭转角 / 随机种子 | 曲面形态控制 |
| 内缩渐变 | TMin / TMax | 内缩比例渐变范围 |
| 抬升 | RaiseHeight | 内缩层抬升高度 |
数据流(帧 → 变量 → 单元)
SurfaceDomain(帧) → 采样+外层(单元) → 导出Pts
↓ L2
InnerLayer 组 → InnerTriangles(t渐变+抬升) → 导出InnerPts
↓ L3(单一数据源,永远对齐)
LoftSides 侧面封合
核心设计原则:抬升数据单一来源(InnerTriangles 导出),渲染与 Loft 共用,杜绝错位。
最终效果
蓝色外层线框 + 橙色抬升内缩线框 + 紫色半透明侧面,三层独立显隐;TMin/TMax 反转即可得到喇叭口反向渐变;调高 RaiseHeight 得到高耸棱台,鳞片感十足。

