什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?( 二 )


什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
OpenGL在所有的領域都很吃香 , 包括許多的專業領域 。 而direct3D對于我們這些玩游戲的玩家來說是最熟悉 。
除了direct3D之外呢 , directx家族還有很多小兄弟 。 比如說direct2D是負責2d圖形的 , directcompute , 是負責通用計算的 , xaudio負責音頻 , 而xinput這個名字聽著是不是很耳熟啊 , 它是負責xbox手柄輸入的 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
隨著windows版本的更新 , directx也在不斷的更新換代 , 每一次版本升級都會加入一些新的特性 , 帶來畫面上的突破 , 或者效率上的改進 。
比如directx史上非常大的一次進步 , directx9.0c
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
它就帶來了SM3.0的支持
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
加入了如:置換貼圖、次表面反射、柔和陰影、還有最重要的全局光照這些特別棒的特效 。
所以你會發現2004年之后的游戲畫質突然就好起來了 。
再比如directx11給我們帶來了曲面細分的特性 , 讓我們游戲中的物體細節更加豐富 。
同時也幫助開發者節省了建模的時間 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
最近的一次更新是directx12 , directx12很有意思 , 它的游戲畫面相比directx11沒有任何的進步 , 因為directx12的升級完全是效率上的 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
那么directx12是怎么樣提高效率的呢?
還記得我們剛剛這張流程圖吧 , 我們把這個理解為directx11的流程 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
那么directx12的流程就是這個樣子的 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
在directx11時代呢 , 驅動和系統層會代替開發者來管理硬件資源 , 但是斗地主的時候選托管肯定沒有你自己打的好 , 所欲驅動不一定完全理解軟件的需求 , 只有開發者自己才最明白自己的軟件 。
在directx12這里 , 開發者的這個夢想就成真了 。
什么是OpenGL?什么是direct x?單機游戲運行為什么與它們有關?
文章圖片
我們把directx12稱為底層api , 因為它賦予了開發者更多的管理權限 , 更加接近底層硬件 , 可以讓開發者更自由的和硬件直接交流 。 這樣一來 , 開發者就有了更大的調整空間 , 可以給游戲做出優化 。
這種剔除冗余 , 消除官僚主義作風 , 在directx12的方方面面都有所體現 。 比如說通過減少api帶來的cpu開銷 , 支持更多的Drawcall , 這樣就可以更好的利用上多核處理器了 。
可是很有意思的一個現象發生了 , directx12的游戲 , 盡管也有表現不錯 , 性能進步的 , 但同樣也出現了性能倒退的游戲 。
這是怎么回事呢?不是說好的directx12可以提升效率的嗎?怎么有些游戲反而開倒車 , 不如directx11代呢?這我就得給你好好分析一下了 。
你看這底層api的意義就在于放權給開發者 , 因為我們覺得開發者是最了解游戲的 , 可是你給了開發者自由 , 不代表它們愿意去干 。
本來應該驅動層干的事情 , 你現在扔給開發者來做 , 首先人家不一定樂意加班 , 其次游戲公司也不一定愿意掏這筆錢 , 最后也不是每個開發者都有這么強的技術能優化好游戲 , 這就是所謂的自由不等于繁榮 。

相關經驗推薦