DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

文章图片

DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?

大家好 , 欢迎来到霍夫日记 , 我是霍夫 。 今天我来说说什么是direct x?什么是OpenGL?为什么玩单机游戏的时候 , 经常弹窗提示缺少这些程序组件无法运行游戏呢?
某天 , 你刚下好的三A大作正版游戏终于下载完毕了 , 心里想着可以开玩了 , 赶紧点击EXE程序运行 。
于是出现以下画面


怎么打不开不了啊?计算机中提示缺少d3direct x9.d l l 是怎么回事?
我们玩游戏天天都得接触direct x 和OpenGL , 没有这些程序游戏就玩不了了 。 可是你有没有想过它们究竟是干嘛用的呢?这个OpenGL 又是什么鬼呢?


在很早很早以前 , 软件开发缺乏标准编程 , 可以说是一对一的 。 我这串代码就对应着一种硬件一种系统 , 这样一来呢 , 开发的过程就极其的繁琐 , 毕竟你这软件可是一对一高端定制 , 你想让全世界的设备都用上你的软件 , 那对不起 , 你得一个个去找软硬件厂商 , 一个个去做适配吧 。

那这个时候我们就需要一个中间层 , 在不同的软件 , 不同的硬件之间进行沟通 , 这就是a p i 应用编程接口 。

a p i 就相当于是一系列函数的集合程序可以直接通过这些函数进行构建 , 不需要访问更底层的东西 。 这样一来 , 软件开发的门槛就降低了 。
a p i 的意义在于简化编程的操作 。
打个比方 , 你现在想和法国人交流 , 如果没有翻译的话 , 你就只能自学法语 。 可这也太麻烦了吧 , 我就想搭个话 , 喝两口法国红酒 , 我还得再学一门外语才行吗?
当然不必这么麻烦 , 你找个翻译不就行了吧 。 这a p i 就是你的翻译 , 尽管翻译会造成延迟 , 会降低一点交流的效率 , 你得额外花点时间等翻译说完 , 但至少你可以听懂法国佬说话了 , 可以正常交流正常喝酒了 , 这才是最重要的 。
说到这里你也应该猜到了 , 我们亲爱的direct x 和OpenGL 正是a p i 。

确切的说呢 , OpenGL 是一种图形a p i ,而 direct x 则是许多各种各样a p i 的集合体 。 其中当然也包括图形a p i--direct 3D 。

图形a p i, 猜猜这个名字都知道这是为图形计算设计的 , 那么玩游戏说的最多也是图形a p i , 这里我们用direct 3D 来举例子 , 在游戏中它的作用差不多是这个样子 。

承上启下嘛 , 它就相当于是游戏引擎和显卡驱动、系统层之间的桥梁 , 是同时精通上层下层各种语言的翻译官 。
OpenGL 其实也是类似的一个工作流程 , 但是它相比direct 3D 更加开放一些 。 因为OpenGL 是由非盈利性的行业联盟khronos group 牵头的 , 它是跨平台的 , 对于系统没有限制 , 你不仅可以在windows 上用 , 也可以在mac os 、linux 上使用 , 甚至还可以在安卓和i o s 上使用它们的阉割版本OpenGL e s 。
相比之下呢 , direct 3D 就只允许在微软自家的windows 和x box 上使用了 。 此外 , OpenGL 的学习门槛也更低 , 开发人员更容易上手 。 但是它的缺点就是效率往往不如direct 3D , 新特性的更新往往也比较慢一些 。 说白了就是不如direct 3D先进吧 。 但这两种图形a p i 地位是一样重要的 。

OpenGL 在所有的领域都很吃香 , 包括许多的专业领域 。 而direct 3D 对于我们这些玩游戏的玩家来说是最熟悉 。
除了direct 3D 之外呢 , direct x 家族还有很多小兄弟 。 比如说direct2D 是负责2d图形的 , direct compute , 是负责通用计算的 , x audio负责音频 , 而x input 这个名字听着是不是很耳熟啊 , 它是负责x box 手柄输入的 。

随着windows 版本的更新 , direct x 也在不断的更新换代 , 每一次版本升级都会加入一些新的特性 , 带来画面上的突破 , 或者效率上的改进 。
比如direct x 史上非常大的一次进步 , direct x9.0c

【DirectX|为什么玩单机游戏会提示缺少程序组件无法运行游戏?什么是direct x?什么是OpenGL?】它就带来了SM3.0的支持

加入了如:置换贴图、次表面反射、柔和阴影、还有最重要的全局光照这些特别棒的特效 。
所以你会发现2004年之后的游戏画质突然就好起来了 。
再比如direct x 11给我们带来了曲面细分的特性 , 让我们游戏中的物体细节更加丰富 。
同时也帮助开发者节省了建模的时间 。

最近的一次更新是direct x 12 , direct x 12很有意思 , 它的游戏画面相比direct x 11没有任何的进步 , 因为direct x 12的升级完全是效率上的 。


那么direct x 12是怎么样提高效率的呢?
还记得我们刚刚这张流程图吧 , 我们把这个理解为direct x 11的流程 。

那么direct x 12的流程就是这个样子的 。

在direct x 11时代呢 , 驱动和系统层会代替开发者来管理硬件资源 , 但是斗地主的时候选托管肯定没有你自己打的好 , 所欲驱动不一定完全理解软件的需求 , 只有开发者自己才最明白自己的软件 。
在direct x 12这里 , 开发者的这个梦想就成真了 。

我们把direct x 12称为底层a p i , 因为它赋予了开发者更多的管理权限 , 更加接近底层硬件 , 可以让开发者更自由的和硬件直接交流 。 这样一来 , 开发者就有了更大的调整空间 , 可以给游戏做出优化 。
这种剔除冗余 , 消除官僚主义作风 , 在direct x 12的方方面面都有所体现 。 比如说通过减少a p i 带来的c p u 开销 , 支持更多的Draw call , 这样就可以更好的利用上多核处理器了 。
可是很有意思的一个现象发生了 , direct x 12的游戏 , 尽管也有表现不错 , 性能进步的 , 但同样也出现了性能倒退的游戏 。
这是怎么回事呢?不是说好的direct x 12可以提升效率的吗?怎么有些游戏反而开倒车 , 不如direct x 11代呢?这我就得给你好好分析一下了 。
你看这底层a p i 的意义就在于放权给开发者 , 因为我们觉得开发者是最了解游戏的 , 可是你给了开发者自由 , 不代表它们愿意去干 。
本来应该驱动层干的事情 , 你现在扔给开发者来做 , 首先人家不一定乐意加班 , 其次游戏公司也不一定愿意掏这笔钱 , 最后也不是每个开发者都有这么强的技术能优化好游戏 , 这就是所谓的自由不等于繁荣 。

底层a p i 把游戏的命运全权交给了开发者 , 而开发者的表现参差不齐 , 这才导致了direct x 12的游戏表现参差不齐 。
比如单机游戏“方舟生存:进化”direct x 12模式的表现就很糟糕 , 因为这个游戏的开发商是一个小工作室 , 没什么开发经验 , 用的又是虚幻4引擎 , 是别人家的东西 , 它们是没有足够的技术和精力来驯服direct x 12模式的 。
相比之下 , 我们可以看战地一direct x 12的表现就很优秀 , 这就是因为dice 有非常丰富的开发经验 , 它们很熟悉自家的寒霜引擎 , 再加上EA 比较重视这个项目 , 投了很多钱进去 , 所以才真正的发挥出了direct x 12的作用 。
同样的 , OpenGL 的继任者vuikan 也是底层a p i , 也可以自由的和底层硬件进行交流

vuikan的情况要好一些 , 因为有id software这样久负盛名的开发商撑腰

做出了非常优秀的id hech6引擎 , 所以不管是doom 还是德军总部2都有着非常优秀的vuikan性能 。
但是总的来说 , 像direct x 12或者vuikan 这样的底层的a p i 都严重依赖于开发者的能力 , 只有优秀的开发者才能给我们带来性能提升 。
所以时至今日 , 大多数的游戏厂商仍然在采用direct x 11制作游戏也就不足为奇了 。
你看到的这个底层a p i 可以榨干硬件的潜力 , 但是需要开发者多花时间来做优化 , 这听起来是不是有点耳熟呢?
这不就是游戏主机上的做法吗?难道游戏主机上用的也是底层a p i 吗?
没错 , 但也不尽然 , 一方面这一招确实是和主机学的 , 我们的主机很早以前就开始支持底层a p i 了 , 而且由于主机的硬件比较单一 , 游戏开发商理论上是不需要给其他厂商做适配的 , 主机上的a p i 往往也会基于主机的硬件 。 做出针对性的优化 。
比如PS4和 XONE的主机都是低U 高显的类型

g p u 强劲c p u 弱 。
所以不管是PS4还是x box one , 它们的a p i 重点都放在了通用计算上把c p u 的负担扔给G p u 来做 , 这就是深度定制的底层a p i, 放在主机上合情合理的 。
然而另一方面 , 很多的主机不仅支持底层a p i , 也同时支持传统的高层a p i 。
比如p s 4就提供了g n m 和g n m x 两种a p i , 前者是低到不能再低的对着硬件直接啃的那种底层a p i , 而后者则比较像direct x 11 , 属于高层级的a p i 。

可最让人意想不到的是 , ps4的开发者使用更多的还就是高层级的g n m x , 而不是接近底层的g n m 。
这是为什么呢?不是说好的主机优化使用底层a p i 的吗?
原来g n m x 存在的目的 , 主要是为了方便跨平台游戏的移植 。

因为它和direct x 11非常像 , 所以开发者很容易上手 , 并且不用修改太多的代码 , 就能把游戏搬到ps4上 。
但是它的缺点相信你也发现了 , ps4上很多的跨平台游戏 , 性能表现还不如同配置的p c 。
相比之下 , 顽皮狗和圣莫尼卡这些顶级的第一方工作室就和其他的乌合之众不一样了 。 它们更喜欢使用接近底层的g n m 来压榨干ps4的每一丝性能 , 所以你才会看到这么多画面精美的独占大作 。
索尼将两种a p i 结合使用 , 门槛低上限高 。
现在你知道为什么当年的刺客信条大革命只能跑二十帧的机器 , 如今却能流畅的运行类似战神四这种独占大作了吧 。
看完这期文章 , 相信你对图形a p i 也有一个简单的认识 , 喜欢的朋友别忘了点赞收藏 。
我们下期再见啦 , 拜拜 。

    推荐阅读