加载中
0202 / 10如果把所有可见墨迹抹掉,流体就停下来了吗?
这个问题很容易答错,因为墨水往往是画面里唯一可见的东西。我们会把载体与被携带的东西混为一谈。FLOW 将两者分开保存:速度描述物质如何运动,染料浓度描述某处有多少示踪剂。
在二维模型中,速度是包含水平和竖直分量的矢量,浓度则是标量。一个几乎没有染料的单元,速度仍可不为零;反过来,一片很亮的区域,也可能恰好静止。
“被动示踪剂”这个假设很重要:染料被流动携带,却不会反过来推动流体。像素变亮不会自动增加浮力。一次手势可能同时施加力并加入染料,但这仍是两个不同的操作。
解析示例:单位周期域上的平移,u = 0.16、v = 0、κ = 0。标记跟随给定速度;这不是 FLOW 录制。
移动时间滑块,再隐藏染料。小标记仍沿着同一个给定速度平移。这里是单位周期域上的解析教学示例,不是 FLOW 求解器运行。它的好处在于可以独立算出答案:初始位置加上速度乘时间,然后在周期域内取回对应位置。
平流使一个量随速度场搬运,扩散则减弱相邻位置之间的差异。均匀平移的图案可以移动而不展宽;扩散中的图案也可以展宽而没有整体位移。
对被动浓度 c,模型可以写成:
c 的变化 + 速度 u 对 c 的输运 = κ × c 的空间扩散 + 染料源κ 是染料扩散率,ν 则是动量方程中的运动黏度。它们都可能让某个场变平滑,但作用对象不同。提高 ν 不等于代码偷偷提高 κ,更不等于给最终图像加模糊,再把它叫作物理。
当前周期实现的 κ 为 0.00005。这是模型参数,不代表某种真实墨水在特定液体中的测量值。如果没有说明物理标定,本系列中的长度和时间都是模型单位。
界面中常见的误解,是把持续运动当成持续施力。手势可以只在有限时间内输入动量。外力停止后,已有的速度场仍会在平流、黏性作用与不可压缩约束下演化,不必立刻归零。
因此,输入结束后的滑行阶段很有用。若始终在施力,就无法判断运动来自先前状态,还是来自不断持续的驱动。内部“创造流动”章节会在输入历史结束后检查非零速率,以区分这两件事。
一张截图不能告诉我们外力何时停止。录制实验需要时间线与方法说明;实时工具则需要清楚的暂停状态和输入记录,而不只是不断变化的画面。
假设最亮的区域被拉成一条细丝。你知道的是染料分布发生了变化,还不知道最大速率。染料稀少处可能流得更快,明亮色块也可能近似整体平移。
改变显示方式时,这个区别尤其实际。调色可以显露原本很淡的细丝,却不改变浓度;修改染料输运算法可以改变浓度,却不改变速度算法。这些干预需要不同的检查。
录制预览可以用于阅读固定实例及其导读。选择章节不会重新执行手势。先确认什么被录了下来,再去寻找场的读数,而不是从亮度猜速度。
记住这一点: 染料让运动可见,却不定义运动。解释变化之前,先说清改变的是哪个场。