查看: 1425|回复: 0

深度解析《勿忘我》,游戏环境-第二部分:雨

[复制链接]

839

主题

887

帖子

3663

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3663

最佳新人

发表于 2019-3-27 15:55:45 | 显示全部楼层 |阅读模式
在研究《勿忘我》的概念艺术时,很容易看出,多特诺德 (Dontnod)的团队需要创造潮湿复杂的城市环境,通常是在雨中。该团队致力于创造出最现实但又最灵活的环境,使游戏关卡设计具有最大的影响力、灵活性和渲染质量。


下面是详细描述产生雨的效果。这是我们关于游戏环境的三部分系列的第2部分。 本站早些时候发表了第一部分的文章。可以在这个地址查看http://www.galaxix.com/bbs/forum.php?mod=viewthread&tid=591

RM_Concept_Envirom.jpg

RM_Concept_Envirom2.jpg

如你所见,概念艺术展示了各种各样的大雨场景和想法。

deep023m.jpg

EP1_floatingmarket_m.jpg

有各种潮湿的室内外场景。

hi_007m.jpg

Interior_cosy_loft_statue_01.jpg

以及许多具有复杂照明和具有挑战性的环境,包括类似概念。

上面是六张高清画面.

结果令人惊叹,但为了真正欣赏团队的成果,我们想深入了解制作如此高端的图形游戏需要什么。文章通常侧重于游戏或电影,但我们感兴趣的是如何制作如此高端的实时城市场景,这些场景推动了游戏机技术的极限,同时,在已发表的研究成果的基础上,物理上正确的照明和其他基于游戏的内存和纹理尺寸的解决办法的革新。

真实世界的水属性

在当今的一些游戏中,已经有动态天气效果了。但最受唤醒的天气效果是下雨。不幸的是雨通常对实际的游戏没有影响,但它可以对视觉效果的情绪和本质产生很大的影响。本文的目的是描述技术和艺术两方面的技术,使之能够描绘出一个多雨的世界。我们所说的湿世界,不仅是指一个正在下雨的世界,而且是指雨停后的湿润的世界。

目的是帮助理解绘制湿表面所涉及的物理过程。在游戏开发环境中(双层、多孔、地下相互作用等),湿表面真的很复杂,要想正确处理,所涉及的复杂性尤其难以掌握。虽然不可能解释或强调一切,但游戏环境开发应该洞察出复杂。由于背景是高端游戏,解决方案将不在于强制新的复杂照明模型,而是从有限的材料中调整BRDF参数,以在保持在渲染预算内的同时实现一些积极的现实主义。但是,这可以通过使用基于物理的照明模型和基于物理的值来实现。根据正确的物理参数,我们可以确定表面的性质。在此基础上,该方法还可以在处理基于程序的老化和风化以及许多其他类似的游戏环境问题时提供有用的信息。


第一节: 参考

雨是如何下的? 艺术来源于生活

在这项研究中,我们将重点放在潮湿的城市环境,而不是自然或风景景观。

雨中照明

照明对雨水有很大的影响,特别是在夜间。正如大多数现场实践所知道的,很难拍摄或记录下雨,因为雨滴通常很难看到,但它们在反射或捕捉光线时会变得非常明显。当观察拍摄的雨滴时,雨滴被视为条纹粒子,但事实上,长条纹是由相机快门时间的运动模糊造成的。水滴本身并没有改变它的球形。许多雨滴或阵雨由于风而与地面不垂直。这可以增加游戏环境中的真实感。

rainfog1.png

在雨天的录像中,人们也经常能看到照相底片上显现的光轮状晕光。
在大雨下,有大气散射效果(雾)和光通过雨水产生雾辉光效应,如上图所示。

第二节: 游戏中的降雨效果

从上面的第1节可以清楚地看出,雨水和潮湿的城市环境比人们想象的要复杂得多。为了让玩家沉浸在雨中,并真正增加真实感,游戏开发人员需要支持许多交互和灯光属性。

雨中城市环境渲染的历史关键实时编程参考之一是来自ATI(2005)的“Toy Shop”演示,该演示在许多图形论坛上被广泛覆盖和引用。


这个演示可以追溯到十几年前,但是仍然很难将所有演示的效果应用到现代PS3/Xbox360游戏环境中。在第二部分,我们将参考为游戏所做的研究,《勿忘我》。这篇文章是那项研究的结果。在本节中,S巴斯蒂安·拉加德与同事安托万·扎努蒂尼、劳里·米歇尔和奥森·法夫雷尔共同贡献。

2A: 溅落

在现实世界中,当下落的水滴撞击表面时,会产生飞溅。在游戏中,当代表雨滴的拉伸粒子与场景碰撞时,通过生成水花粒子,可以很容易地模拟雨花。然而,跟踪每一个与场景碰撞的粒子是很耗费资源的。我们注意到,由于有如此多的雨滴产生如此多的水花,很难区分是哪一个雨滴引起了特定的单个雨花。基于这一观察,用两个独立的系统来管理雨滴和雨溅是比较简单的。

大多数游戏都会碰撞一束随机射线,从世界的顶部开始,然后向下移动,与场景的简单几何表示发生碰撞。然后碰撞检测会产生水花颗粒。作为进一步的优化,水花只在靠近屏幕的地方产生。

当表面不是一个简单的平面,而是一个更复杂的形状如汽车时,一个优化被用来避免复杂的碰撞检测计算。在第二个优化中,水花粒子的发射器只遵循复杂形状的几何边界。图案不会像其他水花那样随意,但外观是有效的。

《勿忘我》团队尝试了不同的方法。他们没有试图用简化的世界模型碰撞射线,而是从顶部向雨的方向渲染了一个深度贴图视图。深度图给出了人们在世界上任意位置发射水花粒子所需的所有信息,这些信息与场景几何有关。方法的步骤很简单:

1.自上而下绘制深度图
2.将深度图从GPU传输到CPU内存
3.使用深度图按照世界几何图形生成随机位置
4。在产生的位置发出水花

gasfasfasdf.png

具有深度贴图喷溅的示例场景(单击可以看大图)。

想象一下屋顶上的场景,角色的屋顶部分被其他更高的建筑包围。

雨水需要从可见的屋顶“散发”出水花,但例如防火梯等复杂的部分可以简化。

为了渲染深度贴图,他们在当前相机前面链接了一个虚拟位置,但稍微高一点,然后从这个角度渲染了世界几何图形。由于并非世界上所有地方都需要生成雨溅,因此他们为艺术家添加了一个额外的网格标记方法,以指定是否需要在深度贴图中渲染网格。该团队还允许仅在深度贴图中渲染网格,而不在正常场景中渲染网格。当有半透明的物体(如玻璃)时,这是很有用的,玻璃应该能阻止雨水,但不能在不透明的深度图中渲染,或者用一系列不太复杂的网格(如树枝和树叶)来近似一个复杂的形状。


editorraincollision.png


为了简化艺术家的调试,他们还在编辑器中添加了一个特殊的可视化工具,用来仅查看与雨水飞溅相关的对象。


depthmap1.png


屋顶的俯视图,在其他更高的建筑物之间。

由深度图生成的世界位置的精度取决于深度图的分辨率和截锥的大小。通过一张256×256的深度图和一个20米×20米的正交截锥,研究小组可以在深度图中所取的高度上获得7.8平方厘米的世界单元。光栅化器将控制深度地图中的高度存储。这意味着,如果你在一个7.8平方厘米的模块中得到一个高度悬殊的物体,那么飞溅的水很可能会在一个错误的高度产生。这是内存和性能之间的权衡。
为了与各种平台保持一致,深度值存储在标准化坐标装置中。在透视投影的情况下,使用反向浮动深度值来提高精度。

当落下的水滴撞击表面时,它会受到突然的冲击力。溅洒有两种可能的方式:冠状溅洒,即薄的乌鸦形的水膜垂直上升到表面上方,然后破裂成较小的水滴;以及快速溅洒,即水滴直接从水滴的底部排出,而不形成树冠。

通常,冠状飞溅需要在平坦表面上有一层薄薄的水,并保持10-20毫秒的活性。飞溅的动力学取决于许多因素,分为两类:
•材质表面的特性(例如:粗糙度)和
•跌落特性(尺寸、速度)。


water-8.jpg

粗糙材料往往对冲击结果有重要影响。冠部的半径和高度与液滴的性质有关,液滴的数量也与液滴的速度有关。喷溅液滴的分布可以用随机模型来描述。

当然,对于一个游戏来说,很难在每个水花的细节上做得太过详细。例如,最初的玩具店演示(上图)使用了一个四重纹理的动画,它是从一个溅牛奶滴的高速视频中捕获的。四重纹理是规模生产品种。这与渲染时间之间的一个很好的折衷点似乎与碰撞的两个主要特征保持一致:高度和半径的一般冠形比例和一些次水滴。然而,由于效果的这一特定部分往往掌握在实际的特效艺术家手中,他们倾向于做任何他们觉得有创意的看起来好的事情(不管物理)。该队在游戏中采用了一种艺术路线,他们设计了一个网格来代表王冠的形状,并用一个精灵来模拟飞溅的水滴。下面的图片显示了效果的线框,顶部网格为白色,飞溅的水滴为红色(左)。皇冠网格和飞溅水滴用动画材质映射。皇冠网格(中间)在效果期间缩放。结果(右)。


rainsplash_fx.png
特效由蒂莫西设计


最后,介绍了飞溅分布。水花的数量取决于雨滴的数量,为了简单起见,团队将水花的数量与雨强度值联系起来。


这是一个镜头的研发片段, 注意,这不是直接从游戏中得来的,这显示的是独立的雨滴.



Timings:

在PS3上,以字符为主的256×256深度的地图绘制大约需要0.32ms,大雨下的雨溅大约需要0.33ms。

在Xbox 360上,深度图大约需要0.20毫秒,大雨下的雨大约需要0.25毫秒。
如本节开头所述,如果角色的渲染成本太高,则可以在其头部和肩部生成随机的飞溅。这里的困难是设法获得与周围地面相同的飞溅分布。

2B: 雨/雨滴

现在,研究小组在拍摄过程中出现了水滴和水花,注意力转向水滴对光线的影响,并使它们在场景中“正确读取”。

雨水本身的效果是最复杂的,也是最有研究价值的,而且要想纠正这种现象也要付出代价。

上面的观察表明,通常很难察觉到雨水。观察雨水成分的最好方法是在明亮的光线下,或者当雨很大的时候。在任何情况下,我们看到的都是长长的条纹,但实际上,雨水是由单个雨滴组成的。如果团队想以正常的低分辨率渲染真实世界的雨滴,雨滴的宽度将只有几个像素。此外,由于雨滴在明亮的区域非常微弱,在黑暗的区域往往显得更强,所以在游戏中匹配现实并不是一个好的目标。也就是说,在模拟游戏雨之前,值得注意的是什么是现实。

water-6.jpg

雨滴物理性质的详细描述包括:
•雨滴是透明物体,通常大小为0.5至10毫米。较小的雨滴是球形的,但较大的是扁球体。
•水滴往往比其背景或其遮挡的场景部分亮得多。这是因为雨滴从大立体角(165°)折射光线。向摄像机显示包括天空在内的环境。折射的入射光只衰减了6%。镜面反射和内部反射进一步增加了水滴的亮度。
•尽管是透明的,但静止水滴(无运动模糊)内的平均亮度并不强烈依赖于其背景。这是因为被水滴遮挡的背景的立体角远小于水滴本身的总视场。
•雨滴的亮度不受其他雨滴的影响。这是因为对于任何给定的雨滴,由其他雨滴(雨滴很小且相距很远)所包围的总立体角与环境所包围的总立体角都是无关紧要的。(收件人:Garg,Krishnan,K.Nayar,“视觉与雨”,2006)


water-7.jpg

复杂折射.

如上图所示,世界是通过雨滴折射的。正确绘制雨滴需要光线轨迹绘制具有反射、折射和内反射的球形。

有趣的是,当雨滴落下时,它们会发生快速的形状扭曲(振荡)。对于较小的雨滴(1毫米),雨滴达到3米/秒的恒定速度;对于较大的雨滴(4毫米以上),雨滴达到9米/秒的恒定速度。它们的运动在图像中产生随机变化的空间和短暂的时空。这被视为条纹,真正的相机由于长时间曝光和运动模糊产生这种效果。

如上所述,已经进行了大量的SIGGRAPH和一般的雨水渲染研究,大多数都可以在网上获得:

简单的光度模型只能在渲染的雨离相机很远时使用,在这种情况下,所有条纹都足够薄,使其亮度模式的细节不相关。然而,在雨滴的特写镜头中,每一个雨滴都会投射出一条大的图像条纹,显示出其中的强度模式。这种模式非常复杂,因为雨滴下落时会发生形状扭曲。这些形状变形是由于空气动力和表面张力引起的振动造成的。形状畸变与光线的相互作用导致了斑纹、重叠的高光和雨条纹内的弯曲亮度轮廓。

- 雨水条纹的照片逼真绘制,Kshitiz Garg Shree K.Nayar。哥伦比亚大学


有个在不同条件下的渲染条纹大数据库,这个数据库的观察和振荡条件是公开的。即使是一个旧的Nvidia SDK也包含了使用该数据库一部分的示例,但是在当前的游戏机系列中,使用这样的数据库是很困难的,游戏设计者找不到完全匹配的现实的等价内容。

有两种方法可以在游戏环境中实现雨滴。无论是粒子系统还是大纹理。

粒子解决方案

粒子系统方法通常包括用简单形状(如矩形)表示条纹。粒子系统通常会产生真实的运动,它们可以在GPU上进行风驱动和有效的模拟。为了提高性能,粒子系统将链接到相机,以最小化要管理的粒子数。例如,在游戏“太空船”中,它使用一个视锥限制粒子发生器。.

粒子方法的主要缺点是缺乏可扩展性。更强的降水量需要增加粒子的数量,在某个时刻这意味着降低游戏的帧速率。

纹理解决方案

大纹理方法使用动画纹理(程序纹理或手写纹理)来表示多条条纹。与粒子系统不同,大纹理方法对于重降水和轻降水具有相同的性能开销。但它们缺乏雨滴深度和运动的真实性。Toy Shop演示(上图)使用了屏幕四边形映射纹理(通常称为后处理)。该演示试图模拟在一个渲染屏幕四元体中以不同速度和不同深度移动的多层雨滴。当相机四处移动时,这种方法的弱点很快就会显现出来。雨的效果看起来像一个后处理过程,向下看会使雨滴从视觉上平行于地面落下。

游戏 Flight Simulator 2004(飞行模拟器2004)通过将四个动画纹理映射到一个双锥体上解决了这个问题。

通过使用圆锥形网格并倾斜它以适应摄像机的移动,它们可以使降水量流向摄像机。它们缩小四个连续纹理中的每一个,并将其滚动得更慢,从而创建更小、移动更慢的水滴,以模拟视差的深度。

为了以合理的性能支持不同强度的动态降雨,RememberMe团队开发了一种类似于飞行模拟器2004的方法。


团队成员AntoineZanuttini解释说:“我们定义了四层雨,每层雨代表相机前面的一个区域。每层使用相同的运动前模糊雨滴纹理”。这四层方法是关键,它允许一些技术用于更近的降雨(第1层和第2层),以及在更远的层(即第3层和第4层)上使用不同的方法。


layer.png        raintexture.png


该团队将纹理映射到一个与相机链接并位于相机原点的mi圆柱体mi圆锥体网格上。然后从圆柱体内部渲染。”他补充说:“如果艺术家们愿意,我们可以在上下看的时候,平稳地将顶部和底部的雨滴淡出。”

它们以不同的速度和大小平移和不均匀缩放每个层的圆柱体纹理坐标。

转换模拟雨滴运动, 更远的层面使用更大的比例因子来增加雨滴的数量与距离。

为了模拟风的感觉,他们进行了额外的循环旋转。注:在实践中,这只是一个艺术设置,而不是从一个真正的风值定义。


rainlayer.png

上面的4个纹理显示每个单独层的结果(从近到远)。

为了获得雨滴效应中的深度和视差感觉,研究小组决定使用深度缓冲器来阻挡雨滴。要使其工作,每个雨滴都需要一个“虚拟”位置。我们已经定义了每一层都代表相机前面的一个区域。在每一层中,我们使用了一个高度贴图纹理比例,并偏向每一层的属性,使每个雨滴在该区域内有一个深度。我们使用从视图到圆柱像素位置的方向和这个深度来检索雨滴的虚拟世界位置。生成Heightmap纹理不是一项简单的任务,最好按程序生成它,”Zanuttini解释说。

对于粒子, 可以进行软深度测试,以逐步降低雨滴的不透明度。这种深度遮挡增加了雨水的真实感,特别是在城市环境中,相机前面有很多遮挡物。

在像“勿忘我”这样的第三人称游戏中,你可以看到一些雨滴落在玩家和相机之间。这项测试的一个好的额外用是,当观察地面时,雨滴会消失,因为雨滴的深度在地面的深度之后。另一个需要考虑的遮挡是来自天空的遮挡。当玩家在掩体中时,他们可不希望看到雨滴!这可以很容易地通过重用为雨水飞溅生成的深度图来实现。就像阴影地图一样,你可以投射出雨滴的虚拟位置,并做深度比较,以知道雨滴是要到达玩家的虚拟位置还是应该停止。

性能和调整

在实践中,小组对性能进行了几次简化,一些简化到更近的第1层和第2层,并对进一步的第3层和第4层采用了不同的随机方法。”我们选择只在前两层和较低分辨率上执行雨滴遮挡测试。我们为雨水飞溅生成的深度图的范围有限,因此我们设置前两层的距离,以便被深度图覆盖(记住,深度图向相机移动)。我们还决定不投影距离遮挡的虚拟位置,而只是在视图空间中进行深度测试差异,”他解释说。

考虑到其他远层(第3层和第4层)的雨滴遮挡,它们在全分辨率下根据层距离和深度缓冲平滑地覆盖每一层。


blenddepthdistance2.png

上面的照片显示了前三层的遮罩结果。
对于两个远距离层(第3层和第4层),它们还增加了一个特征,以增加雨量品种。他们生成两个平滑的图案,用混杂的蒙版来阻止雨滴,就像一个重复的图案。


noiselayer.png

噪声采样使用第3层和第4层的混合遮罩,以避免重复图案。

把雨滴和落下的雨放在一起:



此研发视频通过启用/禁用不同层、雨强度影响、“层距离”和遮挡测试来显示不同层的行为。

下面的3张图分别显示:

1 无雨
2 雨效果启用(类似于游戏等级)
3 一个夸张的版本,以更好地突出层次和闭塞(occlusi哔~)。


raindrops.png

三个关于雨的关卡,无,正常,显示为“11”(点击放大)。


Timings:

在PS3上,低分辨率通道大约需要0.40毫秒,而全分辨率(后处理通道中雨水效应的额外成本):1.29毫秒,总共1.69毫秒。

在Xbox 360上,低分辨率通道大约需要0.34ms,而全分辨率:1.38ms,总共需要1.72ms。
无论雨势如何,时间都是一样的。

2C: 雨打在墙上

正如观察所见,雨水不仅仅是飞溅物、雨滴和水坑。许多物体根据其曲率和环境与积水相互作用。添加所有这些元素会增加下雨的心情。但与其他效应相比,由于生产时间限制,它们的可扩展性和可控性一般较低。它们最适合一个地区的已知降雨条件。我们可以通过混合输入和输出效果将它们构建成动态降雨模型,但它们并不能真正适应所有天气条件。换言之,在添加水滴和相互作用之前,最好先了解降雨量。

大多数这样的互动通常是由外特效术家以创造性的方式创造的(而不是总是现实地和手动添加放置在现场)。例如,在游戏Bioshock中,滴下的水是用一个圆柱形的网格创造的。与物体相互作用的级联水是借助一维阴影图完成的。

下面是一些例子,说明团队是如何解决诸如水从墙壁和玻璃中流下的问题的。


glassdropletstexture.png

滑动纹理


例如,为了让水滴顺着玻璃滴下,研究小组使用了滑动纹理。使用两种不同的平移和缩放对纹理进行两次采样。该结果还用于启用失真效果。为了获得一些与视图相关的照明信息,他们对低分辨率环境立方体贴图进行采样,并将其添加到实际颜色中。


要获得落下的水滴要稍微困难一些。


fallingdroplets.png

在上面的视频中,水滴是由屋顶边缘的积水造成的,但这种解决方案的通用性足以被重复使用。在一个薄圆柱上随机定位。圆柱体的大小、水滴的大小、诞生率都是可配置的,以适应不同的边缘大小和固定的天气条件。

至于玻璃上的水滴,研究小组使用低分辨率环境cubemap与色调值进行照明整合。下面是效果的线框,圆柱体为蓝色,液滴为红色:

fallingdrop.png


这种效果类似于玻璃上的水滴。


但是在贴图中:

蓝色通道用于水滑动

绿色通道允许控制裂缝形状

glidetexture.png

相机液滴

“侵泡在雨中的场景的一个重要线索是当相机镜头冲上的时候,相机镜头上会出现雨滴,”团队成员劳里·米歇尔解释说。这种效果在游戏中总是以艺术的方式实现。为了达到这一效果,我们首先尝试使用全屏后处理,在相机向上看时混合变形纹理,然后在效果不在时淡出效果。”

除两个问题外,这种效果非常有效:

•并不是动态的 (除了淡入淡出)
•代价很大

第二种尝试是使用粒子实现一些屏幕空间效果。这样做的好处是减少了所需的填充率,并允许使用粒子系统框架产生更多的动态效果(在“勿忘我”的情况下,使用的是虚幻3引擎的级联粒子系统)。

在粒子系统框架内,直接在屏幕空间绘制粒子并不容易。一种更简单的方法是绘制粒子,就像它们在视图空间中一样(在相机前面的近平面上),并将它们的变换链接刀其中一个相机上。这样也有一些缺点:例如,更改FOV会影响这些粒子的外观,以及更改屏幕比率也会影响粒子外观。但这些问题可以忽略不计。

cameralinkparticles.png

这种效果可以在雨滴剪辑开始时看到。

Timings:


PS3约需要耗费0.32ms,Xbox360约需要耗费0.54ms。

阅读本文第三部分请移步
http://www.galaxix.com/bbs/forum ... &extra=page%3D1

本文由天の川翻译整理。版权所有转载请注明本站连接
www.galaxix.com/bbs

关注galaxixv,官方微信公众号。
GALAXIX UE4 讨论学习群 140439020
UE4精英学习群  12762592
UNITY学习群   194092348
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表