在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)
- WebGPU 和 Vulkan 之間的主要區別
- WebGPU 是什么?它適合誰使用?
- Vulkan 是什么?它適合誰使用?
- WebGPU 和 Vulkan 的代碼示例
- WebGPU 與 Vulkan:決戰判決(The Showdown Verdict)
本來想了解一下WebGPU 與 Vulkan的關系與區別,百度搜的都不咋靠譜,偶然發下這篇文章,感覺寫的很好。
這里翻一下提供給需要的人。
PS:軟件翻的,手動修改了一些別扭的地方,整體還行!
原文章地址:Making the Right Choice between WebGPU vs Vulkan
對于需要與現代 GPU 硬件高效交互
的開發人員,建議使用WebGPU
,尤其是對于基于瀏覽器的應用程序。它通過最小化 JavaScript 調用和最佳地管理計算資源,表現優于Vulkan。然而,對于多樣化的設備定位和光線追蹤
的無縫集成,Vulkan
仍然是首選。
WebGPU 和 Vulkan 之間的主要區別
-
WebGPU 仍處于開發階段
,是一種現代 API,旨在解決 WebGL 的局限性。Vulkan 是一種成熟的跨平臺行業標準
圖形 API。 -
WebGPU 以最佳方式管理計算資源,減少過多 JavaScript 調用的開銷。Vulkan 提供對調度、同步和內存分配的細粒度控制。
-
WebGPU 將
Direct3D 12、Metal、Vulkan
等現代 API 的進步引入網絡,提供新的基于瀏覽器的編程潛力。Vulkan 適用于多種設備
,提供頻繁的擴展和改進。 -
WebGPU 由
Apple、Google、Mozilla、Microsoft 和 Intel
等科技巨頭共同開發。Vulkan 允許通過 Khronos
做出貢獻,提出改進建議或為開源項目做出貢獻。
比較 | WebGPU | Vulkan |
---|---|---|
API 目的 | 解決 WebGL 的限制并與現代 GPU 硬件有效交互 | 跨平臺圖形和視頻壓縮行業標準 API |
發展 | 自 2017 年起由 W3C “GPU for the Web” 開發 | 2013 年由 AMD 開發,后來捐贈給 Khronos 集團 |
可用性 | Chrome 113 首次發布,適用于 Windows、ChromeOS 和 MacOS。計劃針對 Android 和 Linux | 廣泛可用,不斷發展和頻繁擴展 |
優點 | 自動處理異常,釋放驚人的性能,減少 JavaScript 調用的開銷 | 提供對調度、同步和內存分配的細粒度控制 |
用例 | 復雜的視覺效果、機器學習計算和計算資源優化 | 設備定位、GPU編程、3D性能增強 |
擴展和添加 | W3C 正在設計中的預期功能改進 | 頻繁擴展和添加功能和改進,Vulkan SC 1.0 適用于安全關鍵系統 |
表現 | 基于 Vulkan 構建,性能比 WebGL 更好,CPU/GPU 使用率更均衡 | 提供更高的性能、更低的 CPU 占用率,支持在多個 CPU 核心之間分配工作 |
未來的承諾 | 有望成為 Web 開發人員在安全性、性能和可移植性方面的首選 | H.264、H.265 完全加速解碼,可移植性 |
WebGPU 是什么?它適合誰使用?
WebGPU 是一種專為圖形和機器工作負載而設計的高級 API。它的出現是為了解決 WebGL(一種基于瀏覽器的 GPU API,于 2011 年推出)的局限性,并將當代 GPU 的功能引入網絡。它旨在為尋求卓越實時數據處理和視覺效果卓越的網絡元素的開發人員和組織提供服務。
WebGPU 由 Apple、Google、Mozilla、Microsoft 和 Intel 自 2017 年以來合作開發,基于 Vulkan 構建。它目前可在 ChromeOS、macOS 和 Windows 上的 Chrome 113 上使用,而其他平臺仍在籌備中。
1. WebGPU 的優點
- 解決 WebGL 限制
- 高效的 GPU 硬件接口
- 最佳計算資源管理
- 減少過多 JavaScript 調用的開銷
- 提供靈活的編程模型
- 支持在 GPU 上移植算法類
2. WebGPU的缺點
- 仍處于早期發展階段
- 當前默認禁用
- 未來平臺可用性仍不明確
Vulkan 是什么?它適合誰使用?
Vulkan 是一種跨平臺的行業標準圖形 API,為開發人員提供了一個針對各種設備的平臺。它經常進行擴展和添加,并且不斷改進。Vulkan 適合那些需要在圖形編程中控制調度、同步和內存分配的開發人員。
Vulkan 生態系統還擁有潛在的關鍵實用程序,例如 Vulkan Portability 和 Vulkan SC 1.0 規范,它們可滿足安全關鍵型系統的需求,簡化圖形和計算需求。此外,它是第一個具有正式內存模型的圖形 API。
1. Vulkan 的優點
- 跨平臺特性
- 頻繁的擴展和改進
- 有效控制圖形編程的關鍵方面
- 對抗平臺碎片化的潛力
- 第一個具有正式內存模型的圖形 API
2. Vulkan的缺點
- 不保證部署時間表和設備支持
- 復雜 3D 模型的問題
WebGPU 和 Vulkan 的代碼示例
1. WebGPU 3D 環面(Torus)
此代碼說明了如何使用 WebGPU API 生成 3D 圓環。此示例需要支持 WebGPU 實驗功能的現代網絡瀏覽器。
// Create canvas and get WebGPU context
let canvas = document.createElement('canvas');
let context = canvas.getContext('gpupresent');// Create a GPU device
let adapter = await navigator.gpu.requestAdapter();
let device = await adapter.requestDevice();// Create a GPU buffer
let buffer = device.createBuffer({size: VERTEX_SIZE * NUM_VERTICES,usage: GPUBufferUsage.VERTEX,mappedAtCreation: true
});// Generate a 3D Torus
let vertices = new Float32Array(NUM_VERTICES * VERTEX_PER_QUAD);
for(let i = 0; i < NUM_VERTICES; i++) {let quadPos = i % VERTEX_PER_QUAD;let pos = [quadPos & 2, quadPos & 1];vertices.set(pos, i * VERTEX_SIZE / 4);
}// Unmap buffer and create a vertex buffer layout
buffer.unmap();
let vertexBuffers = [{arrayStride: VERTEX_SIZE, attributes: [{offset: 0, format: 'float32x4', shaderLocation: 0}]}];
2. Vulkan 三角形渲染
此示例演示了一個可以渲染簡單三角形的基本 Vulkan 程序。請確保您的環境中已設置 Vulkan SDK,并了解 Vulkan API 的基本概念,例如命令緩沖區、交換鏈和管道。
// Include Vulkan
#include <vulkan/vulkan.h>// Create an instance
VkApplicationInfo appInfo = {};
appInfo.pApplicationName = "Hello Triangle";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;uint32_t glfwExtensionCount = 0;
const char** glfwExtensions;glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);createInfo.enabledExtensionCount = glfwExtensionCount;
createInfo.ppEnabledExtensionNames = glfwExtensions;createInfo.enabledLayerCount = 0;if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {throw std::runtime_error("failed to create instance!");
}
WebGPU 與 Vulkan:決戰判決(The Showdown Verdict)
圖形 API 戰場上,WebGPU 和 Vulkan 兩大巨頭相互對峙。根據您的使用情況和需求,其中一個可能會勝過另一個。以下是我們對不同受眾群體的判斷。
1. 尋求利用現代硬件功能的開發人員
如果您希望利用現代 GPU 硬件的功能
,WebGPU 就是您的好幫手。它由技術巨頭共同開發,反映了現代 GPU 硬件的功能,并通過其計算著色器提供了靈活的編程模型
。WebGPU 還附帶了流行的 JavaScript WebGL 庫中正在開發的端口,使其成為開發人員的潛在首選
。
2. 需要高靈活性和控制力的 AR/VR 創作者
對于那些尋求完全控制內存分配、調度和同步
的人來說,Vulkan 是無與倫比的。它的持續發展為開發人員提供了令人難以置信的靈活性和改進能力
。除了完全加速的 H.264 和 H.265 解碼外,它還是需要高靈活性和控制力的 AR/VR 創作者的資源。
3. 游戲制造商追求高性能
WebGPU在高性能游戲領域被視為一個有前途的競爭者。它基于Vulkan
構建,并且在CPU/GPU使用方面比WebGL表現得更加均衡
。此外,它允許游戲開發者將多種算法移植到GPU
上,從而實現WebGL時代難以想象的卓越視覺效果。
結論:
在圖形 API 的較量中,兩者勢均力敵。在與 GPU 硬件的現代、高效交互方面,WebGPU 勝出。但在廣泛的設備支持和控制方面,Vulkan 無人能敵。這一切都取決于您的預期應用。