曾經(jīng),當(dāng)你打算開發(fā)一款帶有復(fù)雜圖形技術(shù)的移動App時,大多數(shù)情況下你會立即想到OpenGL ES。在本篇文章中我們將討論Vulkan帶來的好處,以及為什么你真的應(yīng)該考慮使用下一代圖形技術(shù)API。
2016年正式發(fā)布的Vulkan是OpenGL ES?的繼任者,Khronos Group有效回應(yīng)了其他競爭API,比如Direct3D 12、Metal等。它為開發(fā)者提供更大的控制權(quán)以及更透明的程序設(shè)計,從總體上比OpenGL ES具有更大的潛力將性能最大化。然而這確實會以增加復(fù)雜性為代價,不可否認的是Vulkan需要付出比OpenGL ES更多的努力才能夠有效的使用它。但這并不會阻止你作出改變。當(dāng)然這種改變類似于從固定功能管線轉(zhuǎn)換為基于著色器管線的設(shè)計,但值得記住的是這種變化會帶來整個行業(yè)的徹底改變。是的,我們要學(xué)習(xí)的東西還有很多,但是我們在改變之后所獲得的靈活性、控制權(quán)限和自由度都是值得的。
好吧,為什么我們轉(zhuǎn)向Vulkan是如此的重要呢?
首先Vulkan支持Android、Linux、Windows、Tizen、任天堂游戲機、macOS和iOS(借助MoltenVK)等操作系統(tǒng)。我們已經(jīng)開始看到使用Vulkan開發(fā)的游戲在這些平臺上運行,比如Wolfenstein II、Roblox和DOTA2等,這個數(shù)字只會不斷的上升。
為了保持競爭力,可能是時候把OpenGL ES和Vulkan好好的比較一番了。大多數(shù)情況下這種轉(zhuǎn)變都是有好處的,除非你缺少改變需要的一些資源——文章后面將會介紹。
Vulkan的好處
最近我們看到發(fā)布了很多新的渲染API,不僅僅是Vulkan——比如Direct3D 12和Metal。當(dāng)涉及到解決驅(qū)動開銷和完全控制的最佳方法時,這些新API都朝著類似的方向發(fā)展。
Vulkan最大的優(yōu)勢之一是它的跨平臺特性,這意味著開發(fā)人員可以節(jié)省大量時間和金錢,因為他們不必區(qū)分每個平臺下的API學(xué)習(xí),只需要關(guān)注Vulkan的學(xué)習(xí)就可以了。
它也被游戲引擎開發(fā)者廣泛采用,目前使用的最大游戲引擎已經(jīng)完全支持Vulkan了——比如Unity、UE4和CryEngine等。因此你可以享受Vulkan所帶來的好處,而且完全不需要開發(fā)自己的引擎來使用它。
Vulkan還提供了批處理功能,這會減少CPU的負荷,實現(xiàn)片上存儲的加速,這都得益于API的優(yōu)先級設(shè)計以及對內(nèi)存分配的細粒度控制。
那么,我怎么知道這是否值得付出努力呢?
Vulkan提供的好處除了上文提到的,它還消除了軟件驅(qū)動程序判斷各種情況的需求,相反開發(fā)人員必須明確的進行API調(diào)用。
對于將應(yīng)用程序移植到Vulkan,你可能會有疑慮,有什么能夠證明這是值得付出努力的呢?下面我整理了一個列表,其中列出了將應(yīng)用移植到Vulkan會對你所帶來的各種好處。
可以確定:當(dāng)你的應(yīng)用是CPU綁定模式時,你會采用多核來提升性能。
Vulkan擅長讓大量API調(diào)用的CPU綁定型應(yīng)用運行的更快,這些情況下Vulkan提供的低驅(qū)動開銷確實很有幫助,如果你想將圖形任務(wù)并行化處理,那么Vulkan也能幫助你。
可以確定:當(dāng)在新平臺上啟動一個新的項目時
采用新平臺時通常最好的方法就是使用Vulkan,這是因為對于不同平臺的應(yīng)用優(yōu)化在其他平臺上也是可以的,比如你對移動平臺進行了優(yōu)化,那么你的應(yīng)用在所有移動平臺上都不會有問題,因為他們都非常的相似。結(jié)構(gòu)設(shè)計良好且經(jīng)過優(yōu)化的Vulkan應(yīng)用應(yīng)該能在各種平臺上高效運行,而不需特殊的變通方法。當(dāng)你只關(guān)注少數(shù)幾個平臺時,你可以花更多的時間進行優(yōu)化。在這種情況下切換為Vulkan可以充分利用硬件的性能,這是值得的。由于你可以完全控制與Vulkan的同步,因此可以降低幀速率峰值、連接和抖動。你可以抓住這個機會試一試,情況是肯定的。
可能的情形:對于高度依賴GPU綁定型應(yīng)用
如果你正在處理一個高度依賴GPU綁定型應(yīng)用時Vulkan可能會對你有幫助。消除驅(qū)動的開銷可以降低CPU的使用,進而減少功耗和發(fā)熱,使得GPU能夠以更高的頻率運行。
可能的情形:高度依賴CPU綁定型應(yīng)用由于非API調(diào)用的任務(wù)而被限制
對于高度依賴CPU的應(yīng)用程序,它主要受非API調(diào)用任務(wù)的限制,Vulkan的幫助不會特別大,但它多少會有點兒幫助,CPU會有更多的時間來處理其他任務(wù),但是先優(yōu)化非API調(diào)用的任務(wù)可能是個好主意。
可能不會:當(dāng)你已經(jīng)完成一個依賴GPU的應(yīng)用并且進行了高度優(yōu)化時
如果你的應(yīng)用已經(jīng)使用了上一代API進行了大量的優(yōu)化,比如遵循接近零驅(qū)動開銷(AZDO)規(guī)則,那么此時Vulkan對你來說就沒什么用處了。
PowerVR為開發(fā)人員提供了有價值的工具和SDK支持
好吧,Vulkan適合我,下一步是什么呢?
從OpenGL ES遷移到Vulkan時,需要記住的重要一點是采用新發(fā)布的更復(fù)雜的API時可能會出現(xiàn)一些問題,Vulkan具有一定的冗長特性,學(xué)習(xí)起來有一定的難度。性能的提升是有代價的,Vulkan需要更多的維護和更高的責(zé)任來確保一切能夠正常運行。
OpenGL ES的構(gòu)建方式使得正常運行應(yīng)用所需的操作被隱藏起來,這些操作如下:
- 資源管理
- 同步處理
- 錯誤檢查和驗證
- 預(yù)編譯著色器
Vulkan則更加的獨立,需要代碼顯式的定義和執(zhí)行這些操作。也就是說有很多工具和庫可以幫助開發(fā)人員完成這些方面的工作。
PowerVR是如何支持Vulkan的?
PowerVR為開發(fā)人員提供了寶貴的支持,如果你想開發(fā)使用Vulkan,看看我們的SDK就知道了。它為大家提供了一個從頭構(gòu)建的框架來支持這個新的API的開發(fā),它提供的幫助手冊減少了樣板代碼并附帶全面的文檔資料(http://cdn.imgtec.com/sdk-documentation/PowerVR%20Framework.Development%20Guide.pdf)。
我們還提供了對Vulkan循序漸進的介紹文檔,命名為HelloAPI,它是一個全面的用戶指南,帶領(lǐng)你完成三角形渲染所需的完整操作步驟,我們把它放在了GitHub上(https://github.com/powervr-graphics/Native_SDK/tree/b034c2c02b64b900a61f413b5f5d9069f339f3a2/examples/Vulkan/01_HelloAPI),同時還有我們的SDK和框架源碼。
? ? ? ? 本文來源:https://www.imgtec.com/blog/stuck-on-opengl-es-time-to-move-on-why-vulkan-is-the-future-of-graphics/
電子發(fā)燒友App





















評論