上一篇把 Phase 5.x 的勾提前打上了。现在回头看,那个勾打得有点早。

那时候的云只能说能跑:一层 FBM 噪声铺在水平 slab 上,远看像云,近看像棉花糖。我心里其实清楚这事儿没完,但文章里已经写完了,就先那么放着。

最近一个月,晚上娃睡了之后,我又把云翻出来重搞了一轮。现在的效果长这样:

云层之中

这张图是相机停在云层中间拍的。上半部分黑乎乎的,下面是蓬松的云。说实话,这画面本身算不算好看我也说不好,但它至少说明一件事:云终于有点体积了。

云能调成现在这样,我大概走了三轮,前两轮都不太顺。

第一轮:AI 的方案

这一轮最开始,我让 AI 看现在的云效果,让它给优化方案。

它给了好几条:改噪声、改密度模型、改光照、改步长。看起来都有道理,我就让它顺着往下做。结果改着改着,发现越改越坏。云的形状开始变形,边缘变硬,有时候直接变成一团灰雾。

但 AI 每一步都觉得自己是对的。它会告诉我这一步优化了什么、解决了什么问题、测试有没有通过。我看着那些"已完成"的任务,心里却越来越没底。

在这里卡了很久。每天打开 launcher,看一张比昨天更怪的截图,然后说"再往回退一点"。特别没劲。

后来我才反应过来,问题不是 AI 没做事,是它自己设计的方案就有问题。但它不会质疑自己的方案,只会沿着方案一条路走到黑。

第二轮:参考项目多了,测试绿了但图不对

后来我换了个思路。

我找了几个参考项目给 AI,让它从里面提取可以提升的点,再合成一个方案。同时我要求它走 TDD,每个功能都要有测试,还要截图验证。

AI 很认真地写了一份完整的测试方案。噪声生成有单元测试,密度采样有单元测试,光照计算也有单元测试。跑起来一片绿,看起来很专业。

但截图一出来,还是不对。

问题出在哪?单一测试只能看看噪声贴图本身,尺寸、数值范围对不对。但它没法告诉我这一轮到底做对了还是做错了——贴图又没直接变成云,贴图对了云也可能还是错的。拿这种中间结果来验收,其实说不太过去。

还有一些改动不会立刻在场景里体现出来,AI 做的时候以为自己对了,实际上已经走偏了。

我意识到:对云这种视觉效果,中间结果的测试验证不了最终效果。 单元测试通过不代表画面能看。

于是我给它加了一条硬规则:每一个大任务拆分,最终必须在场景截图里能看出来。 不要跟我说噪声贴图生成成功了,我要看场景里的云有没有变化。

第三轮:只盯一个项目

第二轮虽然找到问题,但方案还是太杂。几个参考项目混在一起,AI 今天从 A 项目拿一个算法,明天从 B 项目抄一个参数,后天又觉得 C 项目的某个常量更好。方案越来越胖,效果却不稳定。

最后我干脆只选了一个项目,让 AI 照着做效果复刻,别的都不看。

这次快了很多,也准了很多。参考单一,AI 不会东拼西凑;目标明确,它知道最终要复刻成什么样。我每完成一个模块就跑场景截图,没效果不往下走。

大概一周多,云的效果就基本能看了。后面又修了几个 bug,比如相机飞到云层里云会消失的问题,但整体方向没再偏过。

地面视角的体积云

AI 做方案会有幻觉

这轮折腾下来,我最大的感受是:AI 的任务规划,还是需要人把控方向。

不是它不会规划。恰恰相反,它规划得特别完整,步骤清晰,测试齐全,看起来特别专业。但问题是,它会对自己的方案有点迷之自信:它会告诉你按这个设计会有很好的效果,实际做出来并不是那回事。

比如第一轮,它给的几条优化方案听起来都对。但组合在一起,云就崩了。它不会意识到是方案整体有问题,只会继续执行下一步。

第二轮更典型。它设计的测试方案验证的是噪声贴图本身——尺寸、数值范围对不对。但贴图对了不代表云的表现就对,它没法确定这一轮到底做对了还是做错了。可 AI 会觉得测试过了,任务就完成了。

所以我现在不太确定,单纯靠多 AI 讨论能不能讨论出好方案。如果几个 AI 都是同一种思路,讨论再多也只是互相印证。如果让它们互相挑毛病,也许有用,但我还没试过。

至少目前,在"实现体积云"这种效果导向的任务上,方案方向至少现在还得人来看着。 AI 可以填细节,但不能让它自己决定往哪走。

必须以场景效果为最终验收

体积云不是单一功能,它是一串步骤:生成噪声 → 采样密度 → 计算光照 → 和场景深度混合 → 输出颜色。中间任何一步错了,后面都会错。

如果验收点放在中间结果上,AI 会在一个错误的结果上继续做下一步。密度采样有问题,它就去调光照参数;光照调不过来,它就去改混合方式。错误像滚雪球,等发现的时候已经不知道从哪回退了。

第三轮能成,关键就是把验收点挪到了最后:场景截图。 噪声生成得对不对,看云的形状;光照调得好不好,看云的明暗;相交测试对不对,看相机在不同高度云还在不在。

这个验收标准必须人提前定好。AI 自己定的标准通常是"代码跑通了"、“测试通过了”,但对视觉效果来说,这不够。

场景截图验收

这种场景截图才是最终的验收依据。不是中间噪声贴图对不对,而是画面看起来对不对。

AI 遇到错误,习惯先调参

这轮我还发现一个惯性:AI 遇到错误,第一反应是调参数,而不是反思设计。

云的效果不对,它会建议改 coverage、改 absorption、改 wind speed、改 step count。这些建议有时候有用,但有时候根本就是缘木求鱼。问题可能出在 sphere-shell 相交逻辑上,可能出在噪声采样坐标上,但它不会主动往这个方向想。

它更像一个尽职的律师,客户说什么它就论证什么,哪怕客户的出发点已经错了。

代码里表现得更明显:架构设计有缺陷,AI 会用更多的 if/else、更多的参数、更多的特殊 case 去修补。最后补丁摞补丁,看起来能跑,稍微改一点就散架。

我也吃过这个亏。早期有个版本,云在地平线附近总有一道硬边。AI 调了两天参数都没解决,后来我手动看了一下 shader,发现是球形 UV 投影的接缝问题。改了那一行,效果立刻正常了。

所以我现在会故意卡一下:当 AI 连续三版调参都没明显改善时,我就不让它调参了,让它停下来重新检查设计本身。

下一步先把流程理顺

云本身做得差不多了,基本达到我能接受的状态。不是顶级画质,但作为 Phase 5.x 够用了。

但这次经历让我对 AI 协作有了新的认识。以前我觉得 AI 的瓶颈在代码能力,现在发现代码能力早不是瓶颈了。真正的瓶颈是:AI 能不能别在错的方向上越跑越远。

下一步我可能不会急着推进新功能。Phase 5 还有一些地方需要打磨,编辑器也还有不少工作要做。更重要的是,先把和 AI 协作的验收流程理顺。功能可以慢一点,但方向不能偏。


本文对应 AetherEngine 仓库:https://github.com/ruochenhua/AetherEngine