分享

小科普 | DirectX——它到底是谁?

 丫头家老公 2017-07-17



对于大多数游戏玩家来说,DirectX(简称DX)这个词真是既熟悉又陌生。

 

说熟悉,咱们玩游民正版长大的这代人,DX和VC都装了无数遍了,就算没有培养出感情,至少也是邻里熟客了。没办法,不装玩不了游戏呗。


说陌生,大多数同学还只是觉得,我玩游戏得装DX,我运行游戏得有DX的帮助和支持,真正了解DX的人还是寥寥无几。

 

那么DX到底是个啥呢?





▌一套标准


首先,DirectX是一套标准



在30年前的DOS时代,许多软件开发都是直接针对特定的硬件来编程的,这样做的好处是运行效率高,但是开发过程极其繁琐,不仅需要耗费大量的时间来适配硬件,更会产生兼容性问题。

 

有了DirectX这套标准,事情就简单多了。硬件的研发必须符合这套标准的要求,而软件层面上,驱动程序和应用也必须基于这种标准来编写,这样无数的软件才能兼容如此广泛的硬件。除此之外,它还收录了许多常用的重要函数,方便开发者直接调用,而不用把时间浪费在重复劳动上。



打个比方,曾经的开发者就如同旧社会的裁缝——你首先得为客户量身,然后按照其身材定制衣服,这样的好处是:做出来的衣服很贴身。但是首先,这件衣服并不能给别的客户穿,因为每个人的身材都不一样。其次,定制这件衣服需要耗费大量的时间和精力,因此裁缝的工作效率很低。



而DirectX就像一种国际纺织标准,它规定了170/92A的衣服,必须是“这个”尺寸的,这样才能保证做出来的衣服每个人都能穿。除此之外它还收录了许多建议:T恤采用“这样”的工艺可以提高生产效率,使用“那样“的面料可以提高舒适度。因此现在,无论是“裁缝”还是“纺织厂”,做衣服的时候可以随时参考这些建议,提高工作效率,正如DX发挥的作用一样。

 




图形API——Direct3D


然后,DirectX这套广泛的标准之下,包含了各种各样的API(应用编程接口),其中我们最熟悉的、玩游戏时最常用的,当然是图形API——Direct3D(简称D3D)。



API就相当于一套预先设计好的函数,程序可以直接通过这些函数进行构建,不需要针对特定硬件来开发,这样可以有效提高开发效率。



形象一点,API类似于一套乐高积木,它遵循标准化原则,即每一块积木都有限定的规格,你制作的所有作品都是基于标准。他提供了几种基本形状的积木,比如长方体和正方体,你可以在这些小积木的基础上快速搭建出一个作品,而不需要像传统手工艺人那样,在一块木头上慢慢雕刻慢慢制作。

 

具体到Direct3D,我们用一张图来简要说明:


▲实际的工作层级图远比上图来得复杂,并且不同游戏也会有不小区别,为了方便大众读者的理解,我们简化成上图,仅供参考

 

作为图形API,Direct3D扮演了一个承上启下的角色。简单地从宏观角度上讲,他可以算作同时精通高级语言和底层语言的翻译官,或是游戏与显卡之间的桥梁。

 

对了,我一直听说DX12有什么底层优化,难道和上面的工作流程有什么不同吗?



确实有所不同,DX12的图大概是这样的



注意到区别了吧,在以前的DX11中,开发者只能眼睁睁看着硬件底层驱动(汇编部分)完成设备所有的上下文工作,不能亲自干涉,这虽然比较省事,但是硬件底层驱动会成为瓶颈,限制显卡的潜力。


而DX12开放了底层的开发权,使得开发者能按照自己的意愿对设备的上下文进行干预,因此只要程序员足够厉害,并愿意花时间,就能对底层作出优化,带来更好的效率体验。(这大概就是育碧迟迟不推出DX12游戏的原因吧)



哟,看起来似乎游戏已经离不开Direct3D了啊……



倒也不是,现代游戏的开发离不开图形API,但是图形API并不只有D3D一种。



支持多平台的OpenGL、移动端的OpenGLES、AMD的Mantle、底层优化的Vulkan、苹果的Metal、PS4的GNM、尸骨未寒的Glide等等,都曾或多或少为我们玩的游戏作出贡献。只不过由于在Windows平台上,DX属于亲儿子,硬件厂商的支持度高,并且D3D在游戏中的工作效率处于同时代上游的水平,因此广为受用。

 





说到这里

文章也接近尾声了

不过既然提到了各大图形API

自然也有些excited的趣事和大家分享……

 ▼





第一件事同样是底层优化,DX12为何还是干不过主机?



索尼PS主机使用的是GNM、GCM等图形API。这些API和DX12一样具有比较深的底层权限(实际上比DX12还要深),开发者的优化余地非常大,因此不难理解为什么PS的游戏运行效率能比同等规格硬件的PC要高得多。但是为什么同样开放了底层权限的DX12,在许多游戏中的效率表现甚至还不如DX11呢?



像DX12或者索尼GNM这样的API,之所以能有较高的理论效率,是因为把部分设备上下文工作从底层驱动移交给了开发者来完成。那么,如果开发者偷懒的话,那DX12不就没什么卵用了嘛……

 

而在PC上,由于硬件种类繁多,导致开发者的负担更重,进行底层优化需要耗费更多的精力和工时,自然愿意进行优化的开发者就少了。相反,在PS主机上,由于硬件配置是固定的,开发者可以专心地利用API的优势,对底层作出更深入的优化,最终反映在运行效率上自然是十分出色的。

 

这就说明了一点,有了DX12和Vulkan,PC的理论图形效率其实已经可以比肩游戏主机了。但实际上,你玩游戏能不能更流畅,还是要看开发者的心情啊……

 

 

第二件事,XBOX游戏机的名字,其实就源自DirectX。



初代XBOX在开发阶段的原名叫DirectXBOX,由于名字太长,当时的员工在发邮件时都习惯简写成XBOX,久而久之“XBOX”就成了游戏机的正式命名。



实际上,三代XBOX均采用了DirectX的API,这也是为什么无论是当年的战争机器1、光环2,还是现在的地平线3、战争机器4,微软经手的游戏总能如此轻松和谐地同时运行在XBOX和PC上。(嗯,PC都能玩XBOX游戏了,我买的XBOX还有何用呢……)

 

 

第三件事,曾几何时,DirectX并不受游戏大作的青睐。



当年有一个API做出来的PC游戏,无论是《暗黑破坏神2》,还是《极品飞车2 SE》,均有着“吊打DX版本”的反射效果、阴影效果,色彩也更加丰富,各大游戏公司争相在它的基础上开发游戏,那便是3DFX曾引以为傲的Glide API。


▲左:D3D;右:Glide on Voodoo1


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多