當前位置: 妍妍網 > 碼農

開篇,Vulkan 概述

2024-07-10碼農

什麽是 Vulkan

Vulkan 是由 Khronos Group 開發的一種現代、高效能的圖形和計算 API。 它設計用於替代 OpenGL,並提供更直接和細粒度的硬體控制。

與 OpenGL 相比,Vulkan 可以更詳細的向顯卡描述你的應用程式打算做什麽,從而可以獲得更好的效能和更小的驅動開銷。

Vulkan 的開發者來自圖形領域的各行各業,有 GPU 廠商,有系統廠商,有遊戲引擎廠商等。

所以 Vulkan 誕生之初就決定了它一定要有跨平台內容,目的就是成為行業內的統一標準。

Vulkan 對比 OpenGL

很多同學肯定經常聽到這樣的言論:OpenGL(ES)都過時啦,還學它幹嘛,現在大家都學 Vulkan 了。

拋開業務場景去談優勢、劣勢都是耍流氓, 目前我還看不到 OpenGL(ES)會被 Vulkan 完全替換的可能。

就拿行動應用開發來說,OpenGL ES 3.0 早在 2012 年釋出了, 很過 APP 開發者考慮到 Android 裝置的相容性,依然在使用 GL ES 2.0 版本,另外 iOS 端開發者主要使用蘋果的 Metal (類似於 GLES,效能更優)。

快速開發輕量級、跨平台的圖形套用, OpenGL(ES)有著無可替代的優勢 ,比如在移動開發中,使用 OpenGL ES 做一些影像視訊特效、圖形影像渲染,開發者可以在更短的時間內完成交付。

Vulkan 作為一個更為現代化和高效的解決方案,更適合構建對渲染效能和效率要求高的大型軟體

Vulkan 常用於遊戲開發、渲染引擎、虛擬現實、3D 建模等領域,另外,手機廠商也使用 Vulkan 開發和最佳化各種高效能、圖形密集型的套用和功能,從而提升裝置效能和使用者體驗。

OpenGL

優勢:

  • 跨平台支持 :OpenGL支持多種作業系統,包括 Windows、macOS、Linux 以及行動作業系統,如iOS和 Android (OpenGL ES)。

  • 易於學習和使用 :由於OpenGL有著較長的歷史,學習資源豐富,文件齊全,初學者較容易上手。

  • 廣泛套用 :在遊戲開發、CAD、虛擬現實、科學視覺化等領域廣泛套用,擁有龐大的使用者基礎。

  • 相容性好 :對於需要相容多種硬體和作業系統的套用,OpenGL是一個不錯的選擇。

  • 成熟的生態系 :豐富的第三方庫和工具,如 GLUT、GLEW 等,使開發更加便捷。

  • 劣勢:

  • 效能限制 :由於OpenGL的抽象層次較高,某些情況下的效能不如低階別的圖形API。

  • 單執行緒設計 :OpenGL的設計主要是單執行緒的,這在多執行緒套用中可能會導致效能瓶頸。

  • 驅動差異 :不同廠商的驅動實作可能存在差異,導致一些未定義行為和相容性問題。

  • Vulkan

    優勢:

  • 高效能 :Vulkan的設計允許更直接地控制GPU,減少了驅動程式的開銷,使其在高效能套用中表現出色。

  • 多執行緒支持 :Vulkan原生支持多執行緒,能夠更有效地利用多核 CPU,提升渲染效能。

  • 更低的開銷 :透過減少驅動程式的開銷,Vulkan提供了更細粒度的控制和更高效的資源管理。

  • 統一的跨平台支持 :與OpenGL一樣,Vulkan也支持多種作業系統,並且提供了一致的行為和效能。

  • 劣勢:

  • 復雜性高 :Vulkan的設計更為底層和復雜,學習曲線陡峭,對於新手來說上手難度較大。

  • 開發成本高 :由於需要更多的手動管理和最佳化,開發時間和成本可能更高。

  • 生態系尚在完善 :雖然Vulkan生態系在不斷成長,但與OpenGL相比,某些第三方工具和庫可能還不夠成熟。

  • 硬體支持 :雖然大多數現代GPU都支持Vulkan,但一些較老的硬體可能不支持。

  • Vulkan 的優勢體現在哪裏

    驅動層面

    在 OpenGL 驅動中,驅動會幫你做API驗證,記憶體管理,執行緒管理等大部份工作

    OpenGL 驅動大包大攬什麽事情都管,即使套用使用API出錯,也會幫忙解決處理,保證套用正常執行。開發者使用起來非常簡單。

    但是 OpenGL為了這些事情,犧牲了大量的效能。

    在一些復雜的套用場景,依然會遇到無法解決的問題,很多時候經常是驅動的一廂情願,套用並不為此買單。

    Vulkan 則不然, Vulkan把API驗證、記憶體管理、多執行緒管理等工作交由開發者負責。 一旦API使用出錯,套用就會出現crash。

    沒人幫套用兜底,所有事情都交由套用打理。這種方式無疑增加了API使用的復雜度和困難度,但換來的是效能上巨大的提升。

    單單是在驅動中去掉API驗證操作,就把效能提升了9倍。

    多執行緒支持

    在OpenGL中,所有的渲染操作都放在一個執行緒,其他執行緒就算處於空閑狀態,也只能圍觀。

    Vulkan中引入了 Command Buffer 的概念,每個執行緒都可以往Command Buffer 送出渲染命令,給開發者提供了充分發揮CPU多核多執行緒的優勢。在復雜場景下,效能的提升非常客觀!

    如何學習 Vulkan

    如果你計劃從事圖形影像相關的崗位,如特效、遊戲、渲染引擎、VR 等,建議學習下 Vulkan 。從招聘網站上可以看到,這些崗位的職位描述(JD)高頻出現了 Vulkan ,已經慢慢的成為趨勢。

    學習 Vulkan 需要具備什麽基礎?

    了解 C/C++ ,了解 OpenGL(ES)(或者其他圖形 API )

    為什麽需要了解 OpenGL(ES)?

    OpenGL 和 Vulkan 中的很多概念都是相似的,比如渲染管線、frameBuffer 幀緩沖區、離屏渲染、片段/頂點/計算著色器、例項化渲染等,之前如果接觸過 OpenGL , Vulkan 學起來會事半功倍。

    後面將會出一系列文章來介紹 Vulkan 開發 (基於移動端 Android 裝置演示),從 Vulkan 的基本概念開始,到繪制一個三角形,再到多通道渲染、載入 3D 模型、PBR、計算著色器等高級特效。

    一些學習資料:

  • 官方 Sample,支持 Android、WIndows、Linux、MacOS 平台

  • https://github.com/KhronosGroup/Vulkan-Samples

  • SaschaWillems 大神的教程,支持 Android、iOS、WIndows、Linux、MacOS 平台

  • https://github.com/SaschaWillems/Vulkan

  • Google 提供的 Vulkan 入門學習的 sample ,從建立 Vulkan device 到紋理貼圖,很貼心。

  • https://github.com/googlesamples/android-vulkan-tutorials

    參考文章:

    https://zhuanlan.zhihu.com/p/165141740

    https://geek-docs.com/vulkan/vulkan-tutorial/vulkan-and-opengl.html

    -- END --

    進技術交流群, 掃碼添加我的微信:Byte-Flow

    獲取相關資料和源碼

    學習音視訊、OpenGL ES、Vulkan 、Metal、影像濾鏡、視訊特效及相關渲染技術的付費社群,面試指導,1v1 簡歷服務,職業規劃。

    我的付費社群

    推薦: