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





















評(píng)論