1 of 29

WebGPU�划往技术新大陆的船桨

2 of 29

目录

01

02

03

04

发展历程

功能与特性

应用场景和示例

展望与总结

3 of 29

WebGPU 的发展历程

Section 01

4 of 29

赋予 Web App 操控 GPU 的能力

WebGL 的继任者

基于新时代的原生 API

WebGPU:一套 Web 标准

什么是 GPU

用途:渲染、计算

领域:视觉/游戏、机器学习、加密货币

什么是 WebGPU?

5 of 29

2017.02.10:GPU For the Web 立项

2021.05.18:Working Group 第一版公稿

2023.04.06: Chrome 113 Beta

Spec GitHub

平台支持

建立过程

WebGPU 现状

6 of 29

既生 WebGL,

何生 WebGPU?

7 of 29

WebGL:A History

Why Not WebGL?

OpenGL�1.0

OpenGL�2.0

OpenGL�ES 2.0

OpenGL�3.2

OpenGL�ES 3.0

WebGL�1.0

2017

WebGL�2.0

2012

2011

2009

2007

2004

1992

8 of 29

Why Not WebGL?

与此同时,�GPU 硬件一直在迅猛进化

9 of 29

依赖 OpenGL

全局状态设计

基于古早 GPU 架构

进化迟缓

不易学不易用

无法满足新需求

无法与现代 GPU 融合

平台/厂商减少支持

Why Not WebGL?

10 of 29

Why WebGPU?

  • 释放 CPU 算力
  • 并行计算效率高
  • 渲染能力更强
  • 相对易学易用
  • ……

11 of 29

功能与特性

Section 02

12 of 29

WebGPU 架构图

13 of 29

Adapter�&�Device

Section #

核心概念

14 of 29

Vertex、Fragment、Compute�嵌在 JavaScript 中的 GPU 代码

WebGPU Shader Language

同样是 W3C 标准

Shader

WGSL

Shader & WGSL

核心概念

15 of 29

Hello World:画一个三角形

图形渲染

功能

16 of 29

图形渲染

功能

代码示例:简单的计算

// JavaScript 代码const input = new Float32Array([1, 3, 5]);

// Compute Shader@group(0) @binding(0) var<storage, read_write> data: array<f32>;

@compute @workgroup_size(1) fn computer(

@builtin(global_invocation_id) id: vec3<u32>

) {

let i = id.x;

data[i] = data[i] * 2.0;

}

17 of 29

特性

  • 解锁底层能力
  • 跨平台
  • 并行计算
  • 支持现代图形技术

18 of 29

应用场景与示例

Section 03

19 of 29

传统技能:图形渲染

20 of 29

新应用场景

  • 机器学习
  • XR

技术领域的新大陆!

21 of 29

+

Web ML

22 of 29

Section #

+

交互式网页、视频

数据可视化

艺术创作

游戏

Web XR

23 of 29

展望与总结

Section 04

24 of 29

即将加入的新功能

  • Multi-Queue
  • Multi-Adapter
  • Ray Tracing
  • Float16
  • ……

25 of 29

融入生态

26 of 29

关于安全/隐私的讨论

  • 滥用于挖矿、密码破解
  • DoS 攻击
  • 数据窃取
  • 用户指纹

27 of 29

我们能做什么?

性能优化

开发上层应用

封装框架/库

……

参与制定标准

翻译资料

做教程、评测

建设资源/讨论社区

……

28 of 29

总结

  • 应运而生、厚积薄发
  • 更合理、更强大
  • 新领域、新征程、新机会

29 of 29

感谢倾听

钱俊颖

Keep 前端工程师 / 掘金优秀创作者