第四页:灵活编程,无穷梦想
Radeon的出现使得NVIDIA君临天下感觉少了几分。可惜Radeon尽管在几何部分有超越Geforce2 GTS的功力,但是在后面的三角设置引擎方面却吃了大亏。低效的三角设置引擎使得前端几何引擎无论多么高效都无法发挥。Radeon的出现仅仅拖延了Geforce2称霸的脚步而已。随后Microsoft推出了DirectX 8。相对于之前的版本,DX8中首次引入的可编程概念,同时定义了Vertex Shader和Pixel Shader!

Vertex Shader工作流程
还记得之前图形卡标榜的所谓雾化效果之类的各种特效吗?从DirectX 8时代开始你可以彻底将他们扔掉!之前所有的GPU、图形芯片都是固定功能的ASIC(专用逻辑电路)。因此能实现什么样的特效在图形芯片设计的时候就确定了。而程序员即便再有本事也只不过是在游戏中对这些固定功能进行各种排列组合。有了Pixel Shader和Vertex Shader之后,程序员可以自己编写一段代码让GPU执行从而控制几何处理部分和象素处理部分。没错!有了Shader你就能看到无穷的3D效果,而不是以往哪些令人沉闷的一堆。
要了解什么是Pixel Shader和Vertex Shader,就先让我们来看看一个典型的GPU处理流程图:

在这个流程图中GPU的功能被分为2大部分分别是几何处理(Geometry Processing)部分和渲染(Rendering)部分,渲染部分也有很多人将他称作象素处理(Pixel Processing)部分。在传统的GPU中是使用固定T&L逻辑(图中紫色部分)对3D图形进行处理的,这样能显著节省晶体管,但却无法由程序员控制。
同样在象素处理的纹理贴图、过滤和混合部分在Shader之前也是固定功能的无法进行任何的控制。对于这样的图形芯片3D程序员只能设置一些参数,实际上就是调用IDirect3DDevice::SetRenderState()时做的事,而这样的程序在IDirect3DDevice::DrawPrimitive()中会自动执行。
DirectX 8中定义的Vertex Shader和Pixel Shader正是代替3D图形中最重要的这2个部分(红色部分)。DirectX 8的要求很简单,就是建立统一的可编程单元以供程序员天马行空。对于3D程序员来说Direct3D 8现在允许你写一段程序替代固定的顶点处理过程和像素处理过程。其中替换顶点处理的就叫Vertex Shader(顶点着色器),替换像素处理的就叫Pixel Shader(象素着色器)。
以下是一段非常简单Shader指令集代码
vs_1_1
dcl_position v0
dcl_normal v1,r0, v0.x, c0
mad r2, v0.y, c1, r0
第一个实践DirectX8可编程特性的是NVIDIA Geforce3 Ti图形卡。这片代号NV15的Geforce3 GPU首次在内部加入了Pixel Shader处理器和Vertex Shader处理器。为了保险起见,Geforce3内部还同时保留了T&L硬连线为老游戏提供最佳的执行效率。nVIDIA把Geforce3 Ti的可编程体系结构称为nfinite FX引擎(这也是CineFX的前身)。GPU发展至此,显存带宽对性能的制约已经非常明显。NVIDIA在Geforce3 Ti上引入了LMA(光速显存架构, Lightspeed Memory Architecture)LMA能够大幅度优化显存带宽利用率提升性能。

此时ATi已不是昔日的败军之将了。Radeon8500给予了Geforce3 Ti有力的回击!尽管Radeon8500性能稍微落后,但是在内部体系架构上ATi已经开始赶上了NVIDIA。作为同样的DirectX 8显卡Radeon8500在性价比方面有着明显的优势,NVIDIA终于感受到了真正的威胁。

为了把对手扼杀在摇篮中,半年后被誉为NVIDIA最受欢迎的图形卡Geforce4 Ti问世。新的Geforce4 Ti抛弃了老旧的T&L硬连线,同时把Vertex Shader数量增加到了2个,而Pixel Shader支持也提升到了1.3版。此外,GeForce4 Ti也同时引入了Lighting Memory Architecture Ⅱ LMA Ⅱ(光速显存架构Ⅱ),可以更好地节省显存带宽。而新的Accuview AA技术与配合LMA Ⅱ,也大幅改善Geforce3上被人指责的FSAA的性能。Geforce4风光一时,可惜4个月后突如其来的打击让NVIDIA彻底蒙了……
59贴
55贴
44贴
39贴
36贴
32贴
29贴
28贴
27贴
24贴