微软终于发布了新版3D图形API——DirectX12,这将会为3D技术的发展带来哪些好处?对玩家平时进行游戏又将产生哪些影响?
时隔整整4年半,微软终于发布了新版的3D图形API——DirectX12,与显卡这种我们可以看得见的硬件技术指标增长相比,DirectX12将会为3D技术的发展带来哪些好处?对玩家平时进行游戏又将产生哪些影响?
在2014年的游戏开发者大会(GDC 2014)上,一个令人兴奋的消息让所有的PC游戏玩家为之关注,那就是微软正式发布了DirectX12 API。也正像之前微软暗示的那样,DirectX12将注重提升3D图形底层的运行效率。不过目前由于其相关技术信息比较少,大量的细节还没有披露,因此本文将暂时从已有的资料中,为大家梳理一下DirectX12的重要改进之处,以及DirectX 12对整个IT行业可能带来的影响。
为什么要从底层开始?PC<游戏主机
有关图形编程的底层效率的内容,在过去的六个月中已经成为热门的公众话题,尤其是AMD在推出了诸如Mantle这样的API后,底层优化对效率的提升再次成为焦点内容。出现这样的情况并非偶然也并非一朝一夕,而是整个PC业界长期以来的酝酿和技术进步所累积的。在长达几年的发展后,终于以这样的形式爆发了出来。
那么,为什么大家都将目光集中在PC的底层图形进化上呢?最简单的答案就是——性能,更具体一些的答案则是,底层开发能带给我们非常多的优势。图形底层的改进和开发并不是什么新鲜的话题,绝大多数游戏机设备都是通过这样的方式来获取更强的性能——这基于游戏机本身是一个固定的平台,因此很容易做出针对性的开发。通过硬件和底层程序开发人员的努力,游戏机往往可以得到与其硬件性能看起来似乎完全不匹配的实际图形效果表现,尤其是与类似甚至更高配置的PC相比,游戏机的效率简直令人难以置信。
然而,随着个人电脑的快速发展,行业很快就为个人电脑设计了大量高级API,比如DirectX和OpenGL,通过这些高级API,PC兼容了更多的硬件并且获得了不错的图形效果。也正是在这个发展过程中,图形API完成了统一化,那些在DOS时代出现过或某些特殊用户使用的图形API已经销声匿迹,统一的图形API使得个人电脑使用更为方便,性能表现也令人满意。
经过如此多年的发展后,情况发生了一些改变,在使用过程中,人们发现这些高级API可能存在一些问题——正如AMD的Mantle所展示出的那样。简单来说,在这些高级API发展的过程中,CPU和GPU的硬件性能也发生了改变。相比之下,CPU的单线程性能已经很难得到提升,其主频也达到了一个很高的地步,继续提高CPU的主频将越来越困难并且会耗费大量的电能,之前通过简单的架构改进就能轻松提高的IPC也变得举步维艰。但在GPU方面,由于图形计算的并行特性,其性能一直在大幅度攀升。
最终结果是,当我们考虑CPU的单线程性能增长幅度时,才发现GPU已经远远将其抛离——这本身可能未必有什么问题,但在使用DirectX和OpenGL这类高级API的时候,情况可就大不一样了。这些API在为GPU准备数据时的工作基本上都是调用单线程的CPU运算资源,然而由于CPU单线程性能增遇到瓶颈,因此就产生了差距。也正是由于这种差距的产生,大量的时间被浪费在GPU等待CPU上,也就导致图形性能的提升难以跟上GPU的硬件发展步伐。
而如果通过底层开发来设计游戏,那么相比高级API,底层开发对这种困境要更为“适应”一些。底层开发依旧需要一个CPU主线程,可能会发生瓶颈,但是底层开发往往不使用受制于CPU性能很严重的API,并且底层开发不需要CPU为GPU预先准备数据,因此底层开发更容易使用多个CPU并行处理,并预防瓶颈现象的出现。这也就是很多游戏机为什么使用相对弱小的多核心CPU也能实现与高性能PC匹敌甚至更好的游戏效果。
出现这种情况后,使得人们需要更为认真地评估目前的API在个人电脑上的使用情况,游戏开发者和厂商都需要更为强悍的性能。此外还有一个比较偏激的观点是,为了尽可能地减少全新一代游戏机对PC游戏的威胁,至少PC游戏在软件发展方面需要尽可能地跟上游戏主机。目前的情况是,电脑相比游戏主机,虽然依旧存在极为明显的硬件性能优势,但是考虑到种种已经存在的性能失衡以及瓶颈,最终电脑上的性能表现甚至不会比主机更为出色。一台高性能PC的绘制调用数量甚至比仅仅价值400美元的游戏主机还少,这显然是不够合理的。
从MacP ro的CPU与GPU近7年来的性能发展趋势来看,GPU性能的提升速度显然要比CPU快很多。
提升CPU多线程效率为主 深入DirectX 12内部
正是基于以上原因,微软带来了最新的DirectX 12,这表示微软开始真正重视改善底层程序运行效率的情况了。不过现在距离DirectX12正式发布还有将近18个月,因此,微软暂时没有公布非常详尽的技术细节,下面就让我们通过微软公开的发展计划以及部分内容,一起来了解一下DirectX12的大致情况。
从一个比较高的层面来看的话,DirectX 12很像AMD已经发布的Mantle,微软设定了一个和AMDMantle基本相同的目标,那就是尽可能改善CPU-GPU体系中的瓶颈现象。这其实并不奇怪,最终DirectX12很可能带来和Mantle类似的效果。
细致地来看一下,和Mantle相同的是,DirectX12的目的是大幅度降低CPU在整个CPU-GPU过程中的计算开销。CPU目前耗费时间最多的部分是为GPU准备命令列表并存储至缓冲区,在DirectX12上,这个任务将交给开发人员而不是CPU,也就是说开发人员将预先准备好这些内容,并将其分配在不同的CPU核心上完成,这将极大程度地提升CPU的运行效率。
为了达到上述目的,微软推出了一些新的概念。比如Bundle,也可以称之为“命令束”,这是一种可重复使用的功能与命令的列表。命令束的出现节约了CPU资源,因为提交一个命令束而不是大量的命令列表将更为直接、简单。在具体的执行中,可以允许命令束一次提交、多次执行,每次执行中可以有一些细微的不同。微软还给出了一个使用案例,其中的角色绘制工作在两次调用中使用了不同的纹理,展示出命令束在使用中的灵活性。
此外,DirectX 12还引入了管线状态对象(pipeline stateobjects,简称PSOs)技术,在这个新技术的帮助下,采用底层开发的程序可以真正深入命令缓冲区的执行过程,并且根据各种图形架构的差异采用最高效率的执行方式。但是目前大多数的DirectX11硬件没有加入管线状态的自由转换能力,所以要想进一步发挥新技术的能力,微软还必须考虑DirectX12如何在新的功能和旧的硬件之间进行平衡的问题。当然,解决办法还是有的。PSOs可以绕过目前的管线限制并重新创建新的对象,具体细节目前暂时无法得知。总体来看,该技术的优势在于可以进一步降低CPU开销、提高效率、增加CPU的绘制调用数量,并且可以为其他任务释放运算资源。
另外一个在DirectX 12中需要提及的内容是DescriptorHeaps,可以称之为描述符堆积。在2012年NVIDIA发布开普勒架构的G PU时,曾经推出过一个新的技术,叫做BindlessTexture——无限纹理。我们知道在图形处理过程中,所有场景及物体表面的颜色细节都是由纹理和着色共同完成的,其中纹理负责完成大面积的颜色表达,而着色则负责局部颜色表现的修饰过程。在传统的图形处理中,纹理和着色存在一个Bind绑定的关系,一组着色代码只能对应128组纹理。不过在开普勒架构中,NVIDIA取消了这个绑定,一组着色代码可以无限制地访问最高达100万组纹理。这不仅大幅提升了可被同时进行处理的纹理数量,降低着色代码被重复执行的几率,还可有效减少对CPU的资源占用,提升GPU的运行效率。
DirectX12也引入了一些目前显卡上的新功能,比如源自NVIDIA的无限纹理技术,可减少对CPU运算资源的占用。
目前看来,新的描述符堆积技术就是将无限纹理技术整合到了DirectX 12中,DirectX12也可以执行类似无限纹理技术的操作,同时扩大着色代码可用资源的数量,甚至使用完全动态的资源索引。最后,DirectX12还将支持JPEG图像压缩技术与ASTC(Adaptive Scalable TextureCompression)自适应纹理压缩技术。其中ASTC已在嵌入式3D API Open GLES3.0,以及Mali-T600系列嵌入式GPU中得到使用。相对常见的ETC、PVRTC、S3TC等压缩技术,ASTC拥有更大的压缩比率,并能提供更好的显示质量,支持广泛的图像格式,已经被OpenGL列为核心标准的一部分
较好的兼容性 哪些硬件将支持DirectX 12
目前三大GPU厂商的产品都已经宣布即将支持DirectX12,包括NVIDIA、AMD和英特尔。英特尔方面只有Haswell内置的核芯显卡可以支持DirectX 12,AMD方面采用GCN1.0和GCN 1.1架构的GPU都能够提供对DirectX 12的支持。NVIDIA的产品就更多了,包括采用Fermi、开普勒和MaxwellGPU的显卡均能够提供对DirectX12的支持。
实际上,从目前发展的情况来看,GCN、Fermi、英特尔的7.5代GPU即Haswell中的核芯显卡存在着非常多的相似点。虽然从整体来看,这些GPU本身有着大量的架构间的差异,比如它们的warp/wavefront尺寸、SIMD阵列的组织方式以及计算能力。但随着GPU的发展以及更高效率计算的需求,GPU变得越来越相似了,至少比早期的可编程GPU之间的差异性要少得多。
因此,不同型号GPU间趋于同质化的现象,使得它们共享DirectX12这样的底层API成为现实。不过这种相似性还不足以像众多X86处理器那样,可以几乎使用类似的抽象层,微软还得和GPU厂商充分沟通,为不同GPU加入不同类型的抽象层来协同底层API进行工作。
游戏主机上早已开始底层优化,对主机编程人员来说,使用DirectX12不会增加太大的难度
目前支持DirectX12的显卡产品
AMDGCN (Radeon 7000/8000/200系列)
IntelGen 7.5 (Haswell中整合的核芯显卡)
NVIDIAFermi (GeForce 400/500)
Kepler(GeForce 600/700/800)
Maxwell(GeForce 700/800)
编程难度不会太大 对游戏开发人员的影响
采用底层开发,这就意味着程序员要面对很多底层暴露的细节问题,需要编程人员具备更高的水平。底层程序开发不一定需要一个编程高手,但是它要比之前直接使用DirectX11要更为困难一些。一般来说,最适合使用DirectX12的是那些AAA级大型游戏开发工作室,尤其是那些在多个平台开发游戏的厂商。假如你已经在给XBOX One或者Play Station4编写相关的程序,那么使用DirectX12只是一小步而已,只要学习一下新的API语法即可。但是对于那些小的游戏开发商来说,对高级编程模型的需求是依然存在的。迄今为止,微软并没有说明关高级程序模型在DirectX12中的情况,但我们估计友好的高级编程模型还会存在,不会消失。
同时,中间件(游戏引擎)在DirectX 12中也将发挥重要的作用。比如在Unreal Engine4上,这个著名的游戏引擎目前完全免费使用,只是开发人员要将最终收入的5%支付给Unreal Engine4的开发商EPIC而已—强大的中间件厂商将使得DirectX 12的使用越来越容易。
全方位推广 对主机和移动平台的影响
DirectX12的引入不仅仅改变了Windows的图形发展,也对微软的其他平台产生了影响。从手机到游戏机,微软正在试图扩大DirectX12的影响范围。具体的说,微软已经承诺新的XBOXOne游戏主机将升级至DirectX 12,毕竟由AMD提供的这颗SOC芯片的图形部分基于GCN 1.1架构设计。
除了主机外,微软还将把DirectX 12带到移动设备上来,比如Windows Phone和WindowsRT系统。移动设备很可能也将获得非常明显的性能增长,因为相比笔记本电脑和台式机,移动设备存在更严重的CPU瓶颈,因此DirectX12的底层优化在这些设备上大放异彩也是理所当然的。
效果显著 早期DirectX 12 DEMO展示
从发展进度来看,DirectX 12将在2015年发布,目前已经有了一个可以运行在NVIDIA显卡上的DirectX12早期版本。基于这个早期版本,微软展示了一些运行在DirectX 12上的程序。其中一个就是大名鼎鼎的3DMARK11,这是一个重负载的3D程序,由于其专门为测试而生,因此很容易分析并监控整个测试过程。
作为演示的一部分,微软展示了DirectX 12下CPU占用率的情况,并比较了DirectX 11和DirectX12的差异性。通过这个测试可以看出,DirectX12能够显著地降低CPU单线程的负载,并且将更多的工作负载分配到不同的CPU核心上去。与此同时,作为系统内核的一部分,内核模式驱动和CPU耗用时间都被降低了。
这个基准测试可能展示了使用DirectX 12最好的那一面,以证明DirectX12确实拥有底层API的优势。一些CPU负载被分配给其余的线程,CPU负载的其他时间耗费也都被完全消除了。尽管最终依旧存在一个主线程,但底层优化使得API能够将工作负载分担给其余的CPU核心,CPU主线程的工作时间得到有效降低。唯一遗憾的是,我们还无法得知这种优化能为3DMark11的最终测试结果带来多大的提升。
此外,微软还展示了第一款采用DirectX 12设计的游戏DEMO——《极限竞速5》。该游戏原本采用为游戏主机服务的DirectX11.XA PI设计,但没费太大的功夫,开发商就将它移植到了DirectX 12上,因此游戏也可以运行在PC上。微软使用了GTXTitan来进行演示,并告诉人们,该游戏的运行速度可以轻松地达到60fps。
还需要一定发展时间
对于DirectX 12来说,目前仅仅是一个开始。微软也只是公开展示了部分内容。因此,现在我们只能了解到DirectX12的部分细节,但这已经足以引起人们的兴趣,毕竟目前的发展方向正确一DirectX12将大幅度改善CPU的性能,而不是那技术规格已经获得大幅膨胀的GPU,这显然将非常令人期待。不过DirectX的发展不仅仅只是技术,还在于汇集所有公司的利益要求并且将其组合在一起。微软目前是PC业界图形技术的引领者,DirectX表现得即开放又私有,这和OpenGL的绝对开放完全不同。所以微软需要证明新的DirectX12是一个对各方都有利的方案,同时也需要加强、维系自己在图形业界的影响力,这都需要长期的工作才能完成。因此DirectX12最终将具有怎样的技术表现,还需要一定的发展时间,还需要更多的案例来证明。《微型计算机》也将持续关注DirectX12的技术进展,及时为大家带来最新报道。
NVIDIATegra K1是目前唯一在图形架构上和桌面PC类似的嵌入式GPU,将能够支持DirectX 12。
得益于对多核心处理器的有效利用,在3DMark11使用DirectX 12时(下)处理器主线程的工作负载、工作时间较使用DirectX11时(上)有大幅度的降低。
从《极限竞速5》的开发速度来看,DirectX 11游戏向DirectX 12移植、迁移的难度并不是太大。