图形平台API和WebAssembly AI
图形平台对比
UE(虚幻引擎)、Unity、Cesium和Three.js这四个不同的3D图形和游戏开发平台的主要特点:
特性/平台 | UE(虚幻引擎) | Unity | Cesium | Three.js |
---|---|---|---|---|
类型 | 商业游戏引擎 | 商业游戏引擎 | 开源地理信息系统(GIS)引擎 | 开源WebGL库 |
主要用途 | 游戏开发、电影制作、实时渲染应用 | 游戏开发、实时渲染应用 | 地理信息系统、3D地图可视化 | Web端的3D内容展示、数据可视化 |
开发语言 | C++(蓝图系统无需编写代码) | C#(UnityScript已弃用) | JavaScript/HTML/CSS | JavaScript/HTML/CSS |
平台支持 | Windows、macOS、Linux、游戏主机、移动设备 | Windows、macOS、Linux、游戏主机、移动设备 | Web浏览器、桌面应用程序 | Web浏览器 |
图形能力 | 高(支持PBR、光线追踪等高级渲染技术) | 高(支持PBR、光线追踪等高级渲染技术) | 中(专注于地理数据渲染) | 中(依赖于WebGL,性能受限) |
社区与资源 | 强大,丰富的游戏开发资源 | 强大,丰富的游戏开发资源 | 较小,专注于GIS领域 | 较大,Web开发者社区 |
许可证类型 | 商业许可(部分版本免费) | 商业许可(部分版本免费) | 开源(部分商业服务) | 开源(MIT许可证) |
学习曲线 | 较陡(功能丰富,需要时间掌握) | 中等(相对易学,但功能同样丰富) | 中等(需要GIS知识背景) | 简单(对于熟悉Web开发的用户) |
适用的项目类型 | 高端游戏、影视特效、复杂交互应用 | 游戏开发、建筑可视化、交互应用 | 地图服务、城市规划、地理分析 | 网页3D效果、轻量级3D应用、数据可视化 |
图形API对比
OpenGL、WebGL、Vulkan和WebGPU这四个图形API的主要特点:
特性/API | OpenGL | WebGL | Vulkan | WebGPU |
---|---|---|---|---|
类型 | 图形API | Web标准,基于OpenGL ES的API | 图形API | Web标准,下一代图形API |
发布年份 | 1992 | 2011 | 2016 | 2022(预计) |
主要用途 | 高性能图形渲染,广泛用于桌面和移动设备 | 在Web浏览器中渲染3D图形 | 高性能图形渲染,用于桌面和移动设备 | 在Web浏览器中渲染3D图形,支持现代图形特性 |
语言支持 | C/C++ | JavaScript(通过WebGL API) | C/C++ | JavaScript/HTML(通过WebGPU API) |
平台支持 | Windows、macOS、Linux、移动设备 | 所有支持WebGL的Web浏览器 | Windows、Linux、Android、iOS | 支持WebGPU的Web浏览器 |
性能特性 | 高性能,但驱动程序开销大 | 性能受限于浏览器和硬件 | 低开销,高性能,控制级别高 | 低开销,高性能,现代图形特性 |
内存管理 | 由驱动程序管理 | 由浏览器管理 | 应用程序负责管理 | 应用程序负责管理 |
多线程支持 | 较弱,需要使用GL线程扩展 | 不直接支持,依赖浏览器实现 | 强大,设计上支持多线程 | 设计上支持多线程,浏览器实现 |
硬件抽象层(HAL) | 驱动程序抽象层 | 浏览器抽象层 | 应用程序直接与硬件通信 | 浏览器抽象层,但更接近硬件 |
着色语言 | GLSL | GLSL(WebGL着色语言) | SPIR-V(中间着色语言) | WGSL(WebGPU着色语言) |
驱动模型 | 状态机模型,相对简单 | 状态机模型,相对简单 | 基于命令缓冲区的复杂模型 | 基于命令缓冲区,类似于Vulkan |
开发难度 | 中等 | 简单 | 高 | 中等 |
社区与文档支持 | 强大,历史悠久 | 强大,Web开发社区 | 强大,增长中 | 新兴,但得到浏览器厂商支持 |
Vulkan和OpenGL
Vulkan通常被认为在性能上优于OpenGL,尤其是在以下几个方面:
-
更低的开销:Vulkan设计上减少了CPU的开销,因为它使用了更高效的驱动模型。Vulkan允许开发者更直接地控制硬件,减少了驱动程序优化的需求。
-
多线程:Vulkan支持多线程渲染,这意味着开发者可以更有效地利用多核CPU,从而提高应用程序的性能。
-
更现代的架构:Vulkan是基于命令缓冲区的,这使得它能够更好地利用现代GPU的架构。这种设计允许更高效的命令提交和更少的API调用开销。
-
更好的控制:Vulkan提供了更多的控制权给开发者,包括内存管理和资源分配,这可以减少不必要的拷贝和转换操作,从而提高性能。
然而,这并不意味着Vulkan在所有情况下都绝对比OpenGL快。以下是一些需要考虑的因素:
-
开发难度:Vulkan的API比OpenGL更复杂,因此需要更多的开发时间和专业知识来实现相同的性能水平。
-
兼容性:OpenGL有着更广泛的硬件和平台支持,因为它已经存在了很多年。
-
驱动支持:虽然Vulkan旨在减少对驱动程序优化的依赖,但实际上,驱动程序的质量仍然对性能有影响。
-
场景特定:在某些情况下,特别是对于不太复杂的应用程序或旧硬件,OpenGL可能会提供足够的性能,而且开发起来更简单。
webGPU和webGL
WebGPU和WebGL都是用于在网页上实现高性能图形渲染的技术,但它们各自有不同的特点和适用场景。以下是关于两者在游戏开发方面的比较:
WebGL
- 成熟度:WebGL自2011年以来就已经可用,因此它是一个相对成熟和稳定的技术。它有一个广泛的开发者社区和丰富的学习资源。
- 兼容性:WebGL基于OpenGL ES,因此对于熟悉OpenGL的开发者来说,WebGL更容易上手。
- 性能:WebGL提供了不错的性能,尤其是在移动设备上,但它受限于其基于OpenGL的架构,这可能限制了其性能潜力。
WebGPU
- 现代性:WebGPU是基于Vulkan、DirectX 12和Metal等现代图形API设计的,它提供了更多的控制权和更好的性能潜力。
- 多线程:WebGPU支持多线程,这对于游戏开发来说是一个重要的特性,因为它可以更有效地利用现代CPU的多核特性。
- 性能:WebGPU旨在提供更高效的渲染路径,减少CPU的开销,从而提高性能。
- 新特性:WebGPU支持更现代的图形和计算特性,这对于开发复杂的游戏效果和计算密集型的游戏场景非常有用。
对于游戏开发来说,WebGPU通常被认为是一个更好的选择,尤其是对于需要高性能图形处理和复杂计算的场景。以下是一些原因:
- 性能:WebGPU提供了更低的CPU开销和更高的渲染效率,这对于游戏性能至关重要。
- 现代API:WebGPU的设计更接近于现代图形API,这意味着开发者可以更容易地利用最新的图形硬件特性。
- 多线程:WebGPU的多线程能力可以显著提高游戏引擎的效率,尤其是在处理复杂场景和物理计算时。
然而,WebGPU目前可能还没有WebGL那么普及,因为它是较新的技术,而且浏览器支持可能不如WebGL广泛。
如果你的目标用户群体使用的是较旧的浏览器,或者你的游戏不需要WebGPU提供的额外性能和特性,那么WebGL可能仍然是一个合适的选择。
Web 中的 AI 推断适用于大部分设备,AI 处理可以充分利用用户设备上的硬件,在网页本身中进行。如今,应用开发者和研究人员使用框架构建模型,模型在浏览器中使用 Tensorflow.js 或 ONNX Runtime Web 等运行时执行,运行时使用 Web API 执行。所有这些运行时最终都会通过 JavaScript 或 WebAssembly 在 CPU 上运行,或者通过 WebGL 或 WebGPU 在 GPU 上运行。
机器学习工作负载
机器学习 (ML) 工作负载通过计算节点图推送张量。张量是这些节点的输入和输出,用于对数据执行大量计算。
这一点非常重要,因为:
- 张量是非常大的数据结构,可对具有数十亿权重的模型执行计算
- 扩缩和推断可能会导致数据并行处理。这意味着对张量中的所有元素执行相同的操作。
- 机器学习不要求精确。着陆到月球可能需要 64 位浮点数,但您可能只需要大量 8 位或更少的浮点数来进行人脸识别。
幸运的是,芯片设计师添加了一些功能,使模型运行更快、更炫酷,甚至让模型完全可以运行。
与此同时,WebAssembly 和 WebGPU 团队也在努力向 Web 开发者提供这些新功能。如果您是 Web 应用开发者,则不太可能经常使用这些低级别基元。我们预计您正在使用的工具链或框架将支持新功能和扩展,因此您只需对基础架构进行极少的更改即可受益。但如果您确实想手动调整应用的性能,那么这些功能与您的工作相关。
WebAssembly
WebAssembly (Wasm) 是一种紧凑、高效的字节码格式,运行时可以理解和执行。它旨在利用底层硬件功能,因此能够以接近原生速度执行。代码经过验证并在内存安全的沙盒化环境中执行。
Wasm 模块信息用密集二进制编码表示。与基于文本的格式相比,这意味着更快解码、加载更快、减少内存用量。它具有可移植性,因为它不会对现代架构尚不常见的底层架构做出假设。
WebAssembly 规范是迭代规范的,并在开放的 W3C 社区小组中开发。
二进制格式对托管环境不作任何假设,因此它也被设计为在非网络嵌入中也运行良好。
您的应用只需编译一次,即可在任何地方运行:桌面设备、笔记本电脑、手机或任何其他带有浏览器的设备。
参见:
https://www.unrealengine.com/zh-CN
Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化
Cesium: The Platform for 3D Geospatial
Three.js – JavaScript 3D Library
https://developer.mozilla.org/zh-CN/docs/Web/API/WebGPU_API
WebGPU API - Web APIs | MDN
用于实现更快的 Web AI 的 WebAssembly 和 WebGPU 增强功能(第 1 部分) | Blog | Chrome for Developers
从 WebGL 到 WebGPU | Blog | Chrome for Developers
有助于加快 Web AI 速度的 WebAssembly 和 WebGPU 增强功能(第 2 部分) | Blog | Chrome for Developers
https://www.vulkan.org/
https://webglfundamentals.org/
https://www.opengl.org/