【西川善司】GPU和Shader技术的基础知识(转)(3)

SM3.0中,作为特殊功能而大受欢迎的[VTF]。但是,因为ATI没有支持VTF,VTF的效果只能在这个NVIDIA的Sample Demo里看到。

在家用游戏机的世界,2005年末微软推出作为该公司的第二代游戏机「Xbox 360」。图形技术方面对应DirectX 9/SM3.0,接下来将详细描述其具体性能,值得注意的是Xbox 360 GPU(Xenos)有着世界首个采用统一着色器(Unified Shader)架构的特征。Xbox 360 GPU是由ATI制造的,意外的是,和同时期ATI对应PC发表的Radeon X1800系列设计完全不同,这一点很有趣。之前推出的Radeon X1x00系列全部都没有对应VTF,不过,Xbox 360 GPU对应了。

微软「Xbox 360」。

Xbox 360的游戏软件「Gears of War」(2006年,Microsoft)。实时3D游戏图形就此到来了。

【千里马肝注:关于Unified Shader,下图可以作为一个很好的说明。如果把Unified Shader翻译成“统一架构”的话,那么早期的就应该叫做“分离架构”。新架构的好处就是不会出现之前的vs很忙ps很闲,或者ps很忙vs很闲,能够最大限度的发挥所有着色器的能力,以相同着色器数量规模实现更高的性能。】

2006年末,索尼那边的新游戏机「PlayStation3」(PS3)被推出了。PS3的GPU由NVIDIA担任设计(索尼负责制造),虽然给予了「RSX」的专用名称,但基本设计是与GeForce 7800系列大体上相同,在图形技术上是和竞争的Xbox 360一样对应同世代的DirectX 9/SM3.0。

索尼「PlayStation3」。

「摩托风暴(MotorStorm)」(SCE Europe)。不单是图形的表现,加上高度真实的物理模拟的特性,使其成为被大受期待的PS3游戏。

新世代的游戏机战争应该称为「Xbox 360对PS3」之间的竞争,实际上,虽然表面若无其事,但这里「ATI对NVIDIA」也展开了战斗。无论如何,二大最新游戏机的图形一同成为可编程Shader 3.0的架构。PC和游戏机都进入了SM3.0的时代。

另外,游戏平台的另一个强者,任天堂投入了新世代游戏机「wii」,不过图形技术上采用了并没有太多进化的方针。

【千里马肝注:需要注意的是,三台主机的发售时间分别为Xbox360是2005年11月,PS3是2006年11月,Wii是2006年11月(比PS3晚几天)。所以论GPU硬件而言,Xbox360的C1/Xenos是基于ATI的R500修改的,同时期的ATI X1800是R520核心,而Wii的Hollywood性能与ATI X1300差不多(RV515核心,RV是低端产品的前缀,通常是R的阉割版)。相比同时代的显卡,Wii图形不论是显存上、技术上、分辨率上都要差一大截。作为发售比Xbox360晚一年却选择了更低端的产品,显示出Nintendo开辟一片蓝海的决心,结果也如预期一样,Wii的销售量一度等于XBox360和PS3的和。】

2007年 Programmable Shader4.0和DirectX 10的时代开始。

1年后,DirectX的版本号更新和1990年代后期有差异,DirectX 9从2002年开始的4年时间,大概占据了Windows XP的全部生命周期。2006年后期发生了ATI被CPU制造厂商AMD收购的事件,不过如果回顾一下的话,2000年以后的实时3D图形历史,实际上可以说是「ATI对NVIDIA」的战斗历史。

2007年初的时候,微软早早的发表了新的操作系统「Windows Vista」。与这个同步,作为新版DirectX的「DirectX 10」被前后大约耽搁了5年后也发布了。

在SM4.0中,和SM3.0相比,扩充了新的指令集,具体的有追加了整数运算指令,和二进制位运算指令,因此像CPU那样通用程序的功能也被强化了。还有,指令集对应顶点着色器和像素着色器的差异没有了,微软把这个称为通用着色器(common shader)架构。

SM3.0和SM4.0的比较。

同时Texture(纹理)的访问数量,从SM3.0的16个扩大为SM4.0的128个,拥有共享指数E的新的Texture格式RGBE也被支持了。对应实时游戏的低负荷HDR渲染成为可能。

并且在DirectX 10/SM4.0中,最大的改变是第三个可编程Shader[Geometry Shader]的加入。

因为直到现在,把顶点相关的事务称为「geometry」的很多,很多人也认为[Geometry Shader]和[Vertex Shader]是一个意思,实际上是和Vertex Shader不同的,但是在[处理顶点相关信息]这点上和Vertex Shader一样。

Geometry Shader功能是可编程的增减顶点,正确把线段,多边形,粒子等图元(Primitive)进行增减。

【千里马肝注:以本人的经验,Geometry Shader因为加入时间的关系,在早期的显卡中,可能是硬件上的原因,其实是由display driver来实现的,意思也就是software方式即CPU的处理,而不是在GPU管线上实际意义的hardware方式实现,所以其效率非常低下。不过,貌似直到现在为止,Geometry Shader的效率一直都没有得到什么根本上的改善。】

并且,用作呼应在顶点处理阶段增加Geometry Shader处理的形态,也新增了把Vertex Shader 或 Geometry Shader 的输出在显存上的功能,写回输出功能Stream Output的结构。依靠这个功能,在顶点阶段类似的[Vertex Shader->Geometry Shader->Vertex Shader]的重复处理成为可能。

让Geometry Shader和Stream Output的组合,使得高细节3D模型的变形加工无保留的成为可能。使用GPU做CPU那样的通用处理为目的的GPGPU(General Purpose GPU)的用途也很有价值。期待这个广泛的应用。

DirectX 9/SM3.0的渲染管线

(续待)

--电子创新网--
粤ICP备12070055号