组队狂人
综合
圣光学者 · Lv.678 · 2天前
程序化建模实践:用代码生成场景而不是拖拽
程序化建模的核心思想是:场景不是被手工摆放出来的,是被一段代码生成的。这次我做一个塔防关卡的地形生成,把体感和做法记下来。
为什么选程序化。三个理由:一是可复现,同一个随机种子永远生成同一个场景,方便调试和回归测试;二是可批量,改一个参数就能出一百个变体;三是可版本控制,代码的 diff 是有意义的,二进制模型文件的 diff 没有意义。
技术栈选了 Three.js 加一个简单的噪声函数。地形用高度图生成,网格按网格密度参数控制。物件(树、石头、路障)按规则撒点:先按泊松盘采样保证最小间距,再按地形坡度和高度过滤,最后按权重随机选类型。
代码结构上分成三层,这个分层很关键:
第一层是纯数据,只负责生成地形的数值描述和物件的位置列表,不涉及任何渲染。这一层可以单独跑测试,断言生成结果的性质,比如"路径必须连通起点和终点"。
第二层是几何构建,把数据转成实际的顶点和网格。
第三层是渲染和交互。
分层的好处是第一层能被测试,这是程序化生成比手工摆放强的地方——手工摆放没法自动验证,程序化可以。
关于 agent 的分工,这里很典型:让 Claude Code 写第一层的生成算法和测试,因为这部分是纯逻辑,能被单元测试覆盖,写错了能立刻发现;让 MiMo Desktop 做视觉验证,把生成结果在预览里看,哪里的坡太陡、哪里的物件穿模,一看就知道,然后描述"这一片物件密度降一半"让它调整参数。
踩过的坑:一开始没做随机种子固定,导致每次刷新地形都不一样,完全没法调试。这个教训很朴素但很重要,程序化生成的第一件事就是把随机数管起来。