WebGPU 与 WebGL 2 – 揭秘最佳功能(WebGPU vs WebGL 2 – Uncovering the Best Features)

在搜索了解 WebGPU 与 Vulkan 的关系与区别的时候发现的关于 WebGL 和 WebGPU 对比的不错的文章。

这里翻一下提供给需要的人。

PS:软件翻的,手动修改了一些别扭的地方,整体还行!

原文章地址:WebGPU vs WebGL 2 – Uncovering the Best Features


前言:

WebGPU 是一种先进的API,旨在超越 WebGL2,提供增强的功能和更高效的现代 GPU 硬件利用。专为那些追求高性能、便携性以及先进视觉效果的创作者设计,成为他们的首选。尽管如此,WebGL2 由于开发者对其更熟悉以及更广泛的跨平台支持,可能更受资深开发者的青睐。

在这里插入图片描述


WebGPU 和 WebGL 2 之间的主要区别

  • WebGPU 旨在取代 WebGL,它解决了 WebGL 的局限性,并通过与现代 GPU 硬件的有效交互提供了更好的性能。
  • WebGL 2 是一种光栅化引擎,它不处理 3D 数学,而 WebGPU 可以减轻 3D 复杂性并通过计算着色器提供更灵活的编程模型。
  • WebGL 2 享有更广泛的跨平台支持;WebGPU 目前可用于 ChromeOS、macOS 和 Windows,并计划支持 Android 和 Linux。
  • WebGPU 提供强大的资源管理和清晰的错误消息以进行故障排除,与 WebGL 2 相比,有可能减少开发障碍。
比较WebGPUWebGL2
引擎类型图形API光栅化引擎
用法图形和机器工作负载绘制 3D,需要用户具备 3D 方面的知识
新的编程可能性支持不支持
机器学习计算支持支持不支持
基于平台网页图形处理器
利用现代 GPU 硬件提高效率取决于用户对 3D 方面的了解
自动处理同步挑战支持不支持
着色器的使用计算顶点和片段
资源管理最佳,由计算着色器辅助取决于开发者
表现如果使用得当会更高取决于用户提供的着色器
发布状态首次在适用于 Windows、ChromeOS 和 MacOS 的 Chrome 113 中发布。计划进一步推出。目前可用

WebGPU 是什么?它适合谁使用?

WebGPU 作为下一代图形和计算API,旨在突破 WebGL 的限制。它继承了 Direct3D 12、Metal 和 Vulkan 等知名API的精髓。由W3C 的 “ Web 的 GPU ” 联盟精心设计,它能高效地与现代 GPU 硬件配合工作。在 Chrome 113 版本中,它已在 ChromeOS、macOS 和 Windows 系统上实现。

这款 API 的主要用户群体包括游戏开发者、移动应用工作室,以及那些希望在浏览器中实现复杂视觉效果和进行机器学习计算的开发者。WebGPU 致力于平衡 CPU 和 GPU 的使用,同时提升安全性、性能和便携性,成为 WebGL 的崭新而强大的继任者。

在这里插入图片描述

1. WebGPU 的优点

  • 释放惊人性能
  • 最少的样板代码
  • 对 JavaScript WebGL 库的强大支持

2. WebGPU 的缺点

  • 仍处于早期发展阶段
  • 作为 WebGL 的扩展,默认情况下已禁用

WebGL2 是什么以及它适合谁?

WebGL2 并非一个 3D 库,而是一款功能强大的光栅化引擎。它能够绘制 3D 图形,但具体的三维表现则需要开发者自行实现。WebGL2 擅长根据指令绘制点、线和三角形。它依赖于 GPU 的强大性能,并通过 GLSL 代码进行操作。需要注意的是,WebGL2 主要负责光栅化处理并提供深度缓冲。

WebGL2 面向那些熟悉矩阵数学、标准化坐标和视锥体等概念的开发者。它能够创建沉浸式和令人印象深刻的场景,是构建 3D 应用的基础。无论是实现光线反射还是纹理映射,WebGL2 都能带来卓越的用户体验。然而,使用 WebGL2 需要开发者具备一定的实践能力和深入理解。

在这里插入图片描述

1. WebGL2 的优点

  • 能够构建高度交互的 3D 应用程序
  • 支持高级技术,打造视觉震撼的场景
  • 与 Three.js 合作渲染 3D 应用程序

2. WebGL2 的缺点

  • 所有 3D 数学知识必须由用户提供
  • 从表面处理 3D 方面

WebGPU 和 WebGL 2 的代码示例

WebGPU

这是一个使用 WebGPU 在 3D 空间中绘制三角形的简单示例。为了理解这个示例,你需要具备基础的 JavaScript 知识,并且对GPU 编程中的一些概念(比如缓冲区、着色器和管道状态)有所了解。

// Creating a device
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Creating a buffer
const vertices = new Float32Array([
  1.0,  1.0,
  -1.0,  1.0,
  1.0, -1.0,
]);
const vertexBuffer = device.createBuffer({
  size: vertices.byteLength,
  usage: GPUBufferUsage.VERTEX,
  mappedAtCreation: true,
});
new Float32Array(vertexBuffer.getMappedRange()).set(vertices);
vertexBuffer.unmap();

WebGL 2

一个 WebGL2 示例,绘制一个简单的正方形,并使用动画循环旋转它。它需要了解 JavaScript,特别是 requestAnimationFrame 函数和基本 WebGL 构造。

// Creating square buffer
var squareVerticesBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesBuffer);
var vertices = [
  1.0,  1.0,  0.0,
 -1.0,  1.0,  0.0,
  1.0, -1.0,  0.0,
 -1.0, -1.0,  0.0
];

// Pass the vertices to WebGL
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

// Draw rotation
var rotation = 0, lastFrameTime = 0;
function rotateAnimation(now) {
  rotation += (now - lastFrameTime) * 0.01;
  lastFrameTime = now;
  renderScene();
  requestAnimationFrame(rotateAnimation);
}

WebGPU 还是 WebGL2:技术决断

你现在正处在两大技术力量—— WebGPU 和 WebGL2 的交汇点。它们各自都有着深厚的优势,选择哪一个取决于你所使用的工具、你的需求以及你的技术能力。让我们来引导你走出这个复杂的选择迷宫。

驾驭现代科技浪潮的开发者

对于那些追求最新技术的开发者来说,如果你们已经接触过 Direct3D 12、Metal、Vulkan 等前沿 API,那么 WebGPU 将是一个不错的选择。它能有效利用现代 GPU 硬件,减少了模板代码,同时降低了 JavaScript 调用的额外开销。虽然目前 WebGPU 还处于早期开发阶段,但它的潜力巨大,可能会为你带来梦寐以求的卓越性能。

在这里插入图片描述

3D 数学大师

如果你对矩阵数学和标准化坐标了如指掌,那么 WebGL2 可能是你的理想选择。它要求开发者亲自动手,而不是提供现成的工具,适合那些热衷于亲手打造 3D 杰作的高手。WebGL2 不仅仅是一个光栅化引擎,它是创建高度互动的 3D 应用的坚实基础。

在这里插入图片描述

GPU 命令飞行员

如果你对 GPU 命令有所涉猎,并且喜欢掌控一切,那么 WebGPU 可能是你理想的指挥伙伴。这个 API 专为 GPU 命令高手设计,它提供了一个高效的 GPU 接口,能够智能地管理计算资源,并自动解决资源同步的难题。

在这里插入图片描述


总结:

对于初学者或者那些开发休闲应用的开发者来说,WebGL2 是个合适的选择。但是,对于那些追求 GPU 功能最前沿和高效 API 交互的开发者来说,即使是初期阶段,WebGPU 也显得与众不同。它的强项在于其性能和可用性潜力,可能会超越 WebGL 的限制。你应该根据你的技能水平、需求以及你追求的开发目标来做出选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非科班Java出身GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值