原文链接 http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-3/

Post Processing Effects 后处理特效

一旦场景被渲染完成,便是执行后处理特效来增强画面效果,修复缺陷,改变整体气氛等等...
我们在第一部分也了解到一些使用到后处理特效,像bloom, anti-aliasing 和 tone-mapping. 但GTA V里还使用了一些其他的特效。

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

光源射入真实世界的镜头时,散射和内部的反射有时会产生“失真(artifacts )”。
这里所说的“lens flares”,是沿着屏幕中心的明亮光源所定义的轴向分布的明亮光点的集合。
也有“light streaks”这种从光源处放射的效果。这种失真效果在电影中很常见,把这种效果加入到游戏中可以给人一种“电影”的感觉。
 
 
这里有两种方法来渲染这种失真效果
image-based:抽出最亮的区域,对这个区域做复制和变形,适用于任意数量的光源。
sprite-based:手动的添加textured-sprites并管理位置,每个光源都需要分别处理,但美术师对效果的形状,颜色,强度有更多的控制权。
 
实际上GTA V 同时使用了这两种技术:image-based的方法用来在画面的左下角增加微秒的蓝色光晕效果,是 bright-pass buffer的对称。但场景中最明显的效果还是使用sprite-based的方法,它只适用于太阳。light streaks 是在太阳周围12个旋转的四边形来加入的,而lens flares是沿着“太阳到屏幕中心”的轴绘制的70个sprite。相机方向越接近太阳,这些效果之间距离也越接近。
 
 
引擎使用了几种sprite来模拟不同的镜头效果:
 
                                                                                                                    
 
GTA V 关注一切的细节, lens flares 也不例外: 它的大小和相机的光圈成比例。如果你突然朝向太阳,lens flares起初很大,然后随着光圈缩小来降低曝光,lens flares也会变小。下面的动画演示了这个现象。
另外一个不错的细节是:如果你切换到第一人称视角,你几乎看不到任何的lens-flares,因为这时我们是通过人眼来观看,而不是通过相机。
 
 

Anamorphic Lenses 变形镜头

特别是夜晚的黑色区域,游戏模拟了变形镜头的失真效果:水平或垂直的长条纹,通常是蓝色。变形镜头生成的 Light streaks是最近流行的,也在好莱坞最近的科幻电影中使用了。
游戏中的效果是通过sprites作出,就像前面看的太阳光的效果,只在类似直接朝向相机的车前灯的非常明亮的光源上使用。
 

Depth of Field 景深

下面这个场景看起来比电影稍微“失真”一些,所有事物都显示的非常的清晰和干爽,你可能会期待像电影里那样背景的风景失去焦点(out-of-focus)并变的模糊。
 
 
 
 Depth of Field effect (DoF) ,就是通过把图像中非聚焦的部分进行模糊,来解决这个问题的。
 
它是如何应用的?首先通过 depth buffer生成Circle of Confusion(模糊圈) map。通过这张贴图告诉我们每个pixle的“失焦”程度,换句话说就是每个pixel的模糊程度。一个pixel的CoC值,取决于它与相机的距离(也就是像素深度)和相机的镜头参数。
 
需要注意的是GTA V保存的CoC是有符号值,即是在-1到1的范围内。符号肯方便告诉我们这个pixel是在聚焦区域的前面还是后面。如果一个很远和失焦的pixel,它的CoC值是1,如果pixel非常接近相机且失焦,它的值是-1。任何值接近0的pixel几乎不做模糊。
 
为什么需要有符号数值?
这是由于创建一个高品质的DoF是很复杂的,当你“模糊”场景时,需要考虑很多情况。
例如,你不想让背景的失焦pixel影响到它前面聚焦部分的pixel。如果要考虑前景的失焦pixel,那么情况就相反了: 你需要让它可以渗透它后面的聚焦区域pixel。所以当要模糊pixel时,并不是简单的“模糊多少”的问题,你也需要知道,周围的pixel是在前面还是后面,是聚焦还是失焦区域,因此,有符号的值可以区分不同的情况。
在下面的CoC map里,用green通道表示CoC > 0的部分,而red通道表示 CoC < 0 以方便观看。
 
                                                    
 
所以,通过CoC Map我们可以得知莱斯特(游戏中的角色)的黑色部分是焦点,而前面的富兰克林(游戏主角)和后面的背景则是失焦的部分。
 
 
然后,引擎只抽取"前面的失焦区域":所有CoC < 0的texel,然后把这个CoC map通过一个水平pass和一个垂直pass用compute shader来做模糊。
 
这么做的原因是?富兰克林的pixel值比较高,大约是0.7,而他右后方的长椅在焦点范围,CoC的值为0。当执行模糊时,富兰克林看起来很模糊,而长椅仍然非常的清晰,而接近富兰克林右臂的区域看起来会很奇怪:从强烈模糊的手臂Pixel到突然清晰的长椅的pixel会有突变。这种很明显的生硬轮廓是不应该产生的,轮廓应该平滑,富兰克林的pixel要渗入到周围的pixel里。
这也就是模糊CoC map的目的:修正CoC map的不连续性,使"前面失焦的区域"可以渗透到后面。
 
然后我们需要计算景深了。在较低的分辨率上通过 pixel shader来计算传统方法blur,分为水平和垂直两个pass来优化计算。GTA V 也是沿用了这种两个pass的方法,但是在原始分辨率上进行的,为了避免影响性能,用 compute shader来替代pixel shader。这是因为 compute shader更加适合计算 large-kernel的模糊效果。计算pixel最后的"模糊"值时,pixel的颜色会或多或少受到邻接pixel的影响(取决于pixel的CoC),而一些可能会导致错误渗入的邻接pixel则会被排除掉。
 
使用 compute shader 计算水平和垂直两个pass的模糊
                                                                                                                    
 
这个效果会给予画面完整的层次感,就像电影中,导演会聚焦在一个角色以引起注意。
 

Conclusion 总结

我们还有许多后处理特效可以讨论,不过这个GTA V的系列文章的长度已经超出计划了。
 
例如heat haze,god rays (通过屏幕空间使用亮度溢出,或者在场景里手动的增加mesh),motion blur (似乎是一种混合的方法,通过一个特殊的pass在相机的旋转方向上做定向模糊,并使用stencil buffer作为mask来剔除玩家角色的pixel)。
 
你的角色死亡时的"Wasted"屏幕是纯粹的后处理,把渲染的场景模糊后,转为灰度图,加入vignetting(图像四周的暗角)和胶片的颗粒感后再把"wasted"的文字绘制在上面。
 
 
希望这些可以揭露一些Rockstar创造出被认为是在视频游戏历史上有里程碑意义游戏的秘密。
广阔的场景,沉浸感和对细节的关注,以及Rockstar设法在老世代的家用机上运行,使得GTA V成为了一款非常伟大的游戏。
 

链接

The tech that built an empire: how Rockstar created the world of GTA 5 featuring an interview of Aaron Garbut.
 
GTA V NVIDIA Performance Guide with details about the different graphics settings.

Renderdoc which made picking into GTA V internals a breeze.
 
 
 
 

Grand Theft Auto V 图形研究(3)的更多相关文章

  1. Grand Theft Auto V 图形研究(2)

    原文链接 http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-2/   Level of Detail 如 ...

  2. Grand Theft Auto V (侠盗列车手5)图形研究

    原文地址:http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/   原文的简介: GTA(侠盗猎车)系列自从1997 ...

  3. 怎样关闭WIN7系统的自动更新

    百度经验 > 游戏/数码 > 电脑 > 电脑软件 怎样关闭WIN7系统的自动更新 听语音 | 浏览:108460 | 更新:2012-07-24 18:03 | 标签:win7 1 ...

  4. (转)Multi-Object-Tracking-Paper-List

    Multi-Object-Tracking-Paper-List 2018-08-07 22:18:05 This blog is copied from: https://github.com/Sp ...

  5. Lessons Learned from Developing a Data Product

    Lessons Learned from Developing a Data Product For an assignment I was asked to develop a visual ‘da ...

  6. AI佳作解读系列(三)——深度学习中的合成数据研究

    Below are some investigation resources for synthetic datasets: 1. Synthetic datasets vs. real images ...

  7. 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)

    目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...

  8. Deferred Shading 延迟着色(翻译)

    原文地址:https://en.wikipedia.org/wiki/Deferred_shading 在3D计算机图形学领域,deferred shading 是一种屏幕空间着色技术.它被称为Def ...

  9. 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)

    http://blog.csdn.net/solomon1558/article/details/70173223 Torontocity HCI middlebury caltech 行人检测数据集 ...

随机推荐

  1. [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)

    近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...

  2. C语言中,宏和全局变量的区别是什么?

    全局变量 是可以在程序中任何地方使用 而且是可以修改的 宏定义也可以在任何地方使用 但是不能在之后修改 数据类型没有限制的 宏的例子:#define 宏名 宏体 #define PI 3.141592 ...

  3. POJ 3461 Oulipo KMP

    题意:统计其中一个子串的出现次数 题解:即KMP算法中j==m的次数 //作者:1085422276 #include <cstdio> #include <cmath> #i ...

  4. 使用jQuery实现类似开关按钮的效果

    转自:http://www.cnblogs.com/linjiqin/p/3148228.html 本案例实现类似开关按钮效果. 页面有下拉列表.文本框.按钮等表单元素,大致实现如下效果:1.页面一加 ...

  5. 异步加载图片Universal-Image-Loader

    项目地址:https://github.com/nostra13/Android-Universal-Image-Loader

  6. maven打的jars项目,log4j不会输出日志

    通过maven打完包,运行jars时,会输出警告 log4j:WARN No appenders could be found for logger (com.dlht.DataCenterSYNC. ...

  7. Winedt打开tex文件报错error reading的解决方案

    我刚装就发现winedt打开一些.tex文件时会出现reading error,然后看不到任何文字(网上有人讨论打开是乱码的问题,但是我的是完全看不到任何东西),我的系统winxp,网上有人说好像是和 ...

  8. html 绘制图像

  9. Wireshark分析非标准端口号流量

    Wireshark分析非标准端口号流量 2.2.2  分析非标准端口号流量Wireshark分析非标准端口号流量 应用程序运行使用非标准端口号总是网络分析专家最关注的.关注该应用程序是否有意涉及使用非 ...

  10. 首发 手把手教你制作 Windows8 应用程序内部的 hubtile (动态瓷砖控件) MetroStyle(转)

    http://blog.csdn.net/wangrenzhu2011/article/details/8175492 (转) 在metro 风格中 动态磁贴是他的精髓 在wp7 的开发中 我们可以使 ...