《GTA5》揭秘游戏背后的故事

  《GTA》系列自1997年公开以来,就受到了广大玩家的喜爱,在2年前,R星公开了《GTA5》,游戏非常成功,在短短24小时内就出货了1100万份,销量可怕。

  游戏的PS3/XBOX 360版本可以说做的非常成功,PS3仅有256M RAM以及256M显存,竟然能够运行如此出色的画面而不奔溃,这不得不让人感叹R星技术的强大。

  当然,今天我们要谈论的是游戏PC(DirectX 11)版本,就是占用了几个GB内存和显存的那个版本,让我们一起来揭秘游戏图像的秘密吧,看看一帧3D游戏画面是如何诞生的。

第一部分:解剖帧数框架

  我们用麦克的这张图作为例子,他站在一辆Rapid GT前,身后是美丽的洛圣都。

游民星空

  《GTA5》使用的是延迟性管道渲染,通过大量的HDR缓冲区运行,当然这些缓冲区无法在同一个显示器中全部呈现,因此我们将其分解,将画面调用至Reinhard模型,通过这样将画面回归到每条线路8-Bit。

环境块图:

  第一步,截取图像的环境块图,这个块图每一帧都是事实运算,连续执行后就得到了后期逼真的环境效果,这也是Nvidia的3D画面实现技术——Forward-Rendered。

  那么如何实现这些块图的呈现,对于不熟悉游戏技术的人,你可以想象你在拍摄一副全景图片,设定自己站在一个立方体中间,六面环绕,每转过90度进行拍摄,一面连接一面。

  游戏中图像就是这么呈现的,每一面换算到128X128 HDR图像,第一面的元素就包括以下内容:

游民星空

  同样的内容使用到剩下的五个面,最终获得完整的块图:

游民星空

  每一面差不多呈现出30次画面调用,基地的多边形网格呈现的内容仅仅是环境(天空、山脉、主题建筑),角色以及车辆不予以呈现。

  这也是为何在游戏中你的车辆和环境互相反应非常好而其他的车辆却没有造成反应,角色也是如此。

块图到抛物面图的转换:

  完成了环境块图的设计之后就需要把它转化为双边抛物面图。

  方块图展开后显示了不同区域,而转化之后就类似于半球形状的图片(包含俯视和仰视双视角)。

游民星空
原块图拆解

游民星空
形成双边抛物面图

  为何要进行这一步转换,很关键的一点在于优化!通过块图着色器需要捕捉到6个面上128X128的图像,而转换为双边抛物面图之后,着色器需要捕捉的仅仅是2个全面的128X128图像,更重要的是,一般情况下,玩家的视角都是从上方往下看,因此完善俯视视角就能够进一步地达到优化目的。

  此外,块图6个面的边缘都是独立链接,如果说两个边缘上存在统一图案对于老一代的显卡来说将无法识别,就算是新一代的显卡也需要耗费更多性能去过滤,而转换为双边抛物面图将大大减轻显卡处理的压力。

修缮细节等级(LOD):

  这一步需要计算着色器来完成,根据物体距离镜头的远近,用不同精细的网格进行着色,有的物体甚至不需要着色过程,例如一些超过可见距离的花和草是不会呈现在屏幕上的,就不需要进行修缮。

  这一方面PS3和PS4/PC版本之间存在着很大的差异(PS3版本没有计算着色器支持),因此在PS3版本中,这些内容都通过Cell多核处理器或是SPU解决。

Via:adriancourreges

G-缓冲区:

  画面革新的关键就在这里,所有可见网格一个接一个着色,但不会同时进行阴影计算,着色器会将一些简单的相关阴影输出到G-缓冲区,《GTA5》采用的是MRT技术,因此每个着色器单位可以同时渲染五个单位。

  随后,这些在G-缓冲区的阴影将会合计到一起进行像素着色,因此得名递延,在这一步中,绘制的内容只有那些不透明的物体,像玻璃这一类物体需要采用其他递延管道进行处理。

  这些渲染的最终目的是为了LDR缓冲(RGBA,8-BITS每个管道)能够更快地计算出最终有效阴影的数值。

游民星空
G-缓冲15%效果

游民星空
G-缓冲30%效果

游民星空
G-缓冲50%效果

游民星空
G-缓冲75%效果

游民星空
G-缓冲100%效果

  其中涉及到的渲染内容包括:

  漫反射贴图缓冲区:它的作用是储存“内在颜色”的网格,代表了物体本身的材质,理论上不受光照影响,但你可以注意到汽车引擎盖上的泛白区域,R星在定向输出漫反射贴图之前计算了太阳光的阴影效果。

  法线贴图缓冲区:用于储存每一个像素的法线向量(R/G/B)。

  镜面贴图缓冲区:里面包括了物体的高光/反射信息:

  -Red:高光强度

  -Green:光泽度(平滑性)

  -Blue:菲涅尔强度(判断所有像素是否属于同一材质)

  发光贴图缓冲区:红色通道包括受太阳光照影响的所有独立像素所反射的光照,蓝色通道则是包括物体受到第二光源的反射,绿色通道则是处理物体本身具有的发光反射(霓虹灯、灯泡)。在这里大多数阿尔法通道是不使用的,除非需要标记对应字符的皮肤或是植被的像素单位。

  深度贴图缓冲区:用于储存镜头里每个像素之间的距离。

游民星空
左为深度缓冲,右为模板缓冲

  上述所有缓冲区最终形成需要大约1900左右的draw calls(draw call是openGL的描绘次数,数值越低越好,对于GTA5来说,1900这个数值是非常低了。)注意,在场景渲染中,从前到后的顺序是最明智的,剔除更多不需要渲染的内容,这样一来可以进一步减少显卡压力。

阴影:

  《GTA5》采用的阴影技术是CSM(cascaded shadow maps一种比较新的实时阴影渲染技术,专门用于渲染大型场景,效果很好,但是有一个缺点就是场景需要多次渲染,它的中心思想是将屏幕像素分散到多个ShadowMap中,因为近处的东西细节较高,远处的东西细节较低,因此将视椎体分割,并将光源摄像机聚焦到对应的小视锥上),贴图像素为1024X4096,用此技术是为了确保玩家附近的阴影拥有更高的像素,而远处物体的阴影细节则适当减弱。

游民星空

  这一步有很高的性价比,虽然说要进行4倍渲染次数,但其间可以避免大量不必要的多边形裁剪,使得draw calls数值维持在1000左右。

  通过深度信息,计算出每个像素的阴影,进而进行分类,太阳方向的光反射阴影处于红色通道中,而在大气中透过云投射将会分别储存在红色和绿色通道中。

游民星空
绿色部分为太阳阴影,灰色部分为云朵阴影

  同时阴影将采用抖动模糊效果处理,如果你仔细观察下面的贴图,红色管道所呈现出的是类似棋盘状的效果,这是为了边缘更加平滑。(模糊效果处理是非常繁杂的过程,因为它需要处理大量问题贴图,但最终获得的效果能够让阴影更加真实)

游民星空
模糊处理后得到的阴影图

平面反射贴图:

  这属于后期检测的一项步骤,因此在这里不多赘述,简而言之就是还原反射所对应的贴图在一个240X120的图案中(约650draw calls),从而呈现一个面上所反射包含的内容。

游民星空

SSAO(Screen Space Ambient Occlusion屏幕空间环境遮蔽):

  线性版本的缓冲计算结束后,就开始建立SSAO画面。

  首先建立多噪点版本,通过depth-aware模糊技术进行双向排除(横向和纵向)去除画面中的噪点。上述工作都是在原图一半的分辨率下进行的,为了扩展后得到更好的画面表现效果。

游民星空
多噪点版本

游民星空
SA模糊技术后效果图

G-缓冲区结合:

  是时候把各个缓冲区之间的内容结合了,一个着色器同时获取五个缓冲区的内容,形成最终的HDR图片。

游民星空

游民星空
将缓冲区的图片融合,得到初步效果图

  这样子最终图片的雏形已经完成,但我们依旧缺少天空,海洋以及一系列透明物体,在此之前,至少我们的麦克还不够完美。

次表面散射(Subsurface Scattering):

  麦克皮肤上存在许多不连续的黑点,让他看起来像是用塑料做的而不是人肉。

游民星空 → 游民星空

  这时候就轮到SSS技术登场了,模拟皮肤内的光传输,通过SSS后我们可以看到麦克的肌肤内似乎有了血液流淌的痕迹。而SSS技术只会应用在皮肤上而不会衍生到衣服等其他物品上是由于缓冲区计算出麦克皮肤的像素值为0x89,符合这一区域的物体才会收到SSS效果影响,而这个效果将会作用于游戏中主角以及NPC的皮肤上。

水:

  在这张例图中虽然没有大面积水域,但还是有一些游泳池等东西,《GTA5》中的水是通过折射和反射两个层面呈现。

  通过Z缓冲区导出两个版本的图像,分散出不同的水面内容:

游民星空
扩散图

游民星空
不透明属性

  水体扩散图像:展示了水的内在颜色。

  水体不透明图像:其中红色管道储存水中的不透明属性,绿色管道区分水的深浅。

  注意,在这里所有水都呈现出来了,包括隐藏在物体后面的,都会在红色管道中出现,在这里绿色管道的作用就是剔除那些隐藏的水面,保留视觉可以看到的。随后我们就可以得到下面的水面反射图片。

游民星空

  再结合上面的缓冲区图片内容,我们就可以获得一张带水的画面图。

游民星空

游民星空

大气层:

  创建光过滤贴图,这也被称为体积阴影,实现光是透过大气层或是雾等气候后的照射效果,而不是太阳直射。这样之后的图像也存在许多噪点,需要进行模糊效果处理,在此之后,添加雾面层,随后是天空,最后加入云彩。

游民星空
光轴图

游民星空
基础图

游民星空
基础+雾效果

游民星空
基础+雾效果+天空

游民星空
基础+雾效果+天空+云

  天空的构建采用球形单点draw call,参考下图,大规模网状覆盖整个区域。云渲染也采用相似的方式,用前面提到过的法线贴图和密度贴图来渲染体积云,尺寸为2048X512,无缝连接。

游民星空
云密度

游民星空
法线云

透明物体:

  添加画面中的透明物体,比如玻璃,挡风镜,车窗,以及飞行的尘埃粒子等,这个过程仅仅占用11draw calls,就能够完成大量粒子实体化。

游民星空
添加前

游民星空
添加后

抖动平滑:

  远景像素点由于渲染程度有限,在放大后像素化叫严重,这时利用着色器进行后期处理,读取原始颜色缓冲区数据并通过阿尔法管道进行扩散,得到像素化严重的色区数值,进行共同抖动处理。PC版本和PS3/版本这方面处理的并不好,抖动过滤器并没有完善使用。

游民星空
抖动处理前

游民星空
抖动处理后

曝光度调整:

  曝光度永远不能够过快的转换,相邻两帧之间的差别不能够有过高的变化,平缓地转换非常重要,例如你在《GTA5》中驱车从一个山洞驶出,暗到亮的变化需要多点曝光来适应玩家眼球对于视觉差变化的适应程度,暗到亮的曝光速度要比亮到暗的曝光速度更快,这是根据人眼习惯所得出的结论。

游民星空
左为低曝光度,中间为中等,右为高曝光度

抗锯齿及光学畸变:

  如果游戏的抗锯齿方式采用的是FXAA,那么需要紧致网格来达到边缘平滑的效果,随后模拟真实世界的镜头,通过小着色器进行光学畸变,这不仅仅会扭曲整体画面,也会减少边缘纹理的色差。

游民星空
光学畸变前

游民星空
光学畸变后

UI:

  这里提到的UI仅仅只是改帧画面在左下角地图上的变化,整个地图区域被划分为不同方块区域,通过引擎划分出显示在同一屏幕的区域,得到更好的变化效果图。最后将小地图载入主要缓冲区,添加上小的图标,我们的最终作品就诞生了。

游民星空

游民星空
添加地图UI后

  这一帧画面总计4155draw calls,88个渲染目标以及1113个纹理图。

  可以看出制作一帧画面,如果厂商用心优化的话,是需要非常麻烦的步骤,一步步改良减少显卡压力,最终让更多玩家的PC能够顺利运行,这方面,本次R星的《GTA5》无疑做的相当出色,期待今后能够为我们带来更加完美的作品。

  介于第一期一帧画面制作的科普文章受到了读者的认可,那么今天就让我们继续Adrian Courreges游戏解析的第二课——LOD(细节水平)以及Reflections(反射效果)。

第1讲链接:点击进入

  如果说R星制作游戏技术有一方面明显领先于业内其他公司,那么无疑就是LOD,在洛圣都各处无不彰显着R星出色的LOD实力,使得你在游戏过程中体验更加真实。

光源:

  Aaron Garbut(R星北方工作室艺术总监)在PS3版发售之前说过:在游戏中无论多远的光源都是真实的,当你驱车到达光源所在地你可以发现这些光是由什么物体散发的。

  他的这些话是否准确呢?让我们一起来看看下面这张夜景图。

游民星空
闭灯状态

游民星空
开灯状态

  这的确碉堡了,在远景时,无数灯光出现在统一画面中,只是此时的光源都是用一个个32X32正方体模型渲染而成,由于这些点采用了Instanced Geometry(几何实体化)技术进行批量处理,因此会给显卡造成不小的压力(这也是为何就算游戏做足了优化,对于显存还是存在最低级别的需求)。

游民星空
正常亮灯夜景

游民星空
光源线框图

游民星空
标明距离像素距离

  而且这不仅仅需要渲染静态光源,《GTA5》中有着许多不断移动的车辆,好在由于距离问题,车辆建模无需一个个渲染,需要渲染出的内容只是车前的两盏灯(如果某些游戏制作时为了更加逼真的效果,连远景中的车辆都进行动态渲染的话,四路泰坦估计都难以承受),但随着距离缩短,车辆LOD会逐步上升,直到最后你能够看到完整的车辆建模。

原文地址:点击进入

多边形网格弱化:

  在前一篇文章中,那么广阔的区域都是在同一帧中被渲染的,那么在较远距离的山脉是如何处理的呢?

游民星空
一个Draw-Call概括整个远处的山脉

  虽然在画面中看起来远处的山脉面积不到,但在实际游戏中这一块区域是非常广袤的,是一个跨越了几平方公里的区域,同时还包括了各类建筑融合在其中,伽利略天文台坐落在山顶上,希腊剧场,好莱坞水库,这些场景在实际游戏中是可以探索的,但如果你在远景中要同时渲染这些内容,将会产生大量的Draw-Call以及多边形,在这里R星就采用了漫反射网格处理来降低网格组件精度,这个区域很远,用低多边形的版本来渲染后只会产生1个draw-call和2500个多边形(2500个多边形低到难以想象)。这个转化并不能完全的自动化处理,需要Rockstar的3D美术师花费几天时间来手动的微调网格,也不会感到惊讶的。

游民星空
伽利略天文台

游民星空
低多边形处理的Vinewood山脉

  此外,城市中小首尔区的几条街,绘制完后也仅仅产生一个Draw-Call,多边形网格弱化在处理游戏远景过程中非常有用,将会有效区分不同距离的LOD等级,对于大型沙盒游戏来说,如果不降低远景网格精度,在实时的渲染过程中会产生大量的几何体,导致同一画面Draw-Call数量过高,不仅仅玩家难以运行,开发成本也是难以预计的。

游民星空
低多边形处理的小首尔

资源加载技术:

  不同的LOD层次意味着开发者需要制作不同版本的环境世界,这是一项非常艰难且耗时的任务,但即使你做到了分层次的LOD,你距离终点只完成了一半,你可以用几个G的硬盘来储存不同LOD的贴图和模型,但如果你的RAM和GPU无法有效的读取画面内容那一切努力只是徒劳。

  《GTA5》的采用了实时动态数据传输进行资源加载(有的游戏采用的则是区域加载,你在进入一个区域前,读取完所有内容,玩家就会进入所谓的Loading画面),每当你进入到地图的另一个区域都会进行模型和贴图数据的上传和下载,更可贵的是R星能够稳定这样的实时传输数个小时。

  这得益于R星之前主机版本的压缩技术,能够将这些图形数据压缩到主机内存能够顺畅的读取和上传,也正式由于压缩技术的进步,《GTA5》的画面细节表现力较之《GTA4》有的大幅度的进步。

  但实时动态数据传输技术目前并不完美(即使压缩的再好,释放还原还是需要一定时间),游戏中很明显的例子就是切换角色,或是你将相机镜头从地图一段迅速移动到另一段,这会造成系统瞬间过载而导致需要5秒钟左右的读取时间来进行资源释放,好在《GTA5》在进出房间这个过程处理的非常出色,让玩家甚至感觉不到加载时间。

  同时,当你正常驾车时,移动速度足够慢,实时动态数据传输系统就有足够的带宽来保持数据上传和读取。但当你开飞机的情况就不一样了,玩家肯定有感觉在游戏中开飞机的速度非常缓慢,这是由于实时距离转变跨度过大,如果飞机速度设定过快的话,处理器无法保证正确的读取和上传,最终导致游戏奔溃,这也是R星采用此类传输办法的一个弊端。

游民星空 >  新闻中心 >  电脑游戏 >  新闻 >  正文

《GTA5》开发故事第二讲 揭秘R星游戏制作独特技巧

反射效果:

  在上一期的帧数解析中水面效果出现的并不多,所以今天直接来看一看这个大大的游泳池。

游民星空

  和之前一样,这个场景也是有一个个环境块图组成的,用来实现周围物体在本体上的反射效果,例如图中的游泳池扶手就是通过这个块图内容进行反射渲染。

游民星空
块图拆解

游民星空
在呈现水面之前

  首先我们放出泳池水呈现出来之前的图像,由于水面呈现是截然不同的步骤,所以上面的块图中并没有反射出来。

反射贴图:

  首先建立平面反射图,分辨率不需要太高,240X120即可,这个步骤类似于之前块图的构成,但这次缓冲区的数据将会包括人物和梯子。下图是直接用的水面视角反射,随后做对称采样就可以获得正确的反射了。

游民星空

折射贴图:

  游泳池画面的一部分被提取出来,利用水面折射光将影响到的范围来创建折射贴图,折射光是太阳光摄入水面后再从水中射出的效果。

游民星空
基础图

游民星空
折射效果图

  同时要注意画面中的不透明水,水越深画面中颜色表现越蓝,折射效果越弱,随后加入焦散效果(间接照明光线(即光子)从光源发射出来后,先经过一次(或多次)表面反、折射作用,再投射到某个扩散表面上),这样处理后最终获得的折射贴图大小只有初始图缓冲内容的一半大小左右。

结合缓冲区内容:

  将上面所产生各个缓冲区的内容结合,就能够得到一个水面多边形图像,通过对图像中的多边形法线进行抖动处理得到了水体的运动效果,但这只适用于小面积的水域,如果是大面积的水体如海洋就不能够单纯使用法线震动来获得运动效果,需要在渲染过程中改变每一帧的顶点位置从而得到海洋的波动。

游民星空

游民星空

镜面效果:

  镜面采用的渲染方式和水面是同样的方式,只是更加简单,因为镜面背后是不会产生反射效果的,但是由于镜面没有凹凸不平的地方,是完全光滑的平面,因此不能用抖动处理来遮盖低分辨率的贴图,这里为了得到反射效果更好的镜面只能够适当提高分辨率。

游民星空

  由于镜面的反射渲染相当耗时耗力,因此同一场景内远处的镜面都将会采用黑色四边形块图处理,这样将会大大减少渲染时间,也减轻生成后对于显卡的压力。
 
聚光灯效果:

  在第一章我们提到过,在一帧生成的初始阶段是不存在车辆建模的,仅仅是显示了基准的建筑和山丘,那么在这种情况下,如果顺利地显示车辆灯光通过地表而造成的反射效果呢?用下面这张夜景图来分析较为明显。

游民星空

  在之前的图片中(麦克那张)灯光地表反射效果并不明显,因为在那里所有G缓冲区的内容都直接融合了,同时白天的缘故也无法表现明显的聚光灯效果,在夜晚时,每个光源都需要绘制一个单独的网构架,这个构架是不直接在画面中显示的,只是为了在覆盖所有光源的同时进行区域划分,最后用像素着色器来根据网构架内像素的距离来计算物体和光源的距离、法线以及光泽度/高光等属性,来实现动态的光反射计算。

游民星空
光射效果0%

游民星空
光射效果50%

游民星空
光射效果80%

游民星空
光射效果100%

图像中的网构架图:

  R星在这里采用的是延迟管线技术,这是为了减少像素着色器的工作量,相较于传统的前渲染管线来说,延迟管线技术仅仅渲染画面中被光源影响到的像素点,而老式的前渲染管线中,无论是否受光照影响的像素点都会被计算在其中。

游民星空

游民星空

  R星针对《GTA5》进行的优化工作不得不让人佩服,这也是让许多较为老旧的PC能够运行游戏的重要原因,敬请期待开发课程的最后一课——后期效果处理。

游民星空 >  新闻中心 >  电脑游戏 >  新闻 >  正文

《GTA5》开发故事第三讲 R星玩转电影般后期特效

2016-01-05 20:18:21 来源:游民星空[编译] 作者:泡面 编辑:泡面 浏览: 90071
图案的基础渲染之后,制作组需要进行的就是后期效果的增加,修复画面缺陷,调节整体游戏环境氛围,让画面看上去更加舒适。

  在第一讲的部分中其实我们已经提到过了一些后期特效内容,例如Bloom(静态光影宣染,它和HDR的区别在于后者是动态渐变的),抗锯齿,贴图色调的调整,但R星还有许多独特的后期特效。

Lens Flares & Light Streaks   镜头光晕和光源条纹

  喜欢摄影的玩家对这两个特效一定不会陌生,当光源的光线射入真实镜头时,表面的散射和内部的反射有时候会产生一定程度的失真,从而造成了一个个光晕。

游民星空
最终效果图

  而游戏中的镜头光晕指的是屏幕中的光源直射所造成的明亮光点的集合,而光源条纹指的则是光源所产生的放射效果,这两种效果在电影中很常见,实际运用到游戏中是为了让玩家看到的画面有一种电影的美感。

  这里有两种方法来渲染这种失真效果:

  基于整体图像:首先找到屏幕最亮的区域,对这个区域做复制和变形,这种做法适用于屏幕中同时存在大量光源。

  基于单个图形化对象:手动的添加图形化对象并管理位置,这样就导致每个光源的失真效果需要手动添加,设计者对于效果的形状,颜色,强度调节性更强,但如果光源过多将耗时耗力。

  《GTA5》中同时使用了这两种方式,我们以这张图片为例,其中最明显的自然是针对太阳进行基于单个物体的失真特效添加,通过在太阳周围绘制12个旋转的四边形加入光源条纹,而沿着这12个四边形再添加70个单独的图形化对象,形成光晕,由近及远,光源的间隔越来越大,数量越来越少。而基于整体的失真效果在本图中只有一处,就是左下角最后一个光晕的蓝色边缘。

游民星空
基础图

游民星空
增加光源条纹

游民星空
增加镜头光晕

游民星空
线框显示状态

  引擎使用了几种图形化对象来模拟不同的镜头效果:

游民星空

游民星空
基础图

游民星空
增加耀斑

游民星空
线框图

  《GTA5》非常注重游戏细节,镜头光晕这一部分自然也不例外: 它的大小是和真实相机光圈大小成比例的。如果你在背对着太阳的时候突然朝向太阳,镜头光晕起初很大,然后缩小光圈来降低曝光,从而达到真实光线的效果。(你在背对着太阳的时候突然转身的一瞬间眼睛肯定会觉得难受)

  游戏中还有一个细节做得非常出色:在第三人称时你可以体验到逼真的失真效果,但如果你切换到第一人称视角,你几乎就看不到任何光晕了,因为人的肉眼不是相机。

游民星空
大光圈

游民星空
小光圈

Anamorphic Lenses 变形镜头

  在游戏夜晚的黑暗地区这个特效尤其明显,游戏模拟了相机变形镜头的失真效果,产生了水平或是垂直的条纹,通常情况下显示蓝色。近年来通过变形镜头产生光源条纹这个特效越来越受到各大厂商的欢迎,这不仅仅局限于游戏界,好莱坞的科幻电影就非常喜欢这种特效。

  在游戏中变形镜头也是针对单个图形化对象进行的,就如之前的太阳光一样,只针对面向镜头中的强光源使用。

游民星空
镜头变形前

游民星空
镜头变形后

Depth of Field 景深

  首先让我们一起来看看下面这张图,发现什么奇怪的问题了没有,是否没有感受到电影中那种直观的远近差异,因为图像没有进行失真效果处理,导致整个图案的各个部分相对相机都处在同一平面,而景深效果就是用来解决这个问题的。

游民星空
原图,没有模糊效果

  景深的原理非常简单,就是通过把图像中非聚焦的部分进行模糊,但在游戏中我们应该如何应用?首先通过距离缓冲区生成模糊圈范围图(COC),通过这图告诉我们每个像素相较于镜头的距离,换句话说就是确认不同物体各自应该使用的模糊程度。每个像素的CoC值,取决于它与相机的距离和相机的镜头参数。
 
  《GTA5》中用1到-1之间数值来定义像素的COC值,距离镜头很远的失真物体标记为1,距离镜头很近的物体标记为-1,而标记为0的物体基本上不需要做任何失真效果处理。

  创建数值符号是为了方便将各类像素归类区分,例如0以下的划分到红色管道,0以上的则放在绿色管道,因为一个图像中的图像层次很多,如果不进行数据划分单纯用像素划分不易操作。

游民星空

  最后,通过模糊圈范围图我们可以得知莱斯特黑色部分是焦点,富兰克林和拉斯特身后的背景是需要进行失真的内容。

  但这里要注意,并非得到各个物体的COC值就可以直接使用计算着色器进行模糊处理了,因为我们可以看到,富兰克林的COC值差不多为0.7,而其手臂链接的横椅部分的COC值则为0,直接处理后富兰克林会变得模糊,横椅则是完全清晰,二者之间的连接就变得非常突兀,因此在这里需要下调富兰克林手臂周围的COC值,让它更加接近周围物体的模糊值。

游民星空

  然后我们需要计算景深了,最传统的方式在较低的分辨率上通过像素着色器来计算模糊效果,并且将画面内容分为横向和纵向两个管道来优化计算过程。但《GTA5》是在原本分辨率上进行计算的,因此为了避免影响性能,他们使用了计算着色器来替代像素着色器。这是因为计算着色器更加适合计算大量例子的模糊效果,缺点就是单个像素容易受到周围像素的模糊效果影响。随后将两个管道的内容组合在一起。

  最终得到的游戏画面非常具有层次感,就像电影中给予一个角色聚焦效果一样。

游民星空

游民星空

Conclusion 总结

  关于《GTA5》的特效还有很多,但鉴于篇幅就不再详细赘述,例如热源散射,god rays(通过屏幕空间使用亮度溢出,暂时没有较为官方的中文释义,但切记不是体积光),动态模糊(通过运动的相机定向产生模糊效果,,并使用模板缓冲标记角色,剔除模糊数据)。

  同时,角色死亡时的"Wasted"屏幕是纯粹的后期效果处理,把渲染的场景模糊后,进一步转为灰度图,再深度暗化屏幕的四个角,接入胶片的颗粒感后再把"wasted"的文字绘制在上面。

  希望这三期内容可以揭露一些Rockstar创造出被认为是在视频游戏历史上有里程碑意义游戏的秘密。震撼人心的场景,绝佳的沉浸感以及对细节的关注,使得GTA V成为了一款非常伟大的游戏。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值