● 媲美电影CG画质——镶嵌式细分曲面技术 游戏和电影CG动画,其实都是由计算机渲染出来的,那为什么画质差别那么大呢?这是因为CG动画的模型要比3D游戏复杂成千上万倍,所以CG也要成千上万倍与电脑的性能才能渲染出来,而且还无法实现实时渲染。 3D游戏考虑到家用电脑的机能,模型不可能设计得太复杂,否则就不具备可玩性。但为了让游戏变得更加逼真、达到更高画质,太简单的模型的确拿不出手,那么有什么方法既能大幅提升模型复杂度、又不至于给显卡造成太大负担呢?Tessellation技术就是为此而生的。 简单来说,Tessellation是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。
实现相同的模型细节,Tessellation显然比直接建模更快更高效 除了大幅提升模型细节和画质外,Tessellation最吸引程序员的地方就是:他们无需手动设计上百万个三角形的复杂模型,只需简单勾绘一个轮廓,剩下的就可以交给Tessellation技术自动镶嵌,大大提高开发效率;而且简单的模型在GPU处理时也能大幅节约显存开销,同时大幅提升渲染速度! ● Tessellation的妙用 Tessellation技术的原理很简单,就是把简单的模型智能的镶嵌成为复杂模型,使得游戏中的景物变得更加细腻真实。实际上除此之外Tessellation还能实现一些令人意想不到的功效:
DX11代表作《DiRT2》就大量使用了Tessellation技术,它用Tessellation构建了动态水面、动态布料旗帜和观众人物模型,其中加强人物模型不难理解,而动态水面和布料效果足以媲美物理加速,让人惊讶不已! Tessellation(细分曲面)水面效果对比
DX11模式
DX9模式 Tessellation(细分曲面)布料效果对比
DX11
DX9 虽然XBOX360和ATI的全线DX10显卡都支持Tessellation技术,但支持Tessellation游戏并不多,随着DX11将Tessellation作为一项重要技术纳入API规范之后,未来DX11游戏都将会支持这一技术,但由于DX11中的Tessellation和DX10/DX9版本有很大的区别,因此并不会向下兼容,Tessellation只能通过DX11显卡在DX11游戏中才能实现。 ● 代表游戏:《潜行者:普里皮亚季的呼唤》、《科林麦克雷:尘埃2》、《异形大战铁血战士》(即将发布)
● 动态逼真——物理效果的实现 3D游戏中“物理”指的是什么呢?简言之就是模拟真实世界中的物理定律,使得运动物体产生一些复杂的交互性干涉,从而改变形状、轨迹或状态的一种技术。比如:流体(水、烟、雾)、碰撞、变形、爆炸、毁坏、布料、碎片……物理技术虽然属于图形技术的一种,但所涉及到的运算并非是图形渲染,而是大量的并行计算,等结果算出来之后才会进行后续的渲染操作。
3D游戏中一些典型的物理应用
这里为什么要强调GPU物理加速呢,因为CPU物理加速其实早就进入实际应用阶段,但由于CPU性能有限(或者说CPU并不擅长做物理运算),大多数游戏仅采用了少许简单的物理效果作为点缀,未能给玩家带来视觉上的震撼力,也就容易被大家所忽视。比如《半条命2》系列游戏都使用了物理技术,在击穿木板或爆炸时会有一定的破坏效果,但如果不特别指出的话您可能注意不到。
Crysis爆炸时的物理效果不错(CPU加速),但在场景毁坏与交互方面略有不足
● 物理引擎并不是只有PhysX一种,但只有PhysX支持GPU加速
除了CPU外,还有专用的PPU(即物理加速卡)来进行物理运算,但随着GPU进入DX10时代,并行架构的流处理器拥有比PPU和CPU更强大的浮点运算能力,GPU物理加速技术被提上日程。终于,在NVIDIA收购Ageia公司之后,通过CUDA技术将PhysX物理引擎重新编译了一遍,使得GeForce 8以上的N卡都能够支持物理运算,通过大量的测试来看,即便是低端N卡的物理加速能力也要比专用的物理加速卡强,CPU跟它根本不是一个级别。
就拿最近比较热门的《蝙蝠侠:阿卡姆疯人院》这款游戏来说,是否开启PhysX有着天壤之别,PhysX能够让蝙蝠侠的披风更拉风、地洞中的雾气在人经过时产生互动、地面上的碎片和纸屑在打斗过程中飞舞、地板砖桌椅墙壁都有可能被打碎、布料和旗帜随风而动……
物理引擎也不是只有PhysX一种,已经被Intel收购的Havok也提供了很不错的物理解决方案,但目前支持GPU加速的还只有PhysX这一种,由于GPU拥有很强的运算能力,因此PhysX引擎所实现的物理效果最为出色,但对显卡的要求也很高。
开启PhysX之后是十分消耗资源的,GTS250以下级别的显卡性能损失特别大,最好是能安装一块额外的显卡做专门的物理加速运算,而GTX260+以上级别的显卡则可以同时处理图形渲染和物理加速运算,能够保证不低于30帧的速度。至于A卡则不支持PhysX加速,强行开启的话只能使用CPU进行运算,效率自然非常低下,不过使用A卡做渲染N卡做物理加速也是个临时解决方案。
● 代表游戏:《虚幻竞技场3》、《镜之边缘》、《雪域危机》、《蝙蝠侠:阿卡姆疯人院》
● 大名鼎鼎的HDR技术再次缩水
HDR(High Dynamic Range,高动态范围光照)技术相信很多人并不陌生,想当年DX9C SM3.0面世时,正是凭借HDR技术一举成名,HDR所带来的绚丽光影效果给玩家极强的视觉震撼,但却产生了很多负面效果,这些历史遗留问题时至今日都没有得到完美解决。
几乎所有的图形技术都是随着时间的推移来进一步增强效果,只有HDR被一而再再而三的“缩水”,这是为什么呢?
● DX9C时代HDR与AA水火不容
HDR技术通过采用浮点格式的颜色代码来为纹理、光照等计算提供极大的精度和颜色范围(以前的纹理一般都是采用整数型的颜色格式)。尽管最后显示到屏幕上还是每个颜色通道8位的整数格式,但是以前的材质、光照计算中纹理也是用每通道8位的格式来参与计算,所以在显示到画面之前,很多细节就在低精度的运算中丢失了。
HDR效果虽然很美,但在DX9C模式下进行16位浮点(FP16)运算时,会占用到原本属于多重采样抗锯齿(MSAA)的缓冲区域,使得游戏开启HDR后无法进行FSAA处理。当年的一大批DX9C游戏都是如此,比如《孤岛惊魂》、《细胞分裂》、《虚幻3》引擎的全系列游戏。
● ATI X1000和XBOX360是个例外
ATI的DX9C显卡发布较晚,因此在设计之初就考虑到了HDR+AA的需要,整合了额外的缓存,只要通过游戏或者驱动重新指定另外的缓冲区,就能完美支持HDR+AA效果,所以X1000系列和XBOX360主机都能支持HDR+AA。
不过ATI的HDR+AA方案并不是业界标准,还是有不少游戏无法同时开启HDR和AA,通过驱动强行更改缓冲区的方式和一些游戏有兼容性问题,ATI官方都不认可这种做法。
● DX10时代,新增两种HDR颜色格式
为了解决困扰业界已久的HDR+AA问题,微软在DX10当中加入了两种新的HDR格式,对每个颜色通道16位浮点数的格式进行删减,第一种是R11G11B10(红色绿色各11位,蓝色10位,总计32位),另一种是红绿蓝各9位共享5位指数(计算机中浮点数是尾数附加指数的形式来表示)。
新增的两种HDR格式都只有32位,而并非DX9C时代的48位(FP16x3),所以动态范围精度有些下降,但好处就是新的HDR不会与MSAA抢占缓冲区,所消耗的显存也大大减少,效率和兼容性提高,至于光影效果的缩水其实很难看出来。
● DX11时代,新增HDR纹理压缩技术
HDR除了不支持抗锯齿外,还不支持纹理压缩技术,因为HDR在设计之初的要求就是光照和纹理都必须保持高精度。随着时代的发展,游戏的分辨率越来越高,纹理贴图越来越精细,而纹理贴图如果不经压缩就放在显存里面的话,容量是相当恐怖的,因此新一代的游戏显存消耗成倍增加,这其中罪魁祸首其实还是HDR技术。
为了解决这个显存消耗大户,在DX11当中又新增了一种专为HDR设计的纹理压缩格式:BC6H,压缩比高达6:1。
上图展示的是图像通过BC6H压缩模式进行压缩的前后效果对比图。其中左边的图像为原始图像,中间的是在压缩过程中损失的一些细节,而右边的就是压缩后的图像。可以看出,从画质上来看几乎没有损失(肉眼看不出),但是却可以大幅度降低显存的占用。
经过了DX9C、DX10和DX11三代API,HDR技术在神不知鬼不觉的情况下被两次“缩水”之后,才真正走向成熟,由此可见好的图形技术不光是要效果出色,更重要的是拥有高效率和实用性,才能被更多的游戏所接受,被更多的显卡所支持。
● 代表游戏:几乎所有主流游戏都有使用HDR效果,时至今日依然有一些采用虚幻3引擎的游戏无法同时开启HDR和AA,需要通过修改的方式实现
● 传统纹理贴图的弊端
纹理贴图大家都明白,就是往建好的3D模型上“贴”一些二维的画面,让人物显得更真实一些,比如常见的砖墙、凹凸不平的地面等,这些如果全部用三角形来实现的话,那么模型就会非常复杂,GPU将会不堪重负,但如果用“一张已经画好砖纹的纸”贴上去的话,那么渲染起来就会轻松好多。
但是这么做也有很大的缺点,贴图毕竟是2D的,如果在游戏中换个角度看的话,很容易就会发现墙面没有任何立体感,砖纹看上去非常假!为了让2D贴图看上去也有3D立体效果,就诞生了多种贴图技术,比如凹凸贴图、法线贴图、位移贴图、视察映射贴图等。
● 凹凸贴图
凹凸贴图技术简单说起来是一种在3D场景中模拟粗糙表面的技术,将带有深度变化的凹凸材质贴图赋予3D物体,经过光线渲染处理后,这个物体的表面就会呈现出凹凸不平的感觉,而无需改变物体的几何结构或增加额外的点面。例如,把一张碎石的贴图赋予一个平面,经过处理后这个平面就会变成一片铺满碎石、高低不平的荒原。当然,使用凹凸贴图产生的凹凸效果其光影的方向角度是不会改变的,而且不可能产生物理上的起伏效果。
凹凸贴图的墙壁效果,注意看边缘其实没有任何凹槽
凹凸贴图在今天看来已经是老的不能再老的一种技术了,虽然能够获得凹凸的效果,但是凹凸的程度非常受限制,基本上只能做出一些简单的浮雕效果来。这种技术通常用在一些观察视角变化很小的情况上,例如地面,墙壁,远处的一些模型等等,如果角度稍微一大,你就会发现那些凹坑其实是根本不存在的。
● 法线贴图
法线贴图就是把一个表面的凹凸情况用每个点的法线向量记录下来,在贴图的时候根据法线贴图做光影的变换,从而实现凹凸效果。
法线贴图比起凹凸贴图而言,能够实现的效果更好了,相对的就是运算量更大了,需要大量的纹理材质,每个象素的光照情况都需要计算这个点的法线向量和光照情况的夹角计算该点的亮度和颜色。为了节约GPU资源,ATI曾开发了3DC+纹理压缩技术,这对于法线贴图有莫大的帮助。
当然,法线贴图技术同样不是完美的,它也有着自己的不足,凹凸贴图没有能够解决的切向效果问题肯定是仍然不能够得到解决。此外,就是法线贴图技术不能够解决解决更大的凹凸情况的效果。大家如果去观察的话,法线贴图效果能实现的通常是一些内凹或者外凸不是很严重的表面效果。
● 视差映射贴图
为了解决法线贴图在处理较深内凹之时不能够达到的弊端,诞生了新的视差映射贴图技术。该技术其实称之为视差遮蔽贴图似乎更容易理解一些,因为它会对纹理的坐标做变换,一些凸出的纹理会遮蔽到其他的纹理,这样就会看起来具备更好的凹凸的感觉了。
ATI X1000 Demo中就包含了视察映射技术
正如我们在上图看到的情况一样,地面上的石块的凹凸感觉非常好,前面的石块已经对后面的石块进行了局部的遮蔽。虽然这个Demo中的砖块依然很假,但砖块之间凹凸的效果已经得到了完美体现,非常遗憾的是,没有任何一款DX9游戏使用过这种视差贴图技术。
● 直到DX10时代才大量使用视差映射贴图技术
视差贴图技术的实现原理,其实和法线贴图是一样的,都是根据法线贴图进行的处理,所以我们可以把它当作是法线贴图的一种衍生技术。视差贴图技术的实现是和硬件没有必然联系的,这个技术概念的诞生其实也非常早,只是未能得到大量使用,这是因为视差贴图技术的运算量要比法线贴图大了不少,原来的显示芯片因为性能有限基本都运行不了。
狂野西部DX10版本首次使用了视差映射贴图
《孤岛危机》中的石块和地面都使用了视察映射贴图
最早使用视差映射贴图技术的游戏叫做《狂野西部》,首批DX10游戏之一,DX9版本不支持。由于DX10显卡都采用了统一渲染架构,可以方便的集中利用Shader资源,来渲染出复杂的特效。再加上有全新的几何着色器辅助,因此特效的运用方面可以更加灵活,游戏开发商可以很容易的自定义一些特效渲染方式,所以将先进的技术都安置在DX10模式之中也是无可厚非。
● 代表游戏:《狂野西部》、《孤岛危机》、《潜行者》
游戏中所使用的图形技术动辄数以百计,即便是像3DMark这样简短的测试程序中,也包含了数十项先进的、甚至是独创的渲染技术,有些技术甚至连一个像样的名字都没有,而真正能得到广泛使用、被3D游戏爱好这所熟知的技术,确实是屈指可数。
Crysis的画面之所以如此完美,是因为几乎所有的高级图形技术它都有所使用
所以,本文只是有选择性的介绍了一些知名的、肉眼看得出差别、能明显提升游戏画质的图形技术,其实在这些风光无限技术的背后,还有很多默默无闻的、用以提升渲染效率的辅助技术。
Tessellation技术的坎坷发展历程
而且,这些图形技术也不是一朝一夕就能得到程序员的青睐、并获得游戏玩家的认可,比如HDR技术时至今日依然存在兼容性问题、动态模糊和景深经过三代API的改良效果才令人满意、Tessellation技术更是经过六代七年的发展才修成正果!
每一代图形API的革新,一方面是加入新的特效、让画面变得更完美,另一方面是通过新的指令提升运算效率。显卡进入DX10时代后,画面已经达到了巅峰,很难再有较大的突破,因此后续的DX10.1和DX11都主要是为了优化算法,使得游戏运行更加流畅,也有利于游戏开发者使用更多、更强的图形技术,营造出更逼真的3D画面!
|