計(jì)算機(jī)圖形學(xué)做為前端的底層技術(shù), 我相信大部分前端(Web + App)工程師都有過(guò)學(xué)習(xí)圖形學(xué)的想法。WebGPU?做為面向下一個(gè)十年的跨平臺(tái)圖形 API, 可以為我們節(jié)省分別學(xué)習(xí)各平臺(tái)圖形 API 的時(shí)間精力(WebGL / OpenGL ES 當(dāng)然也是跨平臺(tái)的,只是它注定將退出現(xiàn)代圖形接口這個(gè)舞臺(tái):macOS / iOS 早已不支持提交基于 OpenGL 的 App; Android 從 7.0 開(kāi)始已經(jīng)支持了 OpenGL 的繼任者 Vulkan; )。
WebGPU 是什么?
WebGPU 是由 W3C?GPU for the Web?社區(qū)組所發(fā)布的規(guī)范,目標(biāo)是允許網(wǎng)頁(yè)代碼以高性能且安全可靠的方式訪問(wèn) GPU 功能。它通過(guò)借鑒 Vulkan API,并將其轉(zhuǎn)換為宿主硬件上使用的各式 API(如 DirectX、Metal、Vulkan)來(lái)實(shí)現(xiàn)這一目標(biāo)。
wgpu 又是什么?
wgpu?是基于?WebGPU API 規(guī)范?的、跨平臺(tái)的、安全的、純 Rust 圖形 API。它是 Firefox、Servo 和 Deno 中 WebGPU 整合的核心。wgpu?不僅可以在 Web 環(huán)境運(yùn)行,還可以在 macOS / iOS、Android、Window 和 Linux 等系統(tǒng)上原生運(yùn)行。
雖然?WebGPU?標(biāo)準(zhǔn)目前還沒(méi)有正式發(fā)布,在瀏覽器中需要手動(dòng)開(kāi)啟支持,但在 App 中做跨平臺(tái)的圖形圖像開(kāi)發(fā)我已經(jīng)探索出了完整的方案,在線上教程的?集成與調(diào)試?部分有詳細(xì)的實(shí)施步驟并在 github 上提供了完整的示例。并且我個(gè)人已于兩年前在 AppStore 上架了基于 wgpu 實(shí)現(xiàn)的毛筆書(shū)法模擬 App?字習(xí) Pro。
WebGPU 的學(xué)習(xí)資料是不是很少??
其實(shí)不用糾結(jié)于 WebGPU 方面的直接學(xué)習(xí)資料的多少。
WebGPU 就是一套圖形接口,絕大部分概念都是各圖形接口里通用的,任何一本經(jīng)典圖形學(xué)書(shū)籍都是我們的學(xué)習(xí)資料。 要利用好這些經(jīng)典資料,前提僅僅就是要先學(xué)習(xí)一套圖形接口。因?yàn)閳D形學(xué)的書(shū)不是使用統(tǒng)一的特定圖形接口所寫(xiě),先學(xué)會(huì)一個(gè)圖形接口及常見(jiàn)的概念,然后再去深入學(xué)習(xí)某個(gè)方面的資料就會(huì)事半功倍。
為什么使用 Rust?
wgpu 實(shí)際上提供了 C 語(yǔ)言綁定 (wgpu-native),你可以寫(xiě) C/C++ 或其他能與 C 互通的語(yǔ)言來(lái)使用它。盡管如此,wgpu 本身是用 Rust 實(shí)現(xiàn)的,它便利的 Rust 綁定能減少你使用中的阻礙。更重要的是,Rust 是一門(mén)高性能,內(nèi)存和線程安全且極具生產(chǎn)力的現(xiàn)代底層語(yǔ)言。如果對(duì) Rust 還不太熟悉,可以回顧一下?Rust 教程?或?Rust 語(yǔ)言圣經(jīng)。
如果你還沒(méi)有學(xué)習(xí)過(guò)任何一門(mén)底層語(yǔ)言,那就學(xué) Rust 吧,它不像 C++ 有那么多復(fù)雜難懂的概念;
如果你覺(jué)得學(xué) C/C++ 很難,那就學(xué) Rust 吧,你會(huì)受益于它的高性能,內(nèi)存和線程安全;?
如果你已精通 C/C++,那也學(xué)學(xué) Rust 吧,那么難的都學(xué)得會(huì),掌握 Rust 不過(guò)是小菜一碟;
現(xiàn)在學(xué)習(xí) wgpu 是不是為時(shí)尚早??
雖然 WebGPU 1.0 要到 2023 年才能正式發(fā)布,但 API 目前已經(jīng)趨于穩(wěn)定了,后面的修訂更多是內(nèi)部實(shí)現(xiàn)層的完善。
從 wgpu 及 dawn 這兩個(gè)主要的 WebGPU 標(biāo)準(zhǔn)的實(shí)現(xiàn)庫(kù)的開(kāi)發(fā)動(dòng)向可以看出,大量的擴(kuò)展特性目前只有 PC、Mac、iOS、Android 等系統(tǒng)上本地運(yùn)行才能支持。wgpu 更是將本地運(yùn)行做為首要目標(biāo),WebGPU 是做為最低支持的特性集而存在。
使用 wgpu 在移動(dòng)端做跨平臺(tái)開(kāi)發(fā)的體驗(yàn)極好,甚至我偏向于認(rèn)為:WebGPU 更容易在 iOS、Android 上得到普及。因?yàn)椴挥檬芟抻?1.0 / 2.0 標(biāo)準(zhǔn)啥時(shí)候發(fā)布,用戶的瀏覽器是否支持等問(wèn)題。
現(xiàn)在開(kāi)始學(xué)習(xí)正當(dāng)時(shí)。