第三页:光照变幻,新时代到来
NVIDIA凭借TNT2迅速崛起之后,依然面临3dfx Voodoo5和ATi Rage128的挑战。1998年的8月份NVIDIA推出了Geforce256图形芯片。从这一天起图形处理芯片有了个崭新的名字——GPU(Graphics Processor Unit)。NVIDIA Geforce256的先进性让所有的竞争对手为之惊讶。Geforce256之所以被称作GPU原因就在于Geforce256划时代的在图形芯片内部集成了T&L功能,使得GPU拥有初步的几何处理能力,彻底解决了当时众多游戏瓶颈发生在CPU几何吞吐量不够的瓶颈。

划时代的Geforce256
当然,Geforce256的成功也MS DirectX 7密不可分。真是DirectX 7首次提供的T&L功能让Geforce256的力量能够尽情释放,也让众多的游戏开发者能够迅速的拿出支持T&L的游戏。值得一提的是,Geforce256还是当时首个支持AGP 4X Fast Write接口和DDR显存的图形卡产品。从Geforce256的体系架构来看,这个代号NV10的怪物也强的让人咋舌。Geforce256拥有4条象素流水线,工作在120MHz的Geforce256拥有竞争对手望尘莫及的480MT/s的填充率。
GPU的诞生绝对是图形卡历史上的又一次革命。那当时在大肆吹捧的T&L究竟是用来做什么的呢?它为什么会有那么惊人的魔力?下面就来和大家一起重温。

要了解T&L的作用,我们必须从3D世界的构建谈起。在所有程序员和设计师进行各种3D对象设计时,他们使用了和真实世界完全相同的坐标体系(也称作世界坐标)。这样做是为了制作出来的3D图形能够方便的从任意角度观察。但是要将这样的3D世界直接搬到本来就是平面的屏幕上的话,你看到的将会是一堆杂乱无章的色块。为了在屏幕上正确的表现3D对象与对象之间的相互关系和纵深,我们必须将世界坐标转换为能准确展现3D物体纵深关系的另外一种坐标,也就是屏幕坐标,这样的转换我们就叫做Transform(也就是T&L中的T)。

这张图表示了程序输入GPU中的顶点数据,你可以看到整个汽车是透明无遮挡且杂乱无章的
当你在玩3D游戏中这样的转换并不是一劳永逸的。一旦视点转换,所有图形的坐标也必须重新计算以便让你看到3D对象的“前后左右”。同时3D游戏中的角色的移动和地形的每次变化也必须重新计算新的坐标位置。由于整个Transform基本都是浮点运算,因此会极大的消耗CPU这类通用处理器的资源导致整个3D游戏的运行缓慢。而Geforce256拥有专门的逻辑来进行Transform计算,所以效率和速度都远超过CPU。

从线框图中我们可以看到此时的汽车并没有被计算相互遮挡关系
尽管T&L只包含Transform和Lighting这2个单词,但是T&L却要在3D世界构建中干3件事情。许多人以为在变换完成之后接着就是光照计算。事实上在变换完成的同时T&L还需要对3D对象进行遮挡剔除(Clipping)。我们谁都不是透视眼,所以在日常生活中物体总是相互遮挡的,我们只能看到眼前的那个物体,而无法穿透前面那个物体看到在其背后的东西。
3D世界同样需要遵循这个原则,在完成坐标转换之后,遮挡剔除系统还要对这些顶点进行对比从而确定哪些顶点不被显示,而那些顶点是必须显示的。通过遮挡剔除计算,上面汽车图形中另外一边的2个轮子顶点将会被标示为不可见,但却依然被渲染。
T&L这个名词还由另外一个单词组成——Lighting(光照)。在没有重新计算新的坐标之前计算机是不知道如何给各个3D对象赋予光照值的,因为计算机无从知道光是从什么地方射出。在确定了视点和光源方向之后,Lighting将会根据一定的算法给每个生成顶点赋予光线强度的矢量。这些矢量数据能够展现出光线在3D对象上的强弱变化。

在重新计算顶点坐标和确定遮挡(Clipping)之后,汽车已经初具外形
为了贯彻6个月产品升级的诺言,NVIDIA于2000年4月推出了Geforce2 GTS,GeForce2 GTS首次采用了0.18微米制程同时工作频率达200Mhz~250MHz。GeForce2 GTS与上一代比起来最大不同在于NVIDIA增强了Geforce2 T&L引擎的吞吐量,同时让Geforce2的象素流水线在单周期内实现了2次纹理操作,因此Geforce2的纹理填充率达到了惊人的1600MT/s。
正当人们以为NVIDIA将君临天下的时候,ATi卧薪尝胆多年的Radeon256横空出世!Radeon不仅是第一片非NVIDIA的GPU,还搭载了更强的T&L引擎和功能。在ATi引以为豪的Charisma引擎。除了T&L功能之外,这个几何光照引擎还给我们带来了一些崭新的技术,首当其冲的便是Keyframe Interpolation和Vertex Skinning。
Keyframe Interpolation实际上是一种关键帧添加技术。关键帧技术事实上是依靠一种算法连续的生成不断变换的顶点。这样程序员只需要告诉GPU某个对象开始时的状态和结束时的状态,中间连续变化的过程则由GPU代劳。这样能节省大量的运算资源。当然关键帧添加技术的应用范围较为有限。

至于Vertex Skinning技术,也是通过设定顶点实现的“把戏”。在绝大部分3D游戏中都包含动物对象,动物对象在运动的时候是通过对它的骨骼进行控制实现的。这样就会带来一个问题,当运动时2块骨头的连接部分会出现明显的断裂从而极大的影响。通过利用角混合技术,能够彻底解决这样的问题,从而实现动物运动的平滑真实。


在GPU体系方面,ATi还首次提供了可用的HSR(隐面剔除)技术。ATi把隐面剔除技术和显存带宽节省技术统称为HyperZ。在Radeon的流水线体系中,ATi在三角设置引擎之前放了个Hierarchical Z的HSR剔除器。在上面的文章中我们提到,T&L的过程中GPU会确定哪些点时被遮挡无法看到,哪些点是需要渲染的。但是被遮挡无法看到的顶点并不意味这不进行后续的计算,相反这些无法看到的顶点在之后依然会耗费GPU的处理资源,我们把这样的渲染称作OverDraw(无效渲染)。
小知识:什么是HSR
HSR的全称为Hidden Surface Removal(隐藏面消除)。GPU在渲染和构架两个有互相遮挡在一起的3D物体的时候,一般是分别对这两个物体进行Transform,然后计算他的光源和进行纹理贴图等等。GPU是在最后阶段才对2个相互遮挡的图形进行叠加。这样的运作流程会使得那些被遮挡、我们无法看到的图形部分也消耗运算资源。而HSR的作用则是先行运算出哪些面是可见的,然后直接剔除那些不可见的,从而降低GPU的无效渲染提升性能。
如你所知,减少了无效渲染就意味着性能提升。Hierarchical Z干的就是这个!在完成T&L之后Hierarchical Z将会不断对比各个顶点的Z轴位置,一旦Hierarchical Z发现这个顶点不需要显示,将会直接将他剔除避免后续的资源浪费。尽管Hierarchical Z当时还不够完善,但的确为GPU性能的提升作出了重大贡献。
59贴
55贴
44贴
39贴
36贴
32贴
29贴
28贴
27贴
24贴