当亚瑟·摩根在《荒野大镖客2》的溪流中饮马,粼粼波光随着马蹄缓缓扩散;当迈克尔驾驶游艇破开洛圣都的海浪,带起的水波能够精准的推开漂浮的集装箱……在众多游戏大作中,水体渲染与物理交互常被视作提升世界真实感与沉浸感的关键。
从《水上摩托》(Wave Race)在任天堂64是屏幕上推开的像素波浪,到《半条命2》用法线贴图伪造的水波,再到《战地5》用粒子碰撞模拟的硫磺岛礁石上的浪涌。我们在屏幕中目睹了从无到有的水花和波纹,却鲜少有人真正关心背后的纳维-斯托克斯方程是否被“腰斩”。只要显卡能在每秒60帧的渲染中“驯服”湍流,我们就能获得足够的视觉享受和互动乐趣。
1 超级超级简化版的计算流体力学与游戏中水体模拟发展历程
1.1 1940-1990:计算流体力学的发展
计算流体力学(CFD)的起源可追溯至上世纪40年代,当时气象学家刘易斯·弗莱·理查森提出了一种可数值求解流体流动偏微分方程的方法,但碍于当时算力不足,只能模拟极为简单的流动。
50至60年代,随着计算机算力的提升,CFD逐渐成为科研人员在研究流体力学时必不可少的工具。
本文聚焦于游戏水体模拟,故只对自由表面模拟的一些方法的发展做简要介绍。
1965年,诞生了世界上第一颗原子弹的美国洛斯阿拉莫斯国家实验室提出了标记质点-网格(MAC)方法,这种通过再欧拉网格中添加标记质点,从而实现识别哪里是水,哪里是空气,这是后续流体自由液面计算的鼻祖。
1975年Nichols和Hirt提出用体积分数而非质点来表示液相位置的思路,到1981年,Hirt和Nichols正式发表了VOF方法的经典论文,确立了用体积分数追踪自由边界的标准算法,其核心思想是记录网格单元中液体所占比例(液相体积分数),用连续介质变量(1表示液体,0表示气体)跟踪自由液面。
1988年,Osher和Sethian提出了水平集(Level Set)方法,用隐式函数表示界面并求解Hamilton-Jacobi方程实现界面推进。水平集方法可自然处理界面拓扑变化,避免显式追踪界面,因而很快被用于包括流体自由液面在内的界面动力学模拟。
1986年Brackbill等提出FLIP(流体隐式粒子)方法,这是对PIC(粒子-网格)方法的改进,PIC 方法最早可追溯至 Harlow (1963) 的 Particle-in-Cell,这种方法用粒子携带质量、动量等信息,同时在网格上求解压力/加速度等,得到速度场。
至此,CFD已具备VOF、水平集、FLIP等多种自由表面处理手段。
与此同时,计算机图形学开始尝试物理化的水效果,为之后的动画和游戏水体模拟埋下伏笔。
1.2 1990-2000 计算机图形学领域流体动画的兴起
1989年,Miller和Pearce利用粒子系统模拟黏性流体,这是图形学领域里较早的流体动画研究之一。
1990年,Kass和Miller提出利用浅水方程高度场(简化的圣维南方程)来模拟水波。他们只计算二维高度场,再通过渲染展示三维水面;这种方法计算成本低且稳定,深受后续游戏开发青睐,用于大范围海洋或湖面的水面模拟。
1996年,Foster和Metaxas在SIGGRAPH上发表了首个将三维Navier-Stokes方程与自由表面追踪相结合的流体动画方法,实现了更逼真的三维水流动效应。
1999年,Stam推出了“稳定流体”算法,通过半拉格朗日输运与隐式黏性处理,实现无条件稳定的流体求解。虽然最初是为烟雾模拟等气体研究而生,但大时间步下的稳定求解思路也启迪了对实时液体的模拟。
游戏领域在90年代中期开始尝试简单的交互式水波效果。
例如:1996年的《水上摩托》在N64有限硬件上实现了一定程度上的水波物理,玩家的摩托艇会激起波浪影响赛道。1997年的《古墓丽影2》可以潜水并出现了基本的”水花“。
虽然这些效果仅仅大多依赖浅水方程、预先计算的波形贴图和简单粒子动画生成,但是其仍然在游戏里初步引入了“物理水体”的概念。
1.3 2000-2020:游戏中实时水体模拟的探索与发展
2003年,Müller等人在SCA上提出了适用于交互式应用的粒子法流体模拟,使用SPH(平滑粒子动力学)并通过弱可压缩近似,让三维水体动画得以接近实时地运行。SPH最早由Gingold、Monaghan和Lucy于1977年应用在天体物理中,它用拉格朗日粒子替代网格,基于粒子间核函数进行计算,对大规模并行与自由表面的处理极为方便。
2005年,Zhu和Bridson将CFD领域的FLIP方法引入计算机图形学动画中,用于砂和水等复杂流体的模拟,大大降低了粒子法数值耗散,能生成细节丰富的稳定动画。
然而这些方法多用于影视领域,对于游戏来说,这些方法对算力的需求仍然较大,将其加入游戏中是一种吃力不讨好的做法。
这一阶段,游戏中的水模拟仍以近似为主。许多游戏采用噪波纹理和法线贴图生成波浪的外观,同时在局部叠加粒子特效模拟飞溅水花等。
2005年,消费级硬件出现突破:Ageia发布了专用物理加速卡PhysX,能够硬件加速包括流体在内的粒子物理。虽然PhysX加速卡属于短命产品,但它证明了GPU并行在游戏物理中的潜力。随后NVIDIA于2006年收购Ageia,将PhysX整合为基于GPU的物理库。2008年NVIDIA在GDC展示了流体与刚体的交互效果,预示了实时流固耦合的可能性。
10-20年间,随着硬件性能飞跃和算法优化,游戏领域开始利用各种近似手段实现实时的有一定物理效果的水体模拟。
2010年的《恐水症:预言》是最早具有实时的完全动态的大规模的水体的游戏之一,宣传采用了基于粒子的实时水模拟,可在游戏中实时淹没房间并推动物体。
2013年的《刺客信条4:黑旗》没有对海洋使用完整的物理效果,而是将程序化波浪与基于物理的尾流、炮弹冲击等粒子特效相结合,打造出颇具冲击力的海战场景。
同年,Macklin和Müller提出PBF(位置基流体)方法,将SPH的压力计算转化为粒子位置的密度约束迭代,既能适配较大时间步保持数值稳定,又显著提升了实时表现。虽然牺牲了部分物理精准度,但在视觉层面依然足够逼真。
PBF技术很快被集成进游戏引擎(如Unity、Unreal的插件),使开发者能在消费级GPU上运行稳定的水体模拟。
2014年的Nvidia PhysX FleX 引擎将流体、柔体和刚体都用粒子+约束统一表示,在GPU上进行统一求解。这种方法实现了流体与刚体的天然双向耦合:刚体和流体均由一群粒子表示,流体粒子和刚体粒子通过相同碰撞约束交互,使两者自动产生双向作用力。
借助这些技术,游戏中的“流固耦合”开始变得可行:例如沙袋落入水中会激起水波,反过来水的浮力作用会影响沙袋运动。这些在以前的引擎中难以模拟的效果,如今可近乎实时呈现。
之后的游戏水体达到了前所未有的程度:例如《荒野大镖客2》的河流、《战地5》的水花,都结合了一定程度的物理模拟(如大范围的高度场模拟+局部粒子法模拟)和复杂的水面着色器(如基于速度的泡沫生成器+更精细的水面法线贴图)。
2.游戏中水体模拟常用方法
2.1游戏水体模拟的特点
游戏中的流体模拟服务于视觉逼真和交互体验,只需“看起来对”即可,无需严格符合物理定律。它属于娱乐和视觉艺术,关注实时性和美学效果。例如开放世界游戏希望水体动态响应玩家动作,提供沉浸感和乐趣。
针对以上需求,游戏中的水体模拟为了效率做了大量简化和改进:
在维度上,常将三维流体问题简化为二维高度场,用于模拟大范围水面。例如海洋场景多用高度场叠加波浪纹理,既减少计算量又易于渲染。
在方法上,游戏偏好粒子法和质点体系(如SPH、PBF),其易于并行且天然适合复杂边界。粒子法牺牲了一些物理准确性,换取了实时计算的稳定性。
游戏注重模拟的结果而非原因,通过程序动画制造水花、水浪效果,而不严格求解流体方程。例如直接用粒子特效表现船只激起的浪花,而不在流体网格中真正施加动力学耦合。
游戏模拟必须在毫秒级别完成计算,例如16ms内需要完成包括流体在内的所有计算,以实现60FPS。因此游戏水体往往采用低分辨率物理+高分辨率渲染的策略,在有限算力下取得视觉上细腻的效果。例如利用低分辨率粒子模拟整体水流,然后在着色阶段添加细小的波纹和泡沫纹理来骗过眼睛。
游戏中注重交互,而流固耦合一直是CFD的难题,因此游戏种会利用巧妙的近似达成表面上的实时“流固耦合”。具体包括:
1)弱耦合近似:刚体在水中的浮沉,多通过预先设定的浮力公式和阻力模型实现,而非严格求解N-S方程与固体动力学。这样物体能随水浮动、水被物体推开,但计算非常简化,只需根据物体排水体积计算一个力。
2)局部处理:游戏中的流固耦合通常局限于有限范围(水花四溅的局部)且持续时间短,对稳定性的要求相对宽松。例如角色踏水只需模拟一圈涟漪即可,不涉及长时间力的积累,可以大胆使用大步长和经验阻尼系数。
2.2 基础方法
1.预渲染动画与纹理贴图
完全基于视觉塑造的水面,如预先烘焙好的动画、贴图或程序化噪波对网格顶点进行简单变形,无任何物理交互。
2.简化波动方程或浅水方程
将水面建模为一个二维高度场,在一个规则网格中记录水面的高度值,通过预设流速流向图或通过压力梯度估计水流的流速流向。通过在该网格上求解简化的波动方程或浅水方程,生成波纹、涟漪与大范围的水流运动。
这种方法无法处理浪花翻滚、水流跌落、水流溅射等现象,无法表现精细的水流结构。同时处理物理交互时直接在物体跌入点生成局部水面扰动,修改交互位置的水面高度,这种方式仍然是一种 “视觉欺骗”,并不包含真实的三维流动与物理交互。
3.粒子系统
如SPH或PBF等粒子方法,能模拟真实的自由液面与流固交互。
然而SPH对稳定性和最小时间步长要求较高,对设备性能有一定门槛;PBF在放弃一部分物理精准的前提下,依旧能获得足够逼真的效果,并在性能上更胜一筹。然而其要在表现大规模水体时计算量较大,需进一步降低粒子数量或分辨率。
2.3 多方法耦合
以上几种方法没有单一的模拟方法可以在实时条件下同时高效地表现水体的复杂行为和流固交互,实际上会采用多方法耦合的方式构建一个看起来逼真、运行效率高、具备交互反馈的水体系统。
例如:对于大范围水面采用简化的波动方程或浅水方程模拟高度场;对于交互行为采用伪物理场耦合,即交互时局部生成涟漪高度场;对于表现三维行为较强的局部水体,如飞溅、水珠、瀑布、水流断裂、物体撞击后的溅射等采用粒子系统或PBF方法局部模拟;最终,通过着色器生成水面的泡沫等用于进一步增强视觉效果。
3 写不下去了,草草收个尾
游戏中的水体模拟,归根结底是在算力和视觉效果之间寻求平衡。从最早简陋的“像素波纹”到如今可实时物理交互的大规模水流,技术的演进不仅带来了更高的沉浸感,也拓展了玩家与虚拟世界交互的边界。
未来,随着硬件性能与算法优化的进一步发展,曾经只能在科研与影视后期才能运行的复杂流体模拟,也有望在游戏中以更高精度和更逼真的形态实现。
或许,有朝一日,我们能在数字世界里亲眼见证:不再是帧率“绑架”了物理,而是接近真实的物理法则反过来带领我们去体验更广阔的虚拟天地。
参考文献
F.H. Harlow and J. E. Welch, “Numerical Calculation of Time-Dependent Viscous Incompressible Flow,” Phys. Fluids 8, 2182 (1965);
J. E. Welch, F. H. Harlow, J. P. Shannon, and B. J. Daly, “THE MAC METHOD: A Computing Technique for Solving Viscous, Incompressible, Transient Fluid-Flow Problems Involving Free Surfaces,” Los Alamos Scientific Laboratory report LA-3425 (March 1966).
B.D. Nichols and C. W. Hirt, “Methods for Calculating Multi-Dimensional, Transient Free Surface Flows Past Bodies,” Proc. Of the First International Conference on Numerical Ship Hydrodynamics, Gaithersburg, Maryland, October 20-23, 1975.
B.D. Nichols, C. W. Hirt and R. S. Hotchkiss, “SOLA-VOF: A Solution Algorithm for Transient Fluid Flow with Multiple Free Boundaries,” Los Alamos Scientific Laboratory report LA-8355 (August 1980).
C.W. Hirt and B. D. Nichols, “Volume of Fluid (VOF) Method for the Dynamics of Free Boundaries,” Jour. Computational Physics, 39, 201 (1981).
B.D. Nichols and C. W. Hirt, Numerical Simulation of BWR Vent Clearing Hydrodynamics,” Proc. 1978 Annual Meeting ANS, San Diego, CA; Nuc. Sci. Eng. 73, 196 (1980).
C.W. Hirt and B. D. Nichols, “A Computational Method for Free Surface Hydrodynamics,” ASME 1980 Pressure Vessels and Piping Conf. San Francisco, CA (August 1980) Jour, Pressure Vessel Technology, 103, 136 (1981)
Kellomäki, T., 2012. Water simulation methods for games: a comparison, in: Proceeding of the 16th International Academic MindTrek Conference, MindTrek ’12. Association for Computing Machinery, New York, NY, USA, pp. 10–14.
R. Bridson and M. Müller-Fischer. Fluid simulation: SIGGRAPH 2007 course notes. In ACM SIGGRAPH 2007 courses, SIGGRAPH '07, pages 1--81, New York, NY, USA, 2007. ACM.
N. Chentanez and M. Müller. Real-time simulation of large bodies of water with small scale details. In Proceedings of the 2010 ACM SIGGRAPH/Eurographics Symposium on Computer Animation, SCA '10, pages 197--206, Aire-la-Ville, Switzerland, Switzerland, 2010. Eurographics Association.
N. Chentanez and M. Müller. Real-time eulerian water simulation using a restricted tall cell grid. In ACM SIGGRAPH 2011 papers, SIGGRAPH '11, pages 82:1--82:10, New York, NY, USA, 2011. ACM.
M. Kass and G. Miller. Rapid, stable fluid dynamics for computer graphics. In Proceedings of the 17th annual conference on Computer graphics and interactive techniques, SIGGRAPH '90, pages 49--57, New York, NY, USA, 1990. ACM.
P. Kipfer and R. Westermann. Realistic and interactive simulation of rivers. In Proceedings of Graphics Interface 2006, GI '06, pages 41--48, Toronto, Ont., Canada, Canada, 2006. Canadian Information Processing Society.
A. Layton and M. van de Panne. A numerically efficient and stable algorithm for animating water waves. The Visual Computer, 18(1):41--53, 2002.
M. M. Maes, T. Fujimoto, and N. Chiba. Efficient animation of water flow on irregular terrains. In Proceedings of the 4th international conference on Computer graphics and interactive techniques in Australasia and Southeast Asia, GRAPHITE '06, pages 107--115, New York, NY, USA, 2006. ACM.
X. Mei, P. Decaudin, and B.-G. Hu. Fast hydraulic erosion simulation and visualization on GPU. In Computer Graphics and Applications, 2007. PG '07. 15th Pacific Conference on, pages 47--56, 29 2007--nov. 2 2007.
J. O'Brien and J. Hodgins. Dynamic simulation of splashing fluids. In Computer Animation '95., Proceedings, pages 198--205, apr 1995.
B. Solenthaler, P. Bucher, N. Chentanez, M. Müller, and M. Gross. SPH based shallow water simulation. In Workshop in Virtual Reality Interactions and Physical Simulation, pages 30--46, 2011.
J. Tessendorf. Simulating ocean water. In SIGGRAPH course notes, 1999.
N. Thurey, M. Muller-Fischer, S. Schirm, and M. Gross. Real-time breaking waves for shallow water simulations. In In Proceedings of 15th Pacific Conference on Computer Graphics and Applications, 2007, PG '07, pages 39--46, 29 2007--nov. 2 2007.
W. J. van der Laan, S. Green, and M. Sainz. Screen space fluid rendering with curvature flow. In Proceedings of the 2009 symposium on Interactive 3D graphics and games, I3D '09, pages 91--98, New York, NY, USA, 2009. ACM.
A. Vlachos. Water flow in Portal 2. In ACM SIGGRAPH 2010 courses, SIGGRAPH '10, pages 1--54, New York, NY, USA, 2010. ACM.
Q. Yu, F. Neyret, E. Bruneton, and N. Holzschuch. Scalable real-time animation of rivers. Computer Graphics Forum, 28(2):239--248, 2009.
备注:本文采用DeepSeek和Chat GPT辅助写作,主要用于部分段落的语言润色。
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com