游戏中的体积流体技术
伴随着Games 103的推出,非常欣喜地看到越来越多的学生群体和活跃在前沿的业内人士开始重视“基于物理的计算机动画”技术在游戏开发中的应用,开发者也不再局限于通过序列帧或者Flowmap的方式去模拟流体现象,而是基于真实的流体力学还原其运动规律。另一方面体积渲染,无论是云,还是雾,做为游戏美术添彩的重要一笔,亦或是彰显技术实力的重要载体,也越来越高频地出现在大家视野中。方案优秀,效果上乘,运行高效,编辑器友好的体积解决方案是任何一款现代游戏引擎中非常重要的组成部分。当然,对于游戏开发者而言,我们时刻面临着“可交互速率运行”的考验。这直接导致了几乎每一个落地的体积渲染或者流体模拟方案都有其必须做出的割舍与牺牲,也都有其擅长应对的情景和有意规避的难题。然而,虽然已经有一些分析“体积渲染”或“流体模拟”的文章,但大多唯此一篇,缺乏针对不同方案的纵向深入与横向对比;或受限于特定引擎平台,缺乏底层通用性理论的系统论述。现实是,截止到SIGGRAPH 2022,我们依旧没有找到一套适应于任意场景需求的体积云雾方案【仅限游戏领域】。而实时背景下将“体积渲染”与“流体模拟”结合起来,依旧是一个非常小众的话题。至于体积的燃烧过程与爆炸模拟仍然是影视“一家独唱”。但无论如何,实时、体积、流体三个词融在一起都是令人无比憧憬的,因为很多时候并不是项目需要推动了技术进步,而是技术进步带来了新的玩法与新的艺术表现形式。
鉴于此,笔者决定维护一个专栏用于系统性的分析当前与潜在的“体积流体”方案,它们中的一些惊艳于SIGGRAPH与GDC,并在游戏开发史上留下了浓墨重彩的一笔,另外一些虽然小众,但切入点与思考方向非常有价值。如果读者之前有接触过这些工作,就会意识到这是一个涉及数据的生成,存储与转换,算法的设计与优化,视觉表达与内容管理,以及引擎和工具链开发的庞大内容,当我们站在产品项目管理周期的视角去考虑,会发现大家最经常讨论的3D噪声纹理与Ray marching其实只是整个系统的一小部分。除了传统的手段,伴随着机器学习MLP对数据、信号的解构与重建的研究,利用神经网络压缩数据,加速访问与碰撞检测的尝试也逐渐受到了工程界与学术界的重视,这似乎为解决一些传统困境提供了可能。除了已被落地证实的稳健方案,这些潜在的研究价值也会被纳入讨论范围。
在流体方案层面,我们可能更着重讨论欧拉视角,或以Stable Fluid为代表的半拉格朗日方法,以及MLS-MPM等混合方法。这全然是因为我们需要面对的是云、雾、烟、火焰这类的介质 ,而非液体。更为复杂的多相流问题,似乎在游戏中应用的可能性不大,但如果有时间,追加这部分的研究也是非常让人兴奋的。一旦我们将视角放开到影视领域,对物理规律的还原将变得更加苛刻,虚拟世界也更加真实!
作者Angelou.lv:技术美术
现在国内某头部游戏厂商做TA,主攻图形渲染与物理模拟。
目录
1|真实云现象的研究
2|《Horizon Zero Dawn》的体积云景实现
3|《西部禁域》中的体积云渲染
4|Unreal中的体积云景实现分析
本篇转载自《游戏中的体积流体技术》的第1节。
鉴于平台编辑限制,以下颜色信息无法体现,欢迎有兴趣的小伙伴致原文阅读。
文中会对一些名词进行颜色标注:绿色是方案中比较重要的专有术语,蓝色是维基百科上可以检索到的术语,橙色表示目录。
注:蓝色文字且加下划线表示加了超链接。
一、云族谱
1.1 云属
按照国际气象组织的分类[1],云一共有10个属:
每属均有自己的简称和观察特征,这10个云属按照高度分布如下:
大多数云都仅存在于它们的层面内,但通常界限比较模糊。比如高层云通常属于中间层,但它的顶部往往可延伸至更高的层面,而雨层云虽然位于中层云最高层但也可延伸至另外两个层面,积云和积雨云通常在低层,但积雨云的垂直范围又很大。
云层的大概分布范围在600~8000米,而渲染上影响云的视觉表现主要有“形状,结构,灰度,透光程度”这四个主要因素。
1.2 云种
根据云的形状和其内部结构,大多数的云属可被细分为云种,如毛状云(Ci),钩状云(Ci),密云(Ci)都是卷云,但形状又有不同:
又如堡状云(Ac),絮状云(Ac),层状云(Ac)都属于高积云:
除了按照形状与内部结构分,也可以按照云的另外两种重要属性——灰度与透光程度去分,被称为不同的云类:
除了自然演化,人类活动也会影响上空的云变换,比如核电站冷却塔,大坝上空,飞机航线上,这些特殊因素产生的云被别称为“特殊”:
二、低云族
2.1 积云(Cu)
当然这是最典型的,这种厚重的积云往往出现在沿海城市,因为更容易有水蒸气升腾,它们被细分为一个云种——浓积云(Cu con)。对于浓积云来说顶部通常以”塔“的形式垂直发展,塔太高被风吹过时会瓦解,从而形成丰富的衍生云,浓积云会产生诸多形式的降水:降雨,降雪,极端天气下还会产生冰雹。
但积云不一定会产生降水,在内陆地区,水蒸发量会少很多,这个时候它们的密度相对较低,垂直范围变窄,导致看起来相对扁平,这是积云属的一个特殊云种——淡积云或扁平云:
随着含水量逐渐升高,积云变得越来越重,越来越厚。逐步变为中积云(Cu med):中积云也具有一系列清晰的轮廓,云底相对较暗,云层只表现出适当的垂直发展,顶部一般有“小突起” 或者“云芽”,也没有降水。
但中积云有一定程度会发展为浓积云。另外还有一种积云种叫“碎积云(Cu fra)”:云底同样是水平的,变化非常迅速,垂直范围很小,外观扁平:
2.2 积雨云(Cb)
2.3 层云(St)
层云似乎没什么明显的视觉特征,形态上相对均匀,颜色为灰色,透过云看太阳时会产生清晰的轮廓,在诸多的层云种里最明显的是“波状层云(St un)”:一层层的鳞片状,每层云片具有波浪状结构。
2.4 层积云(Sc)
层积云灰色偏白一些,卷状或大型圆形物质以延伸的片状或层状排列。
三、中云族
3.1 高积云(Ac)
另外一类特殊的高积云种——“卷滚高积云(Ac vol)”,这是一种“较长,水平,分离,管状”的云团,因为看起来像绕水平轴缓慢滚动,所以被称为“卷滚高积云”。
堡状高积云是指由共同底部相接的云元素垂直上升的积云状云堡,具备如下特点:
-
似乎是按照线型排列
-
让云呈现出锯齿状(城堡城垛)外观
-
其高度有时候比宽度要大
-
从侧面看云时尤其明显
3.2 高层云(As)
3.3 雨层云(Ns)
四、高云族
4.1 卷云(Ci)
卷云属有很多的云种,例如毛卷云(Ci fib),钩状卷云(Ci unc),密卷云(Ci spi),堡状卷云(Ci cas),絮状卷云(Ci flo):
钩状卷云形状像逗号,最后以钩子或簇绒的形式停留在顶部:
对于密度较大的卷云,从共同云底生成圆形和纤维状的堡状云或云团,有时具有圆孔状外观,或带有小圆塔或齿状物,整体是白色的,没有底部阴影。这种卷云被称为“堡状卷云”。
4.2 卷积云(Cc)
卷积云也分为很多云种,包括:“成层卷积云(Cc str),荚状卷积云(Cc len),堡状卷积云(Cc cas),絮状卷积云(Cc flo)”。
成层卷积云相对较大的片或层形式的卷积云,有时存在断层。
荚状卷积云形状为荚状或杏仁形的卷积云片,通常较为细长且有清晰的轮廓,大多非常光滑,颜色很白。
在卷积云里,其中一些元素以小型堡状的形式垂直发展,从共同的水平底部升起,形成堡状卷积云。当从高于地平线30°以上的角度观测时,这些堡状云的表观宽度始终小于1°。堡状云因该高度的不稳定性而发展。
非常小的积云状的云簇,其下部或多或少是不规则的。当从高于地平线30°以上的角度观测时,每个云簇的表观宽度始终小于1°。絮状云因该高度的不稳定性而发展。絮状卷积云有时是由堡状卷积云发展而来:
4.3 卷层云(Cs)
五、地形与气候对云的影响分析
地形气候因素影响了云的生成,形态,这些相互关联的机理在构建宏大天气系统,特别是追求物理的天气变换时尤为重要。Andrew Schneider在SIG 2015与2017中给出了他们的解决方案,介绍了地形气候,时间以及剧情表现如何影响云景的生成与调度,我们会在下一节进行介绍。
总结性的规律是,当气流穿过山谷,丘陵或山脊时会受到障碍影响而被迫抬升——“地形抬升”,至于抬升的气流是否能形成云还与空气稳定性,水汽含量与温度分布有关,白天温度较高空气也会升腾,如果含水量较高且空气相对稳定,则升腾的水汽会在高空冷凝形成云。因此云的形成受地形抬升与热抬升的共同影响。
Reference:
[2] Jack Miller对云和天气现场的延时摄影作品《海风》:https://vimeo.com/user44638407
读完全篇后你会获得:
1、系统的体渲染知识,游戏领域可用的流体动力学实现;
2、PC端与移动端的体积云、雾实现;效果与性能的把控,各类优化手段与移动端平替方案;
3、硬件知识,图形分析工具的使用,引擎渲染管线的定制;
4、学科交叉的机器学习理论知识与在游戏引擎中进行机器学习训练的方法。