我先让大家来比较一下Direct9和Direct10在3D图形上的不同表现:
下面是DXD9:
下面是DXD10:
我们可以看到天上的云彩更逼真了,而水的处理简直就是传神,跟真的一样啊!!
下面是DXD9:
下面是DXD10:
是不是很爽呢?!哈哈
下面是DXD9:
下面是DXD10:
Wow~~像真的一样耶!
哎~~啥也不说了,学好计算机图形学是关键啊!
下面就介绍Direct10的新特性:
=======================================
DX10技术解析!没有DX10就没有新电脑
● G80,全球首片硬件DirectX10 GPU
从2006年11月8日算起,这天全球图形技术领袖NVIDIA发布全球首款支持DirectX10、代号为G80的GeFrce 8800系列显示核心,算来已经有近半年时间。4月17日,NVIDIA公司又发布了基于GeForce 8800新一代核心架构的中端产品,分别是GeForce 8600GTS、GeForce 8600GT、GeForce 8500GT,发布即上市。这延续了NVIDIA在近几代产品的一贯作风。产品的发布日就是产品的同步上市时期,也就是说,今天,你就可以在市场上通过零售方式买到NVIDIA正式宣布的以上三款完整硬件支持DirectX10 GPU的显卡产品。06年被AMD收购的ATI的支持DirectX10 API的R600,由于一再推迟发布,已经落后NVIDIA新的产品进程至少半年时间,在芯片技术领域,18个月是整整一代产品的周期,而6个月以上的时间差,意味着失去了整整“半代”产品的节奏。不过,从一些放风式的“特别透露”出来的消息声称:AMD的R600产品也将在未来的2个月内面市。
无论是GeForce 8600GTS、GeForce 8600GT、GeoForce 8500GT发布即上市的“实力派”作风;还是传说中的R600面市前做的那样,通过放消息预热市场的“偶像派”做法;不管怎样,确定一定以及肯定:一个新时代的到来,即个人电脑图形处理技术已经跨入了DirectX10时代,也可以称之为vista的GPU时代。因为只有微软的操作系统统治了个人电脑93%以上的市场份额,而新的微软操作系统vista替代旧版操作系统也是不可遏制的潮流,并且,只要是vista电脑,就意味着最先进的API——DirectX10,它对新的硬件与软件编程提出脱胎换骨的要求。使得GPU在个人电脑的重要性中,加大了权重,越来越有赶超CPU的趋势,对GPU性能要求也提到了新的高度,这一切,就是为了满足用户日益对操作界面更人性化、更大便利性的要求。
新上市的Geforce 8600GTS
已经上市的全新硬件架构的G8X系列将会改变当前的局面,掀开新一代GPU技术发展的序幕。GeForce 8X00系列完全基于微软DirectX 10 API开发,带来前所未有的设计,融合了统一着色架构、Shader Model 4.0等先进技术。正是由于最新的vista上市,宣布了新的操作系统时代,而vista的最新API——DirectX10决定了电脑的最新应用和最新功能,基于这个层面上,只有显卡是完全硬件支持DirectX10这一本质特征,决定了你所使用个人电脑是否是真正意义上的“新电脑”。
● vista系统的Direct10 API有何优势?
1、统一着色器架构
此前的显卡都采用象素着色器跟顶点着色器分离的架构,这种架构不允许GPU同时处理象素跟顶点着色。比如说显卡在进行顶点着色的时候象素着色器单元就变成闲置,浪费了资源而且还形成了不必要的性能瓶颈。特别是现在分离式架构的GPU 的PS资源都要远高于VS,在这种状况下瓶颈的负担无疑是雪上加霜。实际上这种情况我们在游戏里就经常碰到。而在采用了统一着色器架构的GPU以及运行于DX10的系统中,显卡可以同时对顶点、几何以及象素着色进行处理,而不必等待逐个分别进行。这也使得资源得以合理分配,保证整个架构高效运行。
虽然目前只有NVIDIA的G8X采用了统一着色器架构。统一着色器架构还会令GPU更加适合处理通用化任务,这是由于一方面程序员无需再为不同的着色器单元编写不同的执行单元,也不必去顾虑不同着色器之间存在的差异,所对应的接口以及操作方式全部融为一体,从而使负责的开发流程得到一定程度上的简化。另一方面是由于shader单元的统一化使得任何通用计算程序都将在统一着色器架构的GPU上发挥它的所有计算资源,不存在我们上面提到的分离架构造成的着色器单元闲置问题。此外,统一架构的带来的执行单元和配套资源上的共享化也让之前分离架构上存在通用化计算问题迎刃而解。因此,游戏里像物理模拟、运动模拟以及其它原本不适合GPU计算的任务如今都可以交给GPU来做。GPU强大的性能使得那些原本无法达成的任务,比如流体运动模拟,得以在游戏中实现。这也极大了减低了系统对CPU的依赖性,原来给CPU的工作,让GPU执行通用化操作,而现代高速GPU的通用操作性能已经超过了高速CPU的性能,极大提高了系统的整体运算效率。
2、Geometry Shader(几何着色器)功能
对于DirectX 9和DirectX 10的区别, DirectX 10将利用DirectX 10来克服他们使用DirectX 9所面临的传统限制。例如,geometry shader(几何着色器)功能将使得游戏可以加速游戏的数学运算性能,诸如在GPU上进行物理运算。
在过去的DX9中,Vertex Shader每一次运行只能处理一个顶点的数据,并且每次只能输出一个顶点的结果。在整个游戏场景中,绘制的几何图形的任务量非常庞大,如果仅仅依靠Vertex Shader单一来完成,效率会极其低下。而更致命的是VS无法单独生成或重组多边形,所以在以往只有VS跟PS的GPU中,生成一个模型往往需要CPU的“大力支持”。
DX10中的Geometry Shader改变了这点。它的作用就是对每个Vertex数据临近的数据进行Vertex函数处理。这种函数处理可以快速的把模型类似的顶点结合起来进行运算。虽然其操作不会象Vertex Shader那样的进行完整的几何转换操作,只是处理器单个顶点的相关函数操作,但是这种操作却可以确定整个模型的物理形状,这将大大加速处理器速度。基于此特性,Geometry Shader可以根据顶点的信息来批量处理几何图形,对Vertex附近的数据进行函数处理,快速绘制出新的多边形。然后再通过steam out将这些结果传递给其他Shader或buffer,使得CPU可以从原本复杂庞大的多边形运算中解放出来。现在可以让GPU直接处理细微的粒状效果,如烟雾和爆炸效果等(在这之前这一任务通常交由CPU来完成)。而由于GS的性能要比CPU高出许多,同屏下能够渲染的粒子数量也就更多,所以可以预计烟雾跟爆炸的效果会比以往更为震撼。你可以期待GPU进行更多的游戏运算,这样将产生更多动态的场景,而减少数据交换信息意味着场景具有更复杂的几何和多样性。而游戏将更加漂亮,因为它们将有更加复杂的模型,更加细致的物体,或者说同一屏幕上更多的物体,而由于结合了更加复杂的物理,视觉效果将更加复杂,更加真实。例如流动的水,微风吹拂的叶子,这些都将是互动的。当你在树林中行走时,被碰到的树枝将分到两边,而在战斗场景中穿行将有烟雾弥散效果,所有这些结果将更加真实,并呈现出更加愉悦的游戏体验。
3、运算效率更高
DirectX 10另一个最令人注目的改进就是可以为API节省计算开销(API overhead)。所谓API overhead就是游戏在处理画面上的每一个物体(object)时(比如人物、岩石等等),都需要先将这些object传送至API,然后再由API传给驱动程序,而这个过程都需要CPU做出处理。当 Object 越多(每一帧画面通常超过几百个),对CPU的负担就越重,所需要消耗的处理时间就越长从而构成瓶颈。而之前DirectX 9就存在API overhead太大造成CPU资源占用率过高的弊病,因为DirectX 9每使用一个object都需要CPU为其做资源确认。
而全新的DirectX 10针对这方面作出了改善,采用了全新设计改良的ValidATIon机制。现在只有在该object生成时,才需要CPU做确认,此后在使用Object时就不需要再次确认了,从而大幅降低CPU的负担。简而言之就是DirectX 10可以有效减少CPU处理3D物体的时间,所以现在每一帧画面可以拥有更丰富的3D物体(无论是树木、贴图还是人物)。而CPU被释放出来的空余资源还可以让制作者用于其它诸如物理、人物运动以及AI等方面的计算。DirectX 10还带有一个真正的整数指令集,可以尽可能完成更多的寻址计算,更多的数据打包和解包;当然这些功能并不会创造出一些新的画面特效,但它允许开发人员在GPU中高效的完成更为智能、复杂的渲染工作!
此外,HDR(高动态范围渲染)方面,由于DirectX 10硬件支持RGBE,所以HDR纹理不再需要特别解码处理也能实现,HDRAA也得以轻松实现。另外DX10还支持两种全新的HDR模式,一款是 R 11G 11B10 ,采用 11-Bit 红色和绿色、 10Bit 蓝色,另一款是采用 5Bit 共享加每种颜色以 9Bit 作尾数运算,以上两款HDR模式在HDR品质上和标准的FP16几乎没有差别,但却能有效减少资源损耗及显存带宽占用率,从而消除了以往HDR的瓶颈。另一方面, DirectX 10 还支持更高精度的FP32 HDR(每通道32bit,所以也有人美其名曰:128bit HDR),随时为玩家提供更高质量的 HDR 效果做好准备。
● G80,纯正的GPGPU血统!
从R300到NV40,再到现在最新的G80,每一代旗舰GPU的晶体管都大大超过了同期的顶级CPU,也在挑战其同时代半导体工艺的极限。随着GPU性能的提升,近年来GPU用于通用计算(General Purpose GPU)及其相关方面的问题成为一个十分热门的话题。GPGPU指的是利用图形卡来进行一般意义上的计算,而不是单纯的绘制。以NV40为代表的可编程GPU发布后,GPGPU进入了一个高速发展的全新时代。相比固定的流水线,目前硬件的可编程顶点和片段单元不管是运算精度,支持的指令数还是寄存器个数都有了很大提高,更重要的是基于Shader Model 3.0版本顶点和片段着色器版本的硬件开始支持动态流控制的循环和分支还有子函数操作。比如,现在的片段着色程序最多允许同时访问16个独立的纹理,支持长度不受限制的指令数,寄存器个数也大大提高。而且提供了32位浮点精度的运算和存储格式,对于通用计算来说,这就很容易做出更为复杂的运算。尽管GPGPU前途一片光明,但挑战与机遇永远是并存的,目前GPGPU所面临的问题也非常的多。
首先是当前的图形硬件还存在很大的局限性。GPU毕竟是为了图形渲染而生,其通用性离真正的通用处理器还有很大一段距离。比如,在DX9硬件上,Vetxe Shader和Pixel Shader总共的指令数被制在1024(512+512)条指令,(片段着色器)Pixel Shader最多只能同时访问16个纹理,进行分支和循环操作的开销也比大。此外,片段着色程序虽然支持R16F的浮点类型数据格式,但缺乏其他类型的支持,限制了通用运算的多样性,而且R16F这种单精度的IEEE格式对于通常所用的工程计算而言精度还是低了点。由于每个shader程序最多带32个Temp寄存器,指令数也受到限制,所以在很多通用计算程序的编写中不得不采用multi-pass来完成一些复杂的运算,这样就降低了性能。由于整个GPU只能通过顶点纹理来读取数据,通过渲染到纹理来写入数据,对于显存没有任何间接写指令,输出地址只能由光栅化引擎决定,不能由程序改变,无法进行任意的读写操作,因此必须将计算的中间结果保存以避免多次读写,这又无形中降低了GPU的通用运算性能。另外在硬件上如果采用浮点运算,则不能利用硬件本身的颜色混合操作,也不能进行mipmap的自动运算,这些也妨碍了GPU在通用计算上的应用。不过,支持DirectX 10的G8X系统的的出现,将让这些问题迎刃而解。
NVIDIA方面,新一代G8X图形核心采用了先进的统一渲染架构,拥有多达128个流处理器,引入几何着色器功能……这一切简直就是专为GPGPU运算而生!为了最大程度的发挥几何着色器的威力,G80还专门设置了一个名为流输出层(Stream Output State)的部件来配合它使用。这个层的功能是将Vertex Shader和Pixel Shader处理完成的数据输出给用户,由用户进行处理后再反馈给流水线继续处理。它可以直接读写本地显存。我们可以通过Stream Out把GPU拆成两段,只利用前面的一段几何运算单元。对某些科学研究,也可以通过stream out来利用GPU的数学运算能力,等于在CPU之外又平白多得了一个数学协处理器。我们可以这样理解G80图形核心的几何着色器和Stream Out单元:GS提供了改变图形数量的能力,Stream out提供了硬件Multi-pass的支持。可以预见,今后围绕这些全新的功能,又会有一批新的GPU通用计算程序出台。
基于当前的G8X架构,NVIDIA现在已经有了一个针对GPGPU的解决方案,被称作Compute Unified Device Architecture,简称CUDA。CUDA是一个完整的解决方案,包含了API、C编译器等,能够利用G80的片内L1 Cache共享数据,使数据不必经过内存-显存的反复传输,shader之间甚至可以互相通信。对数据的存储也不再约束于以往GPGPU的纹理方式,存取更加灵活,可以充分利用stream out特性。以上几点都将大大提高GPGPU应用的效率。例如,在游戏中我们可以使用CUDA来让GPU承担整个物理计算,而玩家将会获得另他们感到惊奇的性能和视觉效果。另外,用于产品开发和巨量数据分析的商业软件也可以通过它来使用一台工作站或者服务器完成以前需要大规模的计算系统才能完成的工作。这一技术突破使得客户可以任何地方进行实时分析与决策。同时,一些以前需要很先进的计算技术来达到的强大计算能力的科学应用程序,也不再受限在计算密度上;使用CUDA的计算可以在现有的空间里为平台提供更强大的计算性能。
在正式发布了基于G80核心的Quadro专业3D显卡之后,目前NVIDIA正在酝酿一款全新的流处理加速卡,主攻图像加速、科学计算等GPGPU运算领域……