XNA Kick Start (二)

  本文版权归我所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,欢迎大家和我交流。
作者:clayman
Blog:
http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn

硬件历史:     

       对于网页或者数据库开发者来说,通常不必深入了解CPU的结构就能编写程序。原因在于CPU是一种通用处理器,无论是上古时期的8086处理器,还是最新的Core,对同一个程序来说,虽然计算的效率不同,但总能得到相同的结果。而GPU就不同了,随便从市场里挑选两块显卡,它们所支持的功能或者说特性有可能完全不一样,在一块显卡上能运行的程序,也许到另一块显卡上就出错了。通常每次GPU的更新换代,不仅在性能上会有提高,更在功能上有所增强。图形处理器的发展分为几个阶段:

 

没有图形处理器的远古时期:那时所有的图像显示任务都是CPU来完成的,包括坐标变换,着色等等。由于CPU并不适合完成这类需要大量并行和浮点计算的任务,因此,当时的图形显示能力相当有限,只有在非常昂贵的专业系统上,才能显示一下较为简单的3D图形。

 

第一代图形处理器:这通常指NidiaTNT2和著名的Voodoo3系列显卡。这时的显卡有了处理2D变换和着色的能力,把CPU从填充像素的任务中解放出来,实现了DirectX 6的功能。不过更高级的3D变换仍然需要CPU来处理。

 

第二代图形处理器:通常指Geforce2Radeon 7500系列显卡。它们最重要的突破就是从CPU那里接过了顶点变换和光照工作(也就是常说的T&L)。对应DirectX 7中的功能。

 

第三代图形处理器:包括Geforce34Radeon 8500系列显卡。这是第一次,显卡具有了可编程能力,当然,它们只允许程序员进行一些相当有限的操作,所以严格来说,它们是半可编程的。Geforce4 Ti系列显卡完全支持DirectX 8.1

 

第四代图形处理器Geforce FXRadeon 9xxx系列显卡。在顶点和像素级别提供了强大的可编程能力,大部分的图形处理工作已经完全转移到图形处理器上计算。支持Shader Model 2.0

 

第五代图形处理器Geforce 67Radeon X1900系列显卡。更强的可编程能力,支持Shader Model3.0,完全兼容DirectX 9c

 

即将上市的处理器Geforce8系列显卡,支持Shader Model 4.0,支持DirectX 10

 

       上面是否提到了太多你不熟悉的术语,哦,似乎后排的那个牛头人兄弟已经开始瞌睡了?没有关系,看完下面的几个部分之后,你就知道我在说什么了。

 

图形硬件流水线

      

       从一堆抽象的数据,到最终把3D图形呈现在你眼前,需要经过图形硬件一系列复杂的处理,通常把这个工序称为图形流水线。详细了解图形流水线各部分的结构和作用是非常必要的。下图是一个典型的经过简化的流水线结构,第三到五代的图形处理器的流水线都与此类似:

       首先,由CPU通过XNADirectX)或者OpenGL之类的图形库,把所要渲染物体的信息传递给GPU。这些信息包括几何体的顶点位置,法线信息,颜色,纹理坐标,纹理,变换矩阵等等。这里需要说明一点,顶点是构成三维世界的基本粒子,顶点构成三角形,三角形构成面,面再组成模型。

       GPU接收到这些数据之后,首先对他们进行顶点处理。顶点处理主要指坐标变换,顶点混合,计算顶点级别的光照等一系列操作,最终把变换到投影平面的顶点数据传递给下一阶段。

       接下来的一道工序进行图元装配和光栅化。图元装配将把离散的顶点组织为三角形(三角形是图形学中的基本图元),而光栅化则把这个三角形映射为最终显示窗口中的某一部分像素,并按照像素相对于三个顶点的位置进行插值计算,得出每个像素的纹理坐标值,材质参数等所需要的值。有时,把附带了这些信息的像素称为一个片断(fragment)。

       接下来,在像素处理阶段,硬件对纹理查找获得每个像素的颜色,计算光照,在一系列着色操作之后,把最终的像素输送到帧缓冲中。

       帧缓冲是一块普通的显存,储存了所有渲染好的像素。当所有绘图操作完成之后,把这块缓冲提交给显示器,就呈现出了你所看到的图像。

       哦,你看,一个像素在硬件流水线中的旅程比坐过山车还复杂,而且还要再次提醒你,这只是一个简化的流程图。

       为了让这份资料不太快过时,再来看看未来的流水线是什么样子。你发现没有,在整个硬件流水线上,GPU都没有“创造”新顶点的能力。这严重限制了程序设计的灵活性,也是在整个图形渲染过程中仍然不得不依赖于CPU的地方:要添加或减少几何体的顶点都必须由CPU来处理。未来的硬件中(支持DirectX 10的显卡)将在顶点处理之后添加一道几何体处理工序,允许GPU创造新图元,无疑,这又将是一次重大的技术革新。

 

Shader Model

       Shader Model(着色模型)这个词我们已经提到过很多次了,它究竟指什么意思呢?之前我们说过由于每一代显卡的功能都是不同的,那么如果每个厂商都按照各自的技术开发不同功能,那么无论对开发者或者用户来说,都是一个噩梦。因此,Microsoft推出Shader Model,作为一个规范,来精确定义可编程管线中完全兼容某个DirectX版本,硬件所必需支持的功能。比如完全兼容DirectX 9c 的显卡,就意味着硬件支持Shader Model 3.0定义的所有功能。

 

Vertex Shader Pixel Shader

       Vertex Shader(顶点着色器)它指GPU中用于处理顶点的部分,可以看做是GPU中的一个虚拟机。当然,vertex shader有时也指运行在vertex shader虚拟机上的小程序。Pixel Shader与此类似,不过指的是像素处理阶段而已。

 

固定功能管线vs.可编程管线

       这可能是让初学者最迷惑的地方。其实他们所指的都是硬件流水线构架。记得前面讲硬件历史时说过,直道第三代图形处理器才初步具备了可编程(programmingable)能力吗?由于早期的技术限制,GPU都是不可编程的,对程序员来说,像是个黑盒子一般。GPU告诉开发者它所能实现的功能,使用每种功能时应该如何设置状态标志变量,每种功能需要些什么数据。程序员设置好GPU的状态,填充数据,然后在另一端获得输出图形。开发者无法控制整个着色过程,无论材质属性如何,光照算法都是固定的,事先设计好的,不仅仅光照,其他各种效果也都只能使用固定的算法,更为严重的是开发者很难实现API中没有提供的效果。这样的硬件构架就是固定功能管线(fixed-functin pipline)。

       这样的限制是令人讨厌的,程序员总是希望获得更多控制权。终于,随着硬件技术的发展,开发者可以对顶点和像素处理程序进行编程了。从Geforce3开始,GPU的可编程能力越来越强,可编程管线将是未来实时渲染技术发展的趋势。XNA中,已经不支持固定管线的程序开发方式了,同样,在DirectX 10中也将不再支持固定管线技术。

 

HLSL

       可编程管线在增加控制力的同时,也增加了开发者编写程序的难度。控制GPU的着色过程,意味着程序员必须为GPU写程序了,这些程序也就是前面所说的运行在vertex shaderpiexl shader上的小程序,这里把这种小程序统一称为shader。相信到此为止,绝大部分的程序员都只为CPU写过程序,那么如何为GPU写程序:用什么语言编写程序,又如何运行这些程序呢?

       坏消息是早期的程序员只能使用一种类似于汇编的语言来编写shader。显然那是一个痛苦的年代,如今,你既然选择.net技术来开发程序,肯定不愿意再次回到汇编时代。那么接下来告诉你好消息,Microsoft认识到了编写shader的种种不便,于是在DirectX 8发布之后,与nVidia一起,开发了一门用于编写GPU程序的高级语言,Microsft把这门语言称为HLSLHigh Level Shader Language高级着色语言),而nVidia则把他称为CgC for Graphcs,注意不是CG)。最终HLSLDirectX 9.0一起发布,自然也成为了XNA的一部分。不要被它的名字所吓倒了,这实际上是一门非常简单易用,但功能强大的语言,语法几乎和C差不多,任何有C/C++,C#或者Java使用经验的人都能很快上手。由于XNA已经抛弃了固定功能管线,所以对编写XNA程序来说,学习HLSL是必须的。

       注意到我一直在说shader是“小”程序吗?Shader代码一般不会超过几百行,但普遍情况下,几十行代码就能完成一个shader。这些代码通常保存在后缀名为.fx的文件中,嵌入到C#程序中,由XNA中的Effect框架进行管理,编译,并且传递给GPU运行。不要被shader简短的代码迷惑而小看它,HLSL的设计目标之一就是用简单的代码完成复杂操作。

 

小结

       哦,这一章讨论了在编写代码之前你所需要知道的所有硬件和软件知识。不用担心,如果有部分内容你仍然感到迷惑,随着学习的深入,便会逐渐了解。

       下一部分我们将实际动手编写一些代码,绘制一点有趣的东西了。

~~~~~~~~第一章完~~~~~~~~~~~~~~

第一部分完了,都是最基础的东西,嘿,还有人在看吗@_@??

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值