用 AI 写 shader 的边界
它能写出能跑的 shader,写不出好看的效果。这条界线具体在哪,我用三个月、四十多个片元着色器试出来了。
三个月里我用 AI 写了四十多个片元着色器。其中能直接用的有六个,剩下三十多个都在"能编译、能出图、但不好看"这个区间里。
这个比例不是模型不行。是我一开始对它的定位就错了。
它擅长的:翻译和铺路
我把一段 GLSL 贴给它,说"翻译成 Godot 的写法",它做得比我快十倍。坐标系约定、变量名、语法差异,这类机械工作它从不出错。
它也很擅长写样板:噪点函数、fbm 的默认参数、旋转矩阵、屏幕空间到 UV 的映射。这些东西网上有无数版本,它记得比准确。
还有一种我后来才发现的用法:让它给我的错误找方向。我写完一个溶解效果,边缘总是不对,把代码和截图一起发过去,问"你觉得问题在哪"。它列了五个可能,第三个是对的——我在 smoothstep 里把边界的两个参数写反了,这种低级错误我盯着看十分钟都看不出来。
它不擅长的:品味
这是全部的边界所在。
我让它做"液态金属的表面"。它给了我一屏噪声叠加,能跑,有金属反射,像一块被揉皱的锡纸。但它不知道液态金属好看的地方是大面的镜面高光和缓慢流动的拉伸,不是细碎的粗糙度。这个判断需要你见过、你也想要。
再比如,让它加"一点辉光"。它会给你一个标准的高斯模糊,参数都是安全值。看起来对,但缺了那股劲儿。后来我自己上手,把阈值压到 0.85、给辉光里混一点色相差、再加一行帧间噪点抖动,整个东西活了。
这些调整没有一个能靠提示词说清楚:说清楚了它就变成按图施工的脚本,那我还不如自己写。
我的实际工作流
现在的流程是四步:
- 自己画草图。 拿笔在纸上画出效果的结构——哪一层是基底,哪一层是细节,哪一层是光。这一步 AI 替代不了,因为它不知道我想要什么。
- 让它写骨架。 把草图翻译成 pass 结构,函数空着。这个它做得很好。
- 自己填核心函数。 好看的部分自己写。
- 让它审。 贴代码要 review,重点问"有没有性能陷阱"和"有没有更简单的写法"。
第 4 步经常有意外收获。它会指出我在片元里做了本可以放到顶点里的计算,或者把 pow 换成了更便宜的近似。
一条更硬的结论
AI 让 shader 的下限变高了,同时也让平庸的 shader 变多了。
以前写不出 shader 的人现在能做出能跑的效果,这是好事。但"能跑"和"好看"之间的那段距离,不但没缩短,反而因为东西容易做出来,变得更难被认真对待——反正堆几个噪声就差不多了。
我现在的判断很简单:AI 能帮你省掉的是打字的时间,省不掉的是看的时间。你得盯着屏幕,判断哪里不对,这个循环只能自己做。
效果不够好看,通常不是参数没调到,是你还不知道自己想要什么。