GLSL 效果示例

烟雾平流:让染料沿速度场持续搬运

不断注入染料,上一帧的颜色被搬到新位置;不承诺完整流体求解。

在线示例

修改右侧代码,左侧预览会实时更新。

观察什么

不断注入染料,上一帧的颜色被搬到新位置;不承诺完整流体求解。

实现原理

从当前位置沿速度反向寻找上一帧的颜色,再注入少量染料。这是平流示例,没有压力投影,也没有求解完整不可压缩流体。

找到控制效果的代码

c=texture2D(u_dye,uv).rgb;

u_dye 保存搬运后的 RGB 颜色,Fragment 只读取这张纹理。把 c=texture2D(u_dye,uv).rgb 改成 c=vec3(texture2D(u_dye,uv).r),可用灰度只显示红色染料,而不改变模拟中的运动。

动手修改

在 u_dye 中把 flow 的乘数 0.002 改为 0.004。每次更新向前一帧反向追踪的距离会加倍,染料沿给定速度场搬运、拉伸的速度也会增大。

调试与成本

u_dye 每次更新读取一次前一状态,再注入运动色源,没有求解压力。把衰减 .997 改为 .98,旧染料会更快消失;暂停后可用单步逐次比较更新结果。

用到的内置函数

一步步学会这个效果