3D眩酷技巧
一些常见的3D渲染技巧
动态模糊(Motion Blur)
3D游戏玩家会问这么个问题:为什么每秒24帧的速度对于电影来说已经足以获得很流畅的视觉效果,而对于电脑游戏来说却非常不流畅?原因很简单,摄像机在工作的时候并非一帧一帧绝对静止地拍摄,它所摄下的每一帧图像已经包含了1/24秒以内的所有视觉信息,包括物体在这1/24秒内的位移。如果在看电影的时候按下暂停键,我们得所到的并不是一幅清晰的静止画面,而是一张模糊的图像。
传统的电脑3D图像做不到这一点,游戏里的每一帧就是一幅静止画面,如果你在运动的过程中抓一张图片下来,得到的肯定是一幅清晰的静态图。所以,动态模糊技术的目的就在于增强快速移动场景的真实感,这一技术并不是在两帧之间插入更多的位移信息,而是将当前帧同前一帧混合在一起所获得的一种效果.
极品飞车:卡本峡谷》采用的动态模糊,但效果不好,表现太夸张,时间长很容易让人感到不适
《孤岛危机》的动态模糊改善了很多,表现效果也好了很多,据称是得益于DX10引入了几何渲染器
景深(Depth Of Field)
有摄影基础的朋友一定都熟悉“景深”这个词。如果非要解释这个词的话就是“在摄影机镜头或其他成像器前,沿着能够取得清晰图像的成像器轴线所测定的物体距离范围”。说得再简单一些,就是距离不同的景物,呈现出有些地方清楚有些地方模糊的效果。这种效果能够更加突出需要反应的焦点,让画面的主题更加鲜明。
我们观察下面的两张图片,就能非常明显的看出景深的效果。在第一张图片中,手持长棍的忍者是清楚的,后面的景物时模糊的。而在第二张图片中,焦点移到了后面的景物上,前景的忍者反而变成了模糊的效果了。这样的效果更符合人肉眼对自然环境观察的结果,也就因此令玩家的感受更真实
在FPS游戏中景深效果往往用在枪械的瞄具上。在游戏中使用机械瞄具的时候,人的注意力必然高度集中,准心以外的区域都模糊。
软阴影(Soft Shadow)
从字面上直译过来就是“软阴影”,不过叫“柔和阴影”似乎更合适。我们知道生活中很多阴影的过渡都是有渐变,而软阴影的作用就是要模拟这种效果,在阴影周边制造虚化的效果。软阴影本身并不是指一种技术,而是指通过采用某种技术达到的效果。
在说软阴影前先说说阴影的生成方法。一般在游戏中采用的阴影生成方法有两种:Shadow Mapping(阴影映射)和Shadow Volumes(体积阴影)。
Shadow Mapping(阴影映射)是一种图像空间的技术,它是在以光源位置作为视点的情况下渲染整个场景的深度信息,然后再使用这些深度信息去决定场景的哪一部分是处于阴影之中。它有锯齿并且依赖z-缓冲技术。由于可以在不减少帧率的情况下达到真实感光照和阴影效果,编辑器允许在场景中放置任意数目的静态光源,它会为每个面预计算光流量(light flow)和静态阴影,因此现代商业3D游戏中多数都会使用到阴影映射。阴影映射效果的一个影响因素是Shadow Map Size,如果size(尺寸)小,会导致阴影边缘模糊不清、闪烁、出现大型锯齿。增大size能提高阴影质量,但帧速会受到影响。
对于在阴影映射下实现软阴影,通常是在阴影边界进行高精度超级采样的方法,如虚幻3引擎就是进行16X的超级采样,这就是软阴影消耗系统资源大的原因。
Shadow Volumes(体积阴影)是一种基于几何形体的技术,它需要几何体在一定方向的灯光下的轮廓去产生一个封闭的容积,然后通过光线的投射就可以决定场景的阴影部分(常常使用模板缓冲去模拟光线的投射)。这项技术是像素精确的,不会产生任何的锯齿现象,但是与其他的技术一样,它也有缺点。最主要的两个问题一是极度依赖几何形体,二是需要非常高的填充率。同时,体积阴影也相当依赖CPU,视觉效果方面是产生的阴影比较“硬”。
目前使用体积阴影的游戏不多,《DOOM3》和《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大。
游戏中贴图是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.》中的视差贴图效果,砖块和石板上的凹痕表现十分生动
次表面散射(SubSurface Scattering,简称3S)
目前使用次表面散射效果的游戏极少,似乎就只有《孤岛危机》。它主要用于模拟不完全透明材质内部表现出的一种真实光影特效。当灯光照射到玻璃或清澈的液体表面时,灯光会穿透这些介质,3S效果可用来模拟灯光进入介质内部后发生的散射。
《孤岛危机》中树叶的透光性
3S的另一个重要用处在于表现光源照射下的人物皮肤,换句话说,要想表现真实的皮肤材质,3S效果必不可少。目前的许多游戏在人物皮肤的渲染上就因为缺乏3S效果而显得塑料化、橡胶化。
《F.E.A.R.》、失落的星球(还是原生dx10游戏)人物缺乏3S效果,塑胶感较大。
体积云/体积雾(Volumetric Clouds/Fog)
简单地说,在游戏中的体积云就是使用图像引擎来模拟真实云雾半透明、无规则的表现效果。
在早期游戏中,实现云雾烟火效果的方式常常使用贴图的方法。CS中可以很清楚的看到这一点。将烟雾品质改为“低”时,CS中烟雾的表现如同灰白色的墙壁一般。采用云雾烟火贴图的游戏经常会降低透过云雾贴图之后远景效果,甚至替换远景贴图,仔细观察就会发现,而体积云则不会。
CS的烟雾弹效果,可以看到层状的材质
事实上,体积云本身的定义就比较模糊,欧美业界的观点是:通过3D引擎实时生成的、能够随时间流逝而自动改变的、能够和物力引擎互动产生变化的(比如飞机飞过云雾散开),才能称为体积云/体积雾。
《孤岛危机》中采用的就是体积云效果
积光(Volumetric Light)
先来看下面一个现实世界的光线图,在3D图形中要实现这种效果就是体积光(Volumetric Light)。目前的游戏都是在DX10下才有体积光效果,看来是得益于DX10的渲染架构的改进,使体积光这种高级特效得以更容易地在游戏中实现。
SpeedTree
SpeedTree是一个专门的植被引擎。其技术最大的特征就是可以在使用极少多边形的情况下创造出高度逼真的树木和植物,并且可以调整风速效果,使得这些植物随着风的吹动而真实地摇动。游戏开发者就可以直接在特定地形上生成整个森林,无需将树一棵一棵地设置在相应地点上,大大提高了工作效率。并且通过SpeedTree的代码优化技术,画面上数量繁多的枝叶不会对画面帧数造成太大影响。
虚幻3引擎整合了SpeedTree技术,虚幻3引擎制作的游戏都可以用SpeedTree技术快速生成大量高品质的植被