每一个大前端工程师都应该学习 wgpu

863 阅读3分钟

计算机图形学做为前端的底层技术, 我相信大部分前端(Web + App)工程师都有过学习图形学的想法。WebGPU 做为面向下一个十年的跨平台图形 API, 可以为我们节省分别学习各平台图形 API 的时间精力(WebGL / OpenGL ES 当然也是跨平台的,只是它注定将退出现代图形接口这个舞台:macOS / iOS 早已不支持提交基于 OpenGL 的 App; Android 从 7.0 开始已经支持了 OpenGL 的继任者 Vulkan; )。

WebGPU 是什么?

WebGPU 是由 W3C GPU for the Web 社区组所发布的规范,目标是允许网页代码以高性能且安全可靠的方式访问 GPU 功能。它通过借鉴 Vulkan API,并将其转换为宿主硬件上使用的各式 API(如 DirectX、Metal、Vulkan)来实现这一目标。

wgpu 又是什么?

wgpu 是基于 WebGPU API 规范 的、跨平台的、安全的、纯 Rust 图形 API。它是 Firefox、Servo 和 Deno 中 WebGPU 整合的核心。wgpu 不仅可以在 Web 环境运行,还可以在 macOS / iOS、Android、Window 和 Linux 等系统上原生运行。

虽然 WebGPU 标准目前还没有正式发布,在浏览器中需要手动开启支持,但在 App 中做跨平台的图形图像开发我已经探索出了完整的方案,在线上教程的 集成与调试 部分有详细的实施步骤并在 github 上提供了完整的示例。并且我个人已于两年前在 AppStore 上架了基于 wgpu 实现的毛笔书法模拟 App 字习 Pro

WebGPU 的学习资料是不是很少? 

其实不用纠结于 WebGPU 方面的直接学习资料的多少。

WebGPU 就是一套图形接口,绝大部分概念都是各图形接口里通用的,任何一本经典图形学书籍都是我们的学习资料。 要利用好这些经典资料,前提仅仅就是要先学习一套图形接口。因为图形学的书不是使用统一的特定图形接口所写,先学会一个图形接口及常见的概念,然后再去深入学习某个方面的资料就会事半功倍。

为什么使用 Rust?

wgpu 实际上提供了 C 语言绑定 (wgpu-native),你可以写 C/C++ 或其他能与 C 互通的语言来使用它。尽管如此,wgpu 本身是用 Rust 实现的,它便利的 Rust 绑定能减少你使用中的阻碍。更重要的是,Rust 是一门高性能,内存和线程安全且极具生产力的现代底层语言。如果对 Rust 还不太熟悉,可以回顾一下 Rust 教程 或 Rust 语言圣经

如果你还没有学习过任何一门底层语言,那就学 Rust 吧,它不像 C++ 有那么多复杂难懂的概念;

如果你觉得学 C/C++ 很难,那就学 Rust 吧,你会受益于它的高性能,内存和线程安全; 

如果你已精通 C/C++,那也学学 Rust 吧,那么难的都学得会,掌握 Rust 不过是小菜一碟;

现在学习 wgpu 是不是为时尚早? 

虽然 WebGPU 1.0 要到 2023 年才能正式发布,但 API 目前已经趋于稳定了,后面的修订更多是内部实现层的完善。

从 wgpu 及 dawn 这两个主要的 WebGPU 标准的实现库的开发动向可以看出,大量的扩展特性目前只有 PC、Mac、iOS、Android 等系统上本地运行才能支持。wgpu 更是将本地运行做为首要目标,WebGPU 是做为最低支持的特性集而存在。

使用 wgpu 在移动端做跨平台开发的体验极好,甚至我偏向于认为:WebGPU 更容易在 iOS、Android 上得到普及。因为不用受限于 1.0 / 2.0 标准啥时候发布,用户的浏览器是否支持等问题。

现在开始学习正当时。

完整 wgpu 学习教程