GLSL 效果示例
反应扩散:让斑点在平面上长成条纹
改变反应参数后,斑点与条纹经历连续演化。
在线示例
修改右侧代码,左侧预览会实时更新。
观察什么
改变反应参数后,斑点与条纹经历连续演化。
实现原理
两个颜色通道保存 A、B 浓度,扩散、反应、补给和移除项共同推进 Gray–Scott 模型。改变参数会改变演化方向;需要多帧才能出现成熟结构。
找到控制效果的代码
vec2 ab=texture2D(u_reaction,uv).rg;c=mix(vec3(.03,.06,.16),vec3(.95,.7,.3),smoothstep(.05,.35,ab.y));
u_reaction 用红通道保存 A、绿通道保存 B,而 Fragment 目前只通过 smoothstep(.05,.35,ab.y) 给 B 着色。把其中 ab.y 改为 ab.x,可查看另一种浓度,不改动更新方程。
动手修改
把 u_parameter 从 0 调到 1,u_reaction 的 kill 会从 .055 变为 .067。每次重置后运行许多帧:富含 B 的区域生长与消失之间的平衡会改变,成熟图案因此可能不同。
调试与成本
每次更新读取中心及八个邻居,再把 A、B 存入 RGBA8 通道。把 feed=.035 降为 .025,可独立改变补给而不改变 kill;八位舍入和按帧更新仍会限制数值精度与速率一致性。