大数跨境

为什么说 WebGPU 代表着 Web 的未来(现场演示)

为什么说 WebGPU 代表着 Web 的未来(现场演示) 索引目录
2026-01-22
2
导读:关注「索引目录」公众号,获取更多干货。WebGPU是目前的热门话题。

关注「索引目录」公众号,获取更多干货。

WebGPU是目前的热门话题。这是一个全新的Web API,很可能会很快取代WebGL(兄弟,我不会想念你的👋)。

它已经得到了所有主流浏览器的支持,说实话……我怎么能试一试呢?

于是,我做了任何一个好奇的、以前端为中心的软件开发人员都会做的事:我构建了一个小型交互式演示,并学到了比我最初预期的要多得多的东西。


首先,为什么要选择GPU?

对你们中的许多人来说,这听起来可能很明显,但对于这个领域的新手来说,我们还是做一个简单的介绍吧。

CPU擅长依次执行少量复杂任务。GPU
擅长大规模并行执行简单任务

这就是GPU的优势所在:

  • 图形和图像处理
  • 模拟
  • 矩阵密集型工作负载
  • 是的——比如法学硕士学位之类的东西

无论是渲染像素、模糊纹理还是进行大型矩阵运算,GPU 都天生适合这类工作。WebGPU 最终让我们能够在浏览器中直接使用这种强大的计算能力。


那么……它与WebGL有何不同?

WebGL 基于OpenGL,而 OpenGL……嗯……已经很老了。以 GPU 的发展速度来看,它非常老旧。

使用 WebGL:

  • 当时并没有真正的计算着色器。
  • 一切都必须以“渲染问题”的形式表达出来。
  • 很多技巧、窍门和变通方法
  • 很多隐藏的全局状态

如果你曾经在 WebGL 中实现过 GPGPU,你可能还记得把数据编码到纹理中,然后假装三角形是完全不同的东西🙃

WebGPU 可以正确解决这个问题:

  • 显式计算过程
  • 显式管道和绑定组
  • 没有神奇的全局状态
  • 可直接映射到现代 GPU 架构(Metal、Vulkan、DirectX 12)的 API

简而言之:WebGPU 就是 GPU 如今的实际工作方式


WebGPU是否已准备好投入生产使用?

实话实说:这要看情况

如果可以的话:

  • 需要使用现代浏览器。
  • 目标浏览器:最新版本的 Chrome、Edge、Firefox、Safari

→ 那么是的,WebGPU 目前完全可以使用。

但是,如果:

  • 你的受众群体非常广泛。
  • 居然还有人在使用老旧的Safari浏览器。
  • 或者(请不要)IE 11

→ 那么你要么投资 WebGL 作为备用方案,要么暂时放弃 WebGPU。

对于实验、演示、内部工具和前瞻性产品而言?
它已经是一个非常可靠的选择。


WGSL——那些“奇怪”的新着色器文件

WebGPU 引入了WGSL(WebGPU 着色语言)

乍一看,它看起来很奇怪——但如果你曾经见过以下类型的着色器:

  • 金属
  • Vulkan
  • 或现代 DirectX

……感觉其实挺熟悉的。

WGSL是:

  • 强类型
  • 显式
  • 旨在避免一类GPU错误

在这个项目中,我将着色器放在单独的.wgsl文件中,但你也可以根据需要将它们作为字符串内联到 TypeScript 中。VS Code 已经为 WGSL 提供了语法高亮,这在两种情况下都很有帮助。


现在,来说说我的演示。

我不会撒谎——这个演示程序比我其他很多实验程序都难写

或许是因为WebGPU还比较新。
又或许是因为我一直对计算机图形学不太感兴趣……而这个演示程序对图形的要求很高

但最终结果如何呢?我对这个结果非常满意。

从视觉上看,它就像是鼠标悬停在画布上时出现的发光墨水或烟雾。
从技术上讲,它是一个GPU驱动的模拟,其中:

  • 指针输入将颜色注入浮点纹理
  • 计算着色器模糊并随时间传输数据
  • 价值逐渐消失,留下痕迹
  • 渲染过程显示结果

它在物理上准确吗?绝对不准确😄
它看起来很酷吗?哦,是的。

轨迹长度、笔刷大小、漩涡强度和颜色等实时参数都可以通过控制面板进行调整——无需重新编译着色器。


React……用于 WebGPU 演示?

大多数WebGPU演示程序都是用纯HTML+JS编写的。我也能做到这一点。

但我决定使用React + TypeScript作为一个简单的封装:

  • 简洁的用户界面
  • 滑块的简易状态管理
  • 零手动DOM接线

效果很好——但有一个重要的注意事项。

为了使这个演示可用,我不得不禁用 React 严格模式

为什么?因为严格模式会在开发过程中故意运行两次特效来检测副作用。这通常很棒……但当你创建 GPU 设备、管线、纹理和缓冲区时就不太好了。重复初始化很容易导致问题。

底层 GPU 代码是严格模式会造成干扰的少数情况之一。


TypeScript 的一个陷阱

还有一点小问题:
TypeScript 目前还没有完全启用 WebGPU 类型。

您需要在 TypeScript 配置中显式启用 WebGPU 类型定义,否则所有 GPU 类型都将不存在。这是一次性设置,但如果您是第一次尝试,则值得一提。


链接

  • 代码库:
    https://github.com/sylwia-lask/webgpu-neon-demo
  • 在线演示:
    webgpu-fluid-demo

最后想说的

WebGPU感觉像是Web技术的一进步。它
不仅仅是“略微提升图形性能”,而是开辟了一个全新的领域,让我们能够在浏览器中切实构建更多类型的应用。

这个演示只是一个视觉实验——但它已经展示了 GPU 驱动的 Web 应用程序可以多么强大、富有表现力和趣味性。

如果你一直对 WebGPU 感兴趣……这就是你尝试它的信号🚀


关注「索引目录」公众号,获取更多干货。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读838
粉丝0
内容444