第2页:浅析DirectX 10应用技术
DirectX 10能力之我见
目前AMD-ATI和NVIDIA两家产品已经能够很好的支持DirectX 10,那么DirectX 10究竟通过什么技术或者手段来渲染出逼真的3D虚拟环境能?其实浅显的看,DirectX 10的主要优势就是更好、更合理的利用GPU资源从而降低对CPU的依赖。而要实现这个目标DirectX 10主要从以下三个方面来解决:
第一、提高绘图效率,主要通过修改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两项技术来达到这个目的。
DirectX 10.1想说爱你不容易
虽然说3D技术越新带给我们的3D效果更逼真,但是DirectX 10.1 API以及Radeon HD 3000系列还无法发挥出真正实力。究其原因,首先游戏厂商不会用还未普及的D3D API作为游戏设计基础;其次DirectX 10.1是随Windows Vista SP1发布,但是目前Windows Vista SP1还未正式发布;再次NVIDIA拥有庞大的“The way it's meant to be played”游戏计划,所以在NVIDIA没有启用DirectX 10.1前,一切都是未知数。
不过DirectX 10.1将带来更佳的3D渲染能力是无可厚非的,那么DirectX 10.1和DirectX 10又有哪些区别呢?
简单说,DirectX 10.1是DirectX 10的一个超集,它相对DirectX 10新增5个全新的API,这就如同DirectX 9.0c和DirectX 9.0b之间的关系,它将能够在实现DirectX 10的所有功能之外的更多功能和更强性能。
那么DirectX 10.1相对DirectX 10有那些技术性改变呢?
第一、DirectX 10.1提高并改善了通用标量着色器的资源存取功能。尤其是在开启Acting Appointment时,能够更好的控制读取采样点能力,并且DirectX 10.1还能将定制创建下行采样滤波器。
第二、DirectX 10.1将具备更新的浮点混合功能,这对被渲染目标能够起到更具针对性的作用,并且每个渲染目标能够实现独立渲染。
第三、在3D性能方面,DirectX 10.1的改变是用户最关心的。(a)、DirectX 10.1能够实现32bit浮点滤波,这对渲染精度和HDR的画质改善起到决定性作用。(b)、应用程序能够实现最高自由度的控制多重采样和超级采样Acting Appointment,并且在特定场景下选择合适的Acting Appointment模式(DirectX 10.1将至少对一个像素进行4次采样)。(c)、DirectX 10.1对多核平台进行优化,这将实现更高的3D性能。而在GPU渲染反射和散射时,DirectX 10.1能够减少对API的调用次数,以起到提升资源合理利用的目的。(d)、DirectX 10.1阴影渲染、过滤方面的性能将有所提高,能够实现更加逼真的画质。
第四、DirectX 10.1将引入更新的WDDM2.1(DirectX 10仅支持WDDM2.0)。
本页总结
通过上文对DirectX 10的浅析介绍,想必很多用户从技术层面简单了解了DirectX 10的实际应用原理。但也许用户关心并不是技术的更新,而是产品的实际性能和其价格,这就是说DIY用户常讲究的性价比原则。不过每个档次的用户对于性价比的衡量尺度也大不相同,对于中高端注重性能的用户来说,也许要流畅运行DirectX 10高画质,唯一解决方案是使用高性能产品,那么下文将针对AMD-ATI的旗舰产品Radeon HD 3870 x2和NVIDIA未来高端Geforce 9800GX2(通过Geforce 8800GTS SLI模拟)进行对比测试。



