游戏玩家的图形显示设置指南(4)(The Gamer's Graphics & Display Settings Guide)
第四关 图形处理(第三部分)
第七步 GPU处理数据
现在GPU可以访问VRAM中的数据了,并且它在一个通常被叫做图形管线(Graphics Pipeline)的地方承担了一系列复杂的图形计算工作。这个“管线”拥有许多阶段(stages),这些阶段的作用是不停地将纯3D数据转换成在2维显示屏幕上的可以被看见的东东:
1.转换(Transformation) - 我们从纯顶点(Vertex)数据开始,一个顶点是3D空间中的一个点,一般来说一些顶点可以组合在一起组成3D图形的边框(Wireframe), 这些3D图形被叫做多边形(polygon)。在管线的第一个阶段,这些纯3D顶点数据会被转换成像顶点这样的格式来创建所有的3D对象,并将这些3D对 象正确地放置到2D空间--也就是你的显示器中。所有的东西都会按照它们之间的相互关系被正确地缩放和定位。此时可以使用顶点着色器(Vertex Shader)对顶点应用一些特殊的效果,例如扭曲(warping)物体。
2.光照(Lighting) - 在经过转换操作后,所有的物体都会基于光源的位置和物体的反射表面来被点亮。这些与光照有关的数据仍旧是顶点格式,所以它基本上还只是大量的点与不同颜色的灯光色彩的应用。
3.视点(Viewpoint) - 然后会从一个特定的角度和距离来观察这些对象,你会发现这些对象会被进一步地调整。就是说,那些距离观察者较近的物体会大一些,而距离较远的则会小一些,每一个物体都会被适当地旋转和移动。
4.裁剪(Clipping) - 由于当前视场范围(Field of View,FOV)的限制而无法被观察者看到的物体会被删除。例如,如果你的视场角是90度(大多数游戏都是这个数值),那么位于你周围剩下270度范围 中的物体将会被移除,你将无法看到它们。这样做是为了减少GPU无用的计算量,如果不这么做,那么你看不到的物体也会被GPU计算。
5.建立三角形(Triangle Setup) - 这个时候所有的顶点将会组成三角形或者多边形,这就是我们比较熟悉的计算机屏幕上基本的三维图形。
6.光栅化(Rasterization) - 像素是你显示器上最小的图形信息单元。因为在3D场景的一切最终会被放在一个二维平面作为以像素的形式进行显示,场景中的对象都会被分配特定位置的像素来被显示在屏幕上。
7.消除(Culling) - 这个过程是对裁剪(Clipping)的补充;那些仍然不可见的像素也会被移除:例如物体背向你的那一面的像素,被其它物体挡住的物体等等,这些都会被移除,因为它们对于当前观察者来说都是不可见的,因此就不值得为了它们浪费额外的时间。
8.纹理和着色(Texture & Shading) - 在这个阶段,组成图像的每个像素会被应用各种相关的颜色或者效果。纹理是一副2D图像,它被添加在3D物体的表面使得它们看起来更真实。像素着色器(Pixel Shader)可以将一系列颜色、深度和纹理效果组合起来应用在相关的像素上来创建处特殊的效果,例如物体表面的褶皱、光滑或者透明效果。
性能提示:现在的显卡事实上都可以在同一时间同时操作多条管线并且这种“多线程”可以允许显卡并行地分担上述阶段的工作,这样可以使得执行更快。显而易见的是显卡拥有的管线数越多则执行效率越高。这就是现在的显卡可以平滑地渲染真实3D图像的原因。在过去,渲染复杂的3D场景(例如电影特效)很慢,有时候要几个小时甚至几天,但是现在一秒钟可能渲染很多次。游戏是家用电脑上对计算较为敏感的事情,所以不要低估当你在玩一个复杂的3D游戏的,你的电脑要承担多大的压力。这不光只是显卡的事情。游戏越发展到现代,它通常越复杂,也因此就越会给你的电脑带来潜在的不稳定因素而引起系统崩溃和死锁。
第八步 传输数据到帧缓存
从上述步骤得到数据,通常被称作单独的帧(Frame),会被传送到VRAM中一个临时存储区,这里被称作帧缓存(Frame Buffer)。顾名思义,这里缓存着真正的帧,这些帧会被传送到电脑显示器进行显示。
同一时间会有两帧图像被缓存,这个过程被称作双缓存(Double Buffering)。主(前)缓存保存了一个完整的帧,同时在次(后备)缓存正在组建另外一个完整的帧。任何时候主缓存的帧都会被显示在显示器上。当主缓存中的内容被显示在显示器中的时候,显卡正在在次缓存中准备另外一帧,只要你的显示器准备好去刷新它自己,那么此缓存中帧将会被“交换”而被显示,而主缓存(此时已经变成次缓存)清空了自己并组装另外新的一帧。这种页交换(Page Filpping)技术可以帮助解决潜在的瓶颈并在3D应用程序快速显示帧提高性能。
分辨率越高图像越复杂,那么数据量越大,因此每个帧缓存占用的空间就越多。如果再在这帧上添加额外的效果,例如平滑带有尖齿状的反锯齿(Antialiasing),或者清除距离纹理的各向异性滤镜,这些都会增加图像(帧)的尺寸。
性能提示: 一般来说,帧缓存中只会保存两个帧。然而三缓冲(Triple Buffering)则可以在帧缓存中提供第三个或者第三位(Teriary)帧,当垂直同步(Vertical Synchronization,VSync)打开的时候会提升性能,因为在等待显示器向他它发出信号它准备好接受新帧的时候它给了显卡更多的空间来操作完整的帧。然而这也会使用更多的VRAM从而增加画面的“卡”和“顿”的现象(stuttering and hitching)。此外,这也会增加控制延迟和图形闪烁-更多的细节请参见三缓冲(Triple Buffering)这一章。
第九步 传送图像到屏幕
图像现在已经准备好被显示了,它们被从帧缓冲中通过随机内存访问数模转换器(RAMDAC, Random Access Memory Digital to Analog Convertor)到视频电缆,最后送到你的显示器上。这里一定需要RAMDAC来将你VRAM中的数字信息(0和1)转换到成大多数显示器都需要的模拟格式(视频信号电压)。RAMDAC经常可以在一秒钟内将帧转换成可见的图像很多次。
RAMDAC很重要,因为它会在流行的分辨率(这与显示器的显示能力有关)上影响最大可能的刷新率和屏幕上的图像质量。幸运地是大多数显卡的RAMDAC都足够的好,所以它们并不是我们关注的焦点--反而是显示器本身的刷新率通常是限制的因素而并不是RAMDAC。
重要的是,传统的CRT显示器是依赖RAMDAC,但是如果在你的显卡和显示器之间使用一个纯粹的数字链接例如DVI(Digital Video Interface)的话,你的显示器就不再依赖RAMDAC了。 使用DVI作为显示器的输入的话,造成的结果就是RAMDAC被忽略了,因为原始的数字信号就原封不动地传播到你的LCD屏幕上,然而如果在LCD上使用的一个标准的VGA链接的话,就需要将数字信号转换成模拟(通过RAMDAC完成)了,然后在LCD显示之前再转换回来,这样就不再有效率了。
性能提示:这一步强调的重点是,当使用DVI连接的时候LCD显示器将会提供最好的图像质量,因为在重复转换的时候没有数据降质的可能性。然而还是有很多用模拟方式连接LCD显示器的原因--请参看“响应时间”这一章。如果你拥有一个CRT显示器和老式的显卡的话,而你的图像质量却没有达到其应有的最好的状态,那么就可能是老式显卡上的RAMDAC的能力不是足够好。在旧式的显卡上特别明显会产生模糊的2D图像,例如Windows桌面模糊和高分辨率下3D质量的降低。这些肯定对你的眼睛都不好。
本章覆盖了3D图像如何在你的系统上工作的。 希望你在玩3D游戏的时候能更好地理解你的系统是如何工作的,因此在解决问题和提升性能上能武装自己。请记住我的游戏和系统配置指南中包含了呃大量的性能提示,例如TweakGuides Tweaking Companion,所以请确保通读以上各章的建议。
下一章将专研一些游戏玩家会经常需要的图形设置的问题。准确理解它们是如何工作的会再次加强解决问题和性能优化的能力。