前言
一部又一部的游戏大作降临,每个游戏都声称要给玩家“真实”的体验。当然既然叫做游戏就不可能是真实的,但游戏制作商们都在不断想办法使游戏更加接近现实,使用各种3D效果去模拟现实中的种种现象。可能还有不少玩家朋友对这些视觉效果名词还不大了解,于是有了本文。本文就是用简单的语言,简要地介绍目前应用在游戏中的一些比较热门的视觉效果。
目录:
#2 - 动态模糊(Motion Blur)
#3 - 景深(Depth Of Field)
#4 - 软阴影(Soft Shadow)
#5 - 高动态光照(High Dynamic Range)
#6 - 贴图技术
#7 - 次表面散射(SubSurface Scattering)
#8 - 体积云/雾(Volumetric Clouds/Fog)
#9 - 体积光(Volumetric Light)
#10 - SpeedTree
#11 - 延迟渲染(Deferred Rendering)
本文说明:
文章是我在网上搜集资料,再加上一些个人语言整理而成,可能你看到某些语言、某些图片会觉得熟悉。我尽量做到以简单的语言去介绍,所以并不涉及多少深层理论的东西。同时因为是简介,自然要尽量控制好字数,如果觉得看了还不过瘾,网上搜索每个名词还能得到很多资料,包括你看得懂和看不懂的^^。为了版面简洁,也考虑大家的网速,所有大图片都统一压缩为800*xxx的尺寸。当然,论坛也不乏各种技术型的高手,我个人的水平也是有限的,也还请各路高手多多指教。如果文章有什么错误、漏洞的地方,欢迎指出,大家一起讨论!
动态模糊(Motion Blur)
3D游戏玩家会问这么个问题:为什么每秒24帧的速度对于电影来说已经足以获得很流畅的视觉效果,而对于电脑游戏来说却非常不流畅?原因很简单,摄像机在工作的时候并非一帧一帧绝对静止地拍摄,它所摄下的每一帧图像已经包含了1/24秒以内的所有视觉信息,包括物体在这1/24秒内的位移。如果在看电影的时候按下暂停键,我们得所到的并不是一幅清晰的静止画面,而是一张模糊的图像。
电影《变形金刚》截图,帧速为23.98fps
传统的电脑3D图像做不到这一点,游戏里的每一帧就是一幅静止画面,如果你在运动的过程中抓一张图片下来,得到的肯定是一幅清晰的静态图。所以,动态模糊技术的目的就在于增强快速移动场景的真实感,这一技术并不是在两帧之间插入更多的位移信息,而是将当前帧同前一帧混合在一起所获得的一种效果。
《极品飞车:卡本峡谷》采用的动态模糊,但效果不好,表现太夸张,时间长很容易让人感到不适。
《孤岛危机》的动态模糊改善了很多,表现效果也好了很多,据称是得益于DX10引入了几何渲染器。
景深(Depth Of Field)
有摄影基础的朋友一定都熟悉“景深”这个词。如果非要解释这个词的话就是“在摄影机镜头或其他成像器前,沿着能够取得清晰图像的成像器轴线所测定的物体距离范围”。说得再简单一些,就是距离不同的景物,呈现出有些地方清楚有些地方模糊的效果。这种效果能够更加突出需要反应的焦点,让画面的主题更加鲜明。
我们观察下面的两张图片,就能非常明显的看出景深的效果。在第一张图片中,手持长棍的忍者是清楚的,后面的景物时模糊的。而在第二张图片中,焦点移到了后面的景物上,前景的忍者反而变成了模糊的效果了。这样的效果更符合人肉眼对自然环境观察的结果,也就因此令玩家的感受更真实。
《使命召唤4》使用的景深效果
在FPS游戏中景深效果往往用在木仓械的瞄具上。在游戏中使用机械瞄具的时候,人的注意力必然高度集中,准心以外的区域都模糊。
《孤岛危机》中景深效果大放异彩
软阴影(Soft Shadow)
从字面上直译过来就是“软阴影”,不过叫“柔和阴影”似乎更合适。我们知道生活中很多阴影的过渡都是有渐变,而软阴影的作用就是要模拟这种效果,在阴影周边制造虚化的效果。软阴影本身并不是指一种技术,而是指通过采用某种技术达到的效果。
在说软阴影前先说说阴影的生成方法。一般在游戏中采用的阴影生成方法有两种:Shadow Mapping(阴影映射)和Shadow Volumes(体积阴影)。
Shadow Mapping(阴影映射)是一种图像空间的技术,它是在以光源位置作为视点的情况下渲染整个场景的深度信息,然后再使用这些深度信息去决定场景的哪一部分是处于阴影之中。它有锯齿并且依赖z-缓冲技术。由于可以在不减少帧率的情况下达到真实感光照和阴影效果,编辑器允许在场景中放置任意数目的静态光源,它会为每个面预计算光流量(light flow)和静态阴影,因此现代商业3D游戏中多数都会使用到阴影映射。阴影映射效果的一个影响因素是Shadow Map Size,如果size(尺寸)小,会导致阴影边缘模糊不清、闪烁、出现大型锯齿。增大size能提高阴影质量,但帧速会受到影响。
Shadow Map Size太小(上图),增大Size之后(下图)
对于在阴影映射下实现软阴影,通常是在阴影边界进行高精度超级采样的方法,如虚幻3引擎就是进行16X的超级采样,这就是软阴影消耗系统资源大的原因。
《生化冲击》使用阴影映射,表现出色。
《西部狂野》的Shadow Map Size高达2048*2048,生成的阴影效果非常好,当然对硬件要求也高。
《尘埃》的Shadow Map Size更是前所未有地达到了4096*4096,阴影柔化效果也很到位,它的硬件要求大家也是清楚的。
《孤岛危机》的阴影效果当然是顶级的了,除了使用阴影映射,还使用了大量高级技术(如高精度采样、屏幕空间环境光遮蔽等)
Shadow Volumes(体积阴影)是一种基于几何形体的技术,它需要几何体在一定方向的灯光下的轮廓去产生一个封闭的容积,然后通过光线的投射就可以决定场景的阴影部分(常常使用模板缓冲去模拟光线的投射)。这项技术是像素精确的,不会产生任何的锯齿现象,但是与其他的技术一样,它也有缺点。最主要的两个问题一是极度依赖几何形体,二是需要非常高的填充率。同时,体积阴影也相当依赖CPU,视觉效果方面是产生的阴影比较“硬”。
目前使用体积阴影的游戏不多,《DOOM3》和《F.E.A.R.》就是典型,在游戏中仔细观察你会发现它们的阴影和其他游戏的明显不同
《F.E.A.R.》是第一个采用了软阴影的游戏,它的软阴影实现方法是在光源在自身附近进行自我复制,产生多个不同亮度的阴影再混合起来,这种软阴影效果似乎不怎么理想,边缘看起来有层状感,系统资源开销也大。
高动态光照(High Dynamic Range)
很多人对HDR的第一感觉就是“太亮了、好刺眼、受不了”。其实HDR并不是像许多玩家理解的那样就是简单的“高亮”,不是让画面有更大的亮度或是对比度。大家都知道,当人从黑暗的地方走到阳光下时,我们的眼睛会不由自主的眯起来,那是因为在黑暗的地方,人为了更好的分辨物体,瞳孔张开很大,以便吸收光线;而突然到了光亮处瞳孔来不及收缩,视网膜上的视神经无法承受如此多的光线,人自然会眯上眼睛阻止大量光线冲击视神经。
我们的眼睛非常敏感,而电脑就不具备这种功能,因此就通过HDR技术在一瞬间将光线渲染得非常亮,然后亮度逐渐降低。所以,HDR的最终效果应该是亮处的效果是鲜亮的,而黑暗处你也可以清晰的分辨物体的轮廓,位置和深度,而不是以前的一团黑。动态、趋近真实的物理环境是HDR的特效表现原则。
高亮的部分仍保持了相当丰富的细节
HDR并不仅仅是反射的光强度要高。在游戏中,如果你盯着一个面向阳光直射的物体,物体表面会出现丰富的光反射;如果盯着不放,物体表面的泛光会渐渐淡出,还原出更多的细节。HDR特效是变化的,因此称做高动态光照。
HDR是分种类的,一般按可精度分为:Int16(整数)、FP16(浮点)、FP32等等,数字越大精度越高,运算量当然也越大。其中Int格式的HDR在SM2.0下即可实现(如半条命2:失落的海岸线、第一章、第二章),FP格式要SM3.0或以上才能实现(目前有HDR的游戏基本都是FP格式),在DX10中HDR的精度已经提升到FP128。
说到HDR不得不提另外一个特效:BLOOM。BLOOM也能实现和HDR类似的效果,但BLOOM的是静态的,HDR是动态渐变的,BLOOM在细节表现、明暗对比不如HDR,这是BLOOM与HDR的重要区别。实现HDR效果的系统资源开销也比BLOOM大。
3Dmark06中绚丽的HDR效果
这样的HDR效果未免有点倒胃口,太夸张了。(半条命2:失落的海岸线)
《无限试驾》的HDR效果我是比较认同的。
《彩虹6号:维加斯》、《生化冲击》的也不错。
《孤岛危机》的HDR使用已经非常成熟
虚幻3引擎演示的HDR效果:
游戏中贴图是2D的,如果在游戏中换个角度看的话,很容易就会发现墙面没有任何立体感,砖纹看上去非常假!为了让2D贴图看上去也有3D立体效果,就诞生了多种贴图技术,比如凹凸贴图、法线贴图、位移贴图、视察映射贴图等。
凹凸贴图(Bump Mapping)
凹凸贴图技术简单说起来是一种在3D场景中模拟粗糙表面的技术,将带有深度变化的凹凸材质贴图赋予3D物体,经过光线渲染处理后,这个物体的表面就会呈现出凹凸不平的感觉,而无需改变物体的几何结构或增加额外的点面。例如,把一张碎石的贴图赋予一个平面,经过处理后这个平面就会变成一片铺满碎石、高低不平的荒原。当然,使用凹凸贴图产生的凹凸效果其光影的方向角度是不会改变的,而且不可能产生物理上的起伏效果。
凹凸贴图在今天看来已经是老的不能再老的一种技术了,虽然能够获得凹凸的效果,但是凹凸的程度非常受限制,基本上只能做出一些简单的浮雕效果来。这种技术通常用在一些观察视角变化很小的情况上,例如地面,墙壁,远处的一些模型等等,如果角度稍微一大,你就会发现那些凹坑其实是根本不存在的。
凹凸贴图渲染出的墙壁,注意看边缘其实没有任何凹槽
法线贴图(Normal Mapping)
法线贴图技术通过计算高细节度模型的法线信息并将其保存在一张高压缩比(3DC/DC5)的法线贴图之中,然后将这张法线贴图贴用于低细节模型上代替原型的多边形曲面的光照计算,从而等到一个低多边形、高细节的3D模型。这样做就能在保证模型细节的情况下,大幅度降低场景的多边形数目。法线贴图目前已经广泛应用于3D游戏中。
视觉效果达到1亿多边形的场景,通过线框显示发现只用了50万多边形。(虚幻3引擎场景)
在3D Max中渲染一个相同的高精度模型需要200万多边形,而采用Normal Map后的效果. 模型本身只有5287面。(虚幻3引擎的怪物模型,兰姆将军?)
法线贴图在《孤岛危机》里的应用,立体感表现得非常好
视差贴图(Parallax Mapping)
视差贴图技术我们其实应该称之为视差遮蔽贴图技术,因为在这一技术中,会对纹理的坐标做变换,一些凸出的纹理会遮蔽到其他的纹理,这样就会看起来具备更好的凹凸的感觉了。视差贴图技术的实现原理,其实和法线贴图是一样的,都是根据法线贴图进行的处理。视差贴图比法线贴图提供更好的视觉效果,而且跟法线贴图有同一个目的:在保证模型细节的情况下,大幅度降低场景的多边形数目。
《S.T.A.L.K.E.R.》中的视差贴图效果,砖块和石板上的凹痕表现十分生动
《孤岛危机》中使用的视差消隐贴图,堪称目前Bump mapping技术的极致!逼真的鹅卵石让人留下深刻的印象!
《西部狂野》DX10版也能开启视差贴图(留意右下角的砖块)
次表面散射(SubSurface Scattering,简称3S)
目前使用次表面散射效果的游戏极少,似乎就只有《孤岛危机》。它主要用于模拟不完全透明材质内部表现出的一种真实光影特效。当灯光照射到玻璃或清澈的液体表面时,灯光会穿透这些介质,3S效果可用来模拟灯光进入介质内部后发生的散射。
《孤岛危机》中树叶的透光性:
3S的另一个重要用处在于表现光源照射下的人物皮肤,换句话说,要想表现真实的皮肤材质,3S效果必不可少。目前的许多游戏在人物皮肤的渲染上就因为缺乏3S效果而显得塑料化、橡胶化。
《F.E.A.R.》人物缺乏3S效果,塑胶感较大。
CryEngine 2使用3S效果生成的人物脸部。
《孤岛危机》的人物脸部效果非常出色!
照片级的CG图,同样采用了3S,效果惊人!
体积云/体积雾(Volumetric Clouds/Fog)
简单地说,在游戏中的体积云就是使用图像引擎来模拟真实云雾半透明、无规则的表现效果。
在早期游戏中,实现云雾烟火效果的方式常常使用贴图的方法。CS中可以很清楚的看到这一点。将烟雾品质改为“低”时,CS中烟雾的表现如同灰白色的墙壁一般。采用云雾烟火贴图的游戏经常会降低透过云雾贴图之后远景效果,甚至替换远景贴图,仔细观察就会发现,而体积云则不会。
CS的烟雾弹效果,可以看到层状的材质
《使命召唤4》在关闭烟雾柔化后,也表现出同样效果。
事实上,体积云本身的定义就比较模糊,欧美业界的观点是:通过3D引擎实时生成的、能够随时间流逝而自动改变的、能够和物力引擎互动产生变化的(比如飞机飞过云雾散开),才能称为体积云/体积雾。
《孤岛危机》中采用的就是体积云效果
《冲突世界》也大量使用了体积云
《生化冲击》在DX10才能开启体积云效果
体积光(Volumetric Light)
先来看下面一个现实世界的光线图,在3D图形中要实现这种效果就是体积光(Volumetric Light)。目前的游戏都是在DX10下才有体积光效果,看来是得益于DX10的渲染架构的改进,使体积光这种高级特效得以更容易地在游戏中实现。
《冲突世界》的招牌DX10效果-体积光
《孤岛危机》作为DX10的招牌游戏当然少不了体积光效果。
CryEngine 2演示视频,可以注意到,当主角经过时,木仓支会被透射的光线照耀到
《孤岛惊魂》《半条命2:失落的海岸线》的光束效果似乎比较生硬、呆板,光照强度一成不变,也不会留下恰当的阴影,显然是预先安排好的,并非真正的体积光效果。
SpeedTree
SpeedTree是一个专门的植被引擎。其技术最大的特征就是可以在使用极少多边形的情况下创造出高度逼真的树木和植物,并且可以调整风速效果,使得这些植物随着风的吹动而真实地摇动。游戏开发者就可以直接在特定地形上生成整个森林,无需将树一棵一棵地设置在相应地点上,大大提高了工作效率。并且通过SpeedTree的代码优化技术,画面上数量繁多的枝叶不会对画面帧数造成太大影响。
虚幻3引擎整合了SpeedTree技术,虚幻3引擎制作的游戏都可以用SpeedTree技术快速生成大量高品质的植被。
《上古卷轴4》用SpeedTree创造了一个神奇的世界。
《冲突世界》也使用了SpeedTree技术。
延迟渲染(Deferred Rendering)
延迟渲染技术可以说是未来游戏的发展趋势,其原理是先把全景多边形物体的信息比如位置、法线面、各种贴图渲染到G-Buffer(缓冲区)内,延迟打光步骤。
延迟渲染可以避免在渲染过程中出现无效渲染(渲染器在运算过程中做了某些无用功)的现象和提高出现大量复杂、耗时的像素渲染时的工作效率。
延迟渲染可以创建大量的点光源以及产生真实的光照结果,提高画面的真实度;也可以避免对不可见的点进行光照,节省了资源。不过,延迟渲染并不是很适合DX9,在目前的硬件上必须以牺牲MSAA(多重取样抗锯齿)为代价(使用了延迟渲染的《S.T.A.L.K.E.R.》、《幽灵行动:尖峰战士》都无法支持多重取样抗锯齿),而在新的DX10硬件上则没有问题 。最新版本的UE3引擎已经为DX10做了优化,MSAA已经完全没有问题(《战争机器》PC版在DX10下即可开启抗锯齿),但是之前面世的几个采用UE3的游戏都是基于老版本的UE3开发,所以对MSAA的支持还存在各种问题。对于目前的几个UE3引擎游戏,它们并未使用延迟渲染技术。
目前使用了延迟渲染技术的游戏有《S.T.A.L.K.E.R.》、《幽灵行动:尖峰战士》系列。