我正在使用Unity的Compute Shaders开发一个基于物理绘画机制的游戏Ebru Artist Simulator。为了模拟Ebru(也称为纸张漩涡),我实现了一个欧拉流体模拟器。以下是我要克服的挑战:

  1. 在不影响游戏性能太多的情况下实现实时模拟,我在一个计算着色器中实现了基于GPU的多分辨率网格求解器(参见论文 Solving the Fluid Pressure Poisson Equation Using Multigrid)。现在,模拟在2K纹理分辨率下运行,FPS的影响很小。
  2. Ebru的一个主要特征是颜色保持严格的边界。这使得半拉格朗日扩散等方法不太适用,因为它们引入扩散。为了解决这个问题,我实现了另一种扩散方法,该方法通过在时间上积分速度场并使用积分场进行反采样来采样初始状态(参见 Efficient and Conservative Fluids Using Bidirectional Mapping)。
  3. 最后,为了模拟传统Ebru工具的效果,我从论文 Mathematical Marbling 中获得了灵感,该论文提出了生成最终漩涡图案的映射。由于我想要保持实时模拟,我没有直接应用这些映射。相反,我受到论文的启发,使用类似的位移场作为模拟中的外力。

您也可以查看 Amanda Ghassaei的博客。尽管我们的实现不同,但我对她的工作非常受启发,学习了很多东西。