我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>行业知识

DirectX10

文章来源:[SouVR.com]网络收集整理 作者:Frank/Tracy 发布时间:2010年06月02日 点击数: 字号:
)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。   PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。   VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。   增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图像质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。


DirectX 9.0c

  与过去的DirectX 9.0b和Shader Model 2.0相比较,DirectX 9.0c最大的改进,便是引入了对Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0两个着色语言规范)的全面支持。举例来说,DirectX 9.0b的Shader Model 2.0所支持的Vertex Shader最大指令数仅为256个,Pixel Shader最大指令数更是只有96个。而在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最大指令数都大幅上升至65535个,全新的动态程序流控制、 位移贴图、多渲染目标(MRT)、次表面散射 SubSurface scattering、柔和阴影 Soft shadows、环境和地面阴影 Environmental and ground shadows、全局照明 (Global illumination)等新技术特性,使得GeForce 6、GeForce7系列以及Radeon X1000系列立刻为新一代游戏以及具备无比真实感、幻想般的复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。   因此DirectX 9.0c和Shader Model 3.0标准的推出,可以说是DirectX发展历程中的重要转折点。在DirectX 9.0c中,Shader Model 3.0除了取消指令数限制和加入位移贴图等新特性之外,更多的特性都是在解决游戏的执行效率和品质上下功夫,Shader Model 3.0诞生之后,人们对待游戏的态度也开始从过去单纯地追求速度,转变到游戏画质和运行速度两者兼顾。因此Shader Model 3.0对游戏产业的影响可谓深远。   从DirectX的发展史中我们可以看到,微软的3D API和硬件一同发展,新硬件带来新的DX特性,新的DX特性加速硬件的发展,在DirectX10上面,又是一个3D图形发展的新境界。DirectX 10的架构优势   DirectX之所以在广大的开发者中流行,是得益于它的简单易用和丰富的功能特性。然而,DirectX一直被一个主要的问题所困扰,那就是高CPU负载。   在图形编程API出现之前,3D应用程序直接向图形硬件发送命令来完成图形的绘制工作。虽然这样开发工作比较繁重,但硬件效率则能在很大程度上得到保证。   而如DirectX和OpenGL这样的图形API则是通过在图形硬件和应用程序之间架起了一个中间层,这样,应用程序可以使用统一的图形编程代码来完成对底层硬件的操作,将程序员们从与大量的图形硬件交互的恶梦中解救出来。但是,这也造成了每次DirectX从应用程序那里接收到一条命令时,就必须先对这条命令进行分析和处理,再向图形硬件发送相对应的硬件命令。由于这个分析和处理的过程由CPU完成,造成了每一条3D绘图命令都会带来CPU的负载。   从技术角度,这种CPU负载给3D图像带来两个负面影响:首先,限制了画面中可以同时绘制的物体数量;其次,限制了可以在一个场景中使用的独立的特效的数量。这就使得游戏画面中的细节数量受到了很大的限制,而图像具有真实感的主要要求便是丰富的细节。


DirectX 10

          DirectX 10的主要优势便是最大程度地降低了CPU负载,主要通过三个途径来达到这个目的:第一,修改API核心,使得绘制物体和切换材质特效时的消耗降低,提高绘图效率;第二,引入新的机制,降低图形运算操作对CPU的依赖性,使更多的运算在GPU中完成;第三,使大量的物体可以通过调用单条DirectX绘制命令进行批量绘制。   下面我们就来仔细的看一下这三种方式:

提高绘图效率

  在DirectX 10中,对上代DirectX版本中三维数据和绘制命令的验证过程进行了很大程度的修改。所谓三维数据和命令的验证,是指在DirectX绘制图形之前,对传给它的图形数据和绘制命令进行格式和数据完整性的检查,以保证它们被送到图形硬件时不会导致硬件出问题;这是很必要的一步操作,但是不幸的是这会带来很大的性能开销。   从上表我们可以很容易的看出,在DirectX 9中,每次绘制一帧画面之前,都会对即将使用的相关数据进行一次验证。而DirectX 10中,仅当这些数据被创建后验证一次。这很明显是可以大大提高游戏进行中的效率的。

降低图形运算对CPU的依赖

  在降低图形运算对CPU的依赖方面,DirectX 10 引入的三个重要机制就是:纹理阵列(texture arrays)、绘制预测 (predicated draw)和流式输出(stream out)。不要被这三个晦涩的名词吓倒,实际上它们是三个不难理解的机制。

纹理阵列

  传统的DirectX在多张纹理中进行切换的操作是种很给CPU带来很大压力的操作,因为每切换一次,都要调用一次DirectX的API函数。而每绘制一个使用新纹理的物体,就要进行一次这样的切换操作;有时为了实现特殊的材质特效,绘制一个物体时可能就要切换好几次纹理,开销很大。   所以,之前游戏中经常会出现将大量的小纹理拼合到一张大的纹理中,通过给不同的三维物体分配这张大纹理的不同局部的方式,以期减少纹理切换,提高游戏运行效率。这种方式实现起来相当复杂,而且DirectX 9中对纹理的尺寸的限制是4048×4048像素,也就是说,如果要容下更多的小纹理块,可能就得加载很多张这样的大纹理。   DirectX 10引入的新的纹理阵列机构,将允许在一个由显卡维护的阵列中容纳512张单独的纹理,而且,在shader程序中可以使用一条新的指令来获取这个阵列中的任意一张纹理。而这种shader指令是运行在GPU中的;这样,就把原来要消耗很多CPU时间的纹理切换工作轻松地转给了GPU。由于纹理一般是直接放在显存中的,因此以这样的方式,将工作交与和显存一同位于显卡上的GPU来完成更有效率。如今,在DirectX 10中,只要一开始设置好纹理阵列中的纹理,然后每次绘制一个物体时为它指定一个纹理的索引号,并同物体三维数据一起传递到shader中,就可以放心的让GPU来给物体选纹理了。

绘制预测

  在一般的三维场景里,很多物体都是完全被别的物体挡在后面的。这时候如果要显卡绘制这些物体就是白费力气。尽管高级的GPU可以通过硬件算法将场景画面中被挡住的像素(注意是像素)预先剔除,但是仍然会有很多不应进行的多余运算。例如,一个完全被挡住的复杂的角色模型,它的身上可
共5页 您在第2页 首页 上一页 1 2 3 4 5 下一页 尾页 跳转到页 本页共有3469个字符
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料