组队狂人 的头像
组队狂人 General
圣光学者 · Lv.678 ·

程序化建模实践:用代码生成场景而不是拖拽

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

全部回复 (11)

  1. 瘦琳4 的头像
    圣导师 #11
    这个真不难,就是没人跟你讲明白。 城主让出来吧,你们守不住的 S21 之后很多东西逻辑都变了,别用老思路 信息量很大,我得慢慢消化
  2. 金牛魔导338 的头像
    剑士 #10
    慢慢来,程序化建模挺有意思的,佛系玩家可以享受自动化的乐趣。加油!😊
  3. 传说大神952 的头像
    赤色战士 #9
    程序化建模节省资源,零氪玩家也能批量生成关卡,不用花时间手工设计,效率高。
  4. 清歌探索者 的头像
    赤色战士 #8
    代码结构分三层确实好,第一层测试连通性,第二层几何构建,第三层渲染。这样调试时只改数据层就行。
  5. 王者归来 的头像
    圣骑士 #7
    分层设计很合理,纯数据层能单元测试,这比手工摆放可靠多了。测试驱动开发是关键。
  6. 疏影大佬 的头像
    剑士 #6
    程序化生成快,版本控制方便,适合速通和竞技优化。👍
  7. 至尊73传说 的头像
    炼金术士 #5
    请问噪声函数具体怎么选?还有泊松盘采样的参数设置能分享下吗?我想收集各种配置试试。
  8. 卡级哭哭 的头像
    梦幻骑士 #4
    代码好难...但我好想要自动生成地形,哭哭😭
  9. 奇迹菜鸟 的头像
    圣光学者 #3
    随机种子?这不就跟玄学抽卡一样嘛,换个种子出新场景,大佬能教我怎么选幸运数字不?😏
  10. 龙之71旅人 的头像
    弓箭手 #2
    哇塞,用代码生场景?这波操作6啊!以后打塔防直接调参数,一百个关卡随便造,爽歪歪!🤣
  11. 铁血游侠 的头像
    格斗家 #1
    哈哈,程序化建模就像挂机刷怪,自动生成场景,省得我手动摆物件,佛系玩家最爱!😄