
鹅厂的毛真宇和吴奎认为虚幻引擎中当前的水解决方案不适合生产,第三方插件存在性能问题并且无法扩展到大世界。
于是决定通过开发满足LIGHTSPEED STUDIOS(光子工作室)需求的新水渲染解决方案来正面解决这个问题,他们利用尖端技术实现逼真的水体渲染和模拟,同时确保最佳性能和可扩展性,这使得能够为他们的需求提供生产就绪的解决方案。

Photon Water System的生产过程设计得非常简单,用户可以使用样条工具创建河流和湖泊,或者使用Houdini等外部工具程序化生成水。或者,可以将水材质分配给任何网格,一旦添加了所需的水源,只需单击一下即可启动流体模拟。
模拟结果保存为水位图和流量图,存储为基于图块的虚拟纹理,在运行时,这些虚拟纹理按需加载。
Photon Water System为游戏程序员提供物理支持,使他们能够从用于游泳或船物理的API获取水波高度和流矢量,他们还利用虚幻引擎的单层水材质来获得流明照明和反射。此外,该团队还开发了基于物理的水下体积照明系统。
他俩还提到了开发Photon Water System时遇到的主要障碍之一是确保模拟结果在所有项目中保持一致,虽然该系统在试验地图上运行完美,但由于算法限制,它偶尔会在其他设置中失败。因此团队还在探索该系统以确保模拟在所有情况下都能可靠地运行。

因此根据水水插件和演示的启发,团队试验了LBMSWE(浅水方程的格子玻尔兹曼方法)。它是高度可并行化的,支持具有高雷诺数的湍流,非常适合流图烘焙。
然而,由于两个原因,它被发现不适合实时水模拟。首先,由于LBM的性质,每个网格单元需要存储三个分布,每个分布有九个通道,导致很大的内存成本。此外,LBMSWE框架仍然是一种单相模拟技术,无法准确捕获水的自由表面。因此,仅使用LBMSWE来预先计算水数据。
对于运行时水流体,团队遵循传统的浅水方程 (SWE) 在二维高度场网格上求解水动力学,其中高度表示水的高度,Pure SWE的计算成本非常低,内存占用也很低。
此外,团队在同一框架内开发了一种基于网格的泡沫模拟方法。因此,水泡沫可以根据SWE求解的速度场生成和传播,增加水系统的真实感。

团队还修改了水渲染系统以适应运行时生成的数据,高度图和流图动态更新,切块,直接写入虚拟纹理池,水四叉树也在运行时从GPU更新,允许渲染代码使用预计算和运行时数据。
此外,还开发了第三种模拟 – 表面波模拟,它只求解浅水方程中的压力函数,这允许在玩家或物体与水交互时创建交互式波浪,在现有水面上应用位移,该模拟运行速度很快,仅使用两个深度渲染目标,甚至可以在移动平台上运行。
Photon Water System提供各种参数来控制模拟,包括网格大小、时间步长、粘度、重力、摩擦、松弛因子、入口/出口速度和用于渲染的CDLOD镶嵌因子,在大多数情况下,默认参数开箱即用。
在开发过程中遇到的挑战之一是确保模拟结果在不同项目和环境中保持一致,为了解决这个问题,团队识别、修复并防止了各种边缘情况,以确保模拟能够在所有环境中可靠地工作。

该团队计划试验几个令人兴奋的功能,正在探索提高模拟分辨率的可能性,目前设置为每像素一平方米,这意味着小于此大小的对象将被忽略,通过提高分辨率,可以创建更详细的模拟。
此外,团队还需要更多优化以确保性能预算保持在可控范围内。
团队还在致力于探索预先计算的水数据和运行时数据之间动量传递的潜力,因此已在边界测试了抑制和混合两种类型的数据,但他们相信有可能将两者无缝连接以实现更逼真的模拟。