本节摘要:拓扑是细节的载体——同样的位移贴在 10×10 和 200×200 网格上完全是两种资产。本节实验覆盖密度控制(Divide/Remesh)、重采样(Resample)、平滑与锐化(Smooth/Peaks)与曲线成面(Sweep/Skin),落点是"形态语言"意识:网格结构本身就在表达风格。
复制 1.1 的 Grid+Mountain 三份,分别做:

| 节点 | 干什么 | 什么时候用 |
|---|---|---|
| Divide | 细分(可加三角/四边) | 需要更多点但保持原结构 |
| Remesh | 重建成均匀三角网 | 各向同性形变前(噪音位移、软体) |
| PolyReduce | 按比例减面 | 远景 LOD、轻量碰撞体 |
| Attribute Blur | 糊属性而不是点 | 平滑权重/掩码而不动形状 |
经验法则:要均匀位移就先 Remesh,要保持造型就 Divide,要省资源就 PolyReduce。
拓扑的另一半是"降维"——把面化成线再长回去。做一个栏杆实验:
float t = @curveu; // 曲线参数 0~1(Resample 后自动带) f@width = 0.08 * (1 - t) + 0.02; // 根粗梢细
Sweep 读 width 属性,管子自然收尖。@curveu 这类"沿元素的参数化坐标"是曲线操作的万能钥匙——栏杆、藤蔓、河流、道路都用它。
真实地貌不是一次成形,是"抬升 → 侵蚀 → 崩塌"的叠加。程序化上这意味着:每个形态阶段一个节点组,顺序即地质史。Mountain(抬升)→ 用噪声 mask 的 Smooth(差异风化)→ 后续第 4 章的 Erode(水力侵蚀)。中间每步都可以在 Spreadsheet/视口检查——回放地质史的能力,就是 1.2 节非破坏性的直接红利。
⚠️ 常见坑:为了细节把网格密度一步拉满再开始堆规则。密度是最后的决定——先用低密度把形态语言、规则顺序全部定稿,最后一口气细分。中途改规则时高密度网格每次重算都在烧时间。
💡 关键直觉:拓扑节点的选择本质是在选"规则的作用粒度"。Remesh 之后的位移才均匀;不对的网格上放对的规则,结果也是错的。
形状有了骨架,下一节解决"东西怎么落上去":散布与分布。
拓扑操纵的三个主力节点各管一种"网格语言",用同一只球做对拍实验最能建立直觉:PolyRemesh 重写三角拓扑(均匀但不保边)、Subdivide 精细分(保结构但加密原有拓扑)、Resample 只重写曲线(长度均匀化)。组合拳示例——把杂乱扫描线整理为等距折线再挤出:
// Resample 后的曲线按曲率自适应二次加密(基于属性驱动) float curv = abs(1 - dot(v@N, normalize(v@tangentu))); f@need = fit(curv, 0, ch("max_curv"), 0, 1); i@segments = max(2, int(f@need * chi("max_seg")));
把 @segments 连给 For-Each 循环内的 Resample Length,即得"直段省点、弯段加密"的曲线——拓扑操纵的目标从来不是"更密的网格",而是"与用途匹配的网格密度分布"。
[拓扑审计三问] 1. 这条边为何存在?(功能边/噪声边/插值残留) 2. 极点(>5边点)在哪, 星形是否可接受? 3. 循环边是否闭合, 变形时会不会绞死? 工具: Group 节点按 degenerate/共享边筛选 + PolyDoctor 结论: 程序化输出的拓扑 = 规则的化石记录, 审拓扑即审规则
关于拓扑质量还要建立一个重要预期:程序化生成的网格几乎永远不是"干净的"手拓扑,也不需要是。拓扑策略应跟随下游用途——渲染用途只需视觉正确(法线一致、无退化面),变形用途才需要循环边与极点管理,模拟用途则关心体积闭合。为下游不需要的拓扑洁癖付计算代价,是程序化项目里最常见的过度设计;反过来,把要蒙皮变形的资产直接用 Remesh 输出,则是欠设计。每个拓扑操作的 upstream 都该有一份"用途声明",这正是把拓扑决策写成审计三问的意义。
收束本节时再强调拓扑与后续章节的一个关键连接:第五章的动力学对拓扑高度敏感,同一碎块网格的三角化方式会显著改变解算稳定性(细长三角形是刚体解算器的天敌)。因此在为模拟准备几何时,PolyRemesh 的均匀三角化不是美观选项而是稳定性投资;解算翻车的案例里,相当比例的根因在拓扑而非物理参数。把"用途声明决定拓扑策略"再往前推一步:模拟级几何的拓扑,本身就是解算参数的一部分。