分类: LINUX
2011-09-02 11:59:42
第一、提高绘图效率,主要通过修改API核心技术,令3D绘图和材质切换时降低资源消耗;
Shader Model 4.0――DirectX 10的Shader Model版本首次更到4.0,并且其也为我们带来了一些和Shader Model 3.0不同的特性。例如微软在Shaer Model 4.0里引入了Geometry Shader,这种技术的优势就是允许GPU生成或者删除几何的图元数据,并且配合后面将要提到的流式输出功能相配合,会大大提高了GPU的可编程性。
统一的Shader架构――统一的Shader架构是这一代产品的主要特性之一,具体现为显卡使用通用标量着色器来代替分离式的Pixel Shader和Vertex Shader,不仅如此通用标量着色器还能实现在Shader Model4.0里才引入的Geometry Shader。这样的设计有利于程序员在编程时,不用考虑针对某种Shaer进行特殊设计。同时Shaer Model 4.0将Temporary Registers从32个扩展至4096个,Constant Registers从256扩展至65535个。
Render Target――随着图形特效的逐渐增加,对目标的数量要求也日益增多。一般而言Render Targets很多情况下需要在物体位置、pixel等部分绘制全部信息。为了提高效率,不少在Shader执行结束后,把不同的信息绘制到不同的Render Targets中。但是DirectX 10将Render Targets的数量从DirectX 9的4个提高到了8个,大大缓解在Render Targets资源短缺时造成的资源紧张。
(#分页#)
第二、提高GPU利用率,通过新的API技术可以使绘图运算更加合理有效的利用GPU资源从而解放CPU(新的API技术是指Texture Arrays(纹理阵列)、Predicated Draw(绘制预测)和Stream Out(流式输出);
Texture Arrays(纹理阵列)――在DirectX 10以前的DirectX版本中,多张纹理切换操作在一定程度上会增加CPU负荷。不过在DirectX 10中,微软通过新加入的Texture Arrays技术,可以允许GPU进行512张纹理切换处理,同时Shader使用新函数指令自由提取任意一张纹理贴图。也就是说,GPU将纹理切换工作全部承担下来,从而降低对CPU的依赖和负载。
而且值得一提的是,在DirectX 10中每张纹理贴图的分辨率从DirectX 9的4048*4048提升至8192*8192,并且每个Shader能够同时访问的数量也从16个增加到128个。总的说来DirectX 10将Texture的细节精细度和多样性都提升了一个新台阶。
Predicated Draw(绘制预测)――还记得在DirectX 10以前的消隐技术吗?由于在很多的3D场景中,一些3D渲染出来的物体是被遮挡的,如果仍然对这些被遮挡的部分进行渲染,势必会造成资源浪费。在以前为了避免过多的资源浪费,GPU设计者通过某种程序设计赋予GPU具有消隐功能,也就是对被遮挡不显示的部分不进行渲染,但是尽管如此,还是会造成不少的渲染资源。
为了解决这个问题,DirectX 10加入了Predicated Draw技术,用以解决上述问题。Predicated Draw是对一个简单物体进行大致渲染,用以判断复杂物体哪部分会被遮挡,这种用小规模的渲染来判断大规模、高复杂化的渲染,的确节约了更多的系统资源。
Stream Out(流式输出)――Stream Out是DirectX 10的重要特性之一,Stream Out允许GPU中Vertex Shader或者Geometry Shader直接向显存中写入数据,而在此之前的DirectX版本中Vertex Shader是只读Shader不能写入。
(#分页#)
第三、指令优化。当进行3D建模、绘图时,更多的是调用单条DirectX指令进行批量处理绘制。
批量绘制――在之前版本的DirectX中,一直是由CPU对渲染状态进行管理,每次调用DirectX函数都将占增加对CPU负载,某种意义上来说这样的运行机制制约了显卡渲染速率。而为了让这些操作能够做到批量处理,DirectX 10引入了全新的State Object以及Constant Buffers两项技术来达到这个目的。