百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

WebGPU 3D电商性能实验

lipiwang 2025-03-07 20:36 12 浏览 0 评论

在过去的几年里,我们一直在为 WebGPU 编写新版本的 Babylon.js 引擎。 随着下一代 Web 3D 即将在Chrome 102~103版本上公开WebGPU 1.0 ,人们的兴奋情绪与日俱增。 在这篇博文中,我将快速概述这个新的 Babylon.js WebGPU 引擎,并将研究它可以为 Web 上的 3D 商务体验带来的一些性能改进。

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、Babylon.js的WebGPU 引擎

这一旅程始于 2019 年,当时对森林演示的渲染包进行了首次实验。 Babylon.js 在设计上是不可知的,向后兼容性至关重要,因此从一开始,其实现就旨在确保用户无需/最少地更改代码。

该引擎的大部分内容在 2020 年期间进行了移植(渲染目标、后处理、阴影、压缩纹理、模板缓冲区、效果层等),并于 2020 年 12 月合并到主分支,发布了 WebGPU Playground 的第一个版本。 2021 年,开始实施新功能,例如计算着色器和渲染包支持的快速路径和其他优化。 你可以在 WebGL+WebGPU 聚会演示中找到更多详细信息。

  • 新功能:计算着色器

计算着色器(Compute Shader)是WebGPU带来的旗舰能力之一。 非图形并行处理(例如模糊、计算机视觉、模拟)现在是一流的。 查看此文档页面以获取更多详细信息和演示。

  • 新功能:快速路径

WebGPU 的另一个承诺是实现高性能 3D 图形,因为它为 JavaScript 的图形资源提供了较低级别的控制。 使用渲染包在新的 Babylon 引擎中实现了多个级别的优化。 快照记录是最快的模式,记录一帧期间的绘制调用并在所有后续帧中重播它们。 它适用于电子商务等大多数静态场景(无管道变化),可带来高达 10 倍的性能提升。

2、基于WebGPU 的3D 商务室演示

在线购物中,3D 的使用在过去几年中不断加速,因为它带来的虚拟呈现通常是客户在家中发现和定制产品的最佳方式。 随着 3D 对象即使在实时渲染中也变得越来越逼真,在保持性能的同时组装一个充满对象的虚拟房间对于开发人员和 3D 艺术家来说是一种权衡。 在这篇博文中,我准备构建我的第一个 WebGPU 演示,试图展示 WebGPU 如何提高性能(在本例中为 10 倍)并帮助突破 3D 商务场景的极限。

第一步。

要开始使用 WebGPU 引擎,只需进入 Playground,如果你的浏览器受 WebGPU 引擎支持(目前启用 WebGPU 标志的 Chrome/Edge Canary),你将能够通过下拉列表从 WebGL 切换到 WebGPU 在右上角。

如果没有 Playground,你只需更新引擎创建(WebGPU 的初始化是异步的)。

//WebGL Engine creation
const engine = new BABYLON.Engine(canvas);

//WebGPU Engine creation
const engine = new BABYLON.WebGPUEngine(canvas);
await engine.initAsync();

3D 房间演示。

我们使用 Polygon Runway 的精彩教程在 Blender 中构建了一个简单的房间。 配备房间后,我向其中添加了 Khronos glTF 和 3D Commerce 工作组使用的一些 glTF 示例对象,以展示 PBR 扩展和 KTX2。 我确保选择了一些重物,因为目标是展示 WebGPU 可以带来的改进。 在开发过程中能够开箱即用地从 WebGL 切换到 WebGPU,非常实用!

快照记录 - 快速模式。

下一步是使用快照记录功能优化场景。 只需要几行代码。

const setSnapshotMode = (mode) => {
    switch(mode) {
        case "disabled":
            engine.snapshotRendering = false;
            break;
        case "standard":
            engine.snapshotRenderingMode = BABYLON.Constants.SNAPSHOTRENDERING_STANDARD;
            engine.snapshotRendering = true;
            break;
        case "fast":
            engine.snapshotRenderingMode = BABYLON.Constants.SNAPSHOTRENDERING_FAST;
            engine.snapshotRendering = true;
            break;
    }
};

在快照录制的快速模式下,风扇和跳舞的机器人模型不再有动画。 为了纠正这个问题,正如文档的最后一个示例(“动画骨骼”)中所解释的,我只需确保渲染骨架所需的所有资源都是通过调用 sculpture.prepare 方法构建的。 请注意,此快照快速模式仅适用于大多数静态场景(无管道更改),并且可以更新快照(为实例添加网格时)。

return new Promise((resolve) => {
    scene.executeWhenReady(() => {
        engine.snapshotRendering = false;
        scene.onBeforeRenderObservable.add(() => {
            //Build all resources required to render skeletons
            scene.skeletons.forEach((skeleton) => skeleton.prepare());
        });
        resolve(scene);
        engine.hideLoadingUI();
        const gui = makeGUI(IsWebGPUMode, scene, sceneInstrumentation);
    });
});

就是这样! 事实上,我花在构建和设置 3D 场景上的时间比在 Playground 中编码的时间要多得多,但这可能是因为我距离成为 3D 艺术家(甚至更不是技术艺术家!)还很远。 当然,这只是 WebGPU 的早期开始,但我希望这会让你有兴趣尝试它。

3、结束语

一些有用的链接可以更深入地了解WebGPU:

  • Babylon.js WebGPU 版本的完整文档
  • 提供反馈和获取帮助的论坛
  • Babylon.js WebGPU 内部结构,深入研究实现并做出贡献

最后但并非最不重要的一点是,非常感谢 Alexis(就是 Egveni),他是 Babylon.js 中大部分 WebGPU 实现的幕后英雄。


原文链接:
http://www.bimant.com/blog/webgpu-3d-commerce-experiment/

相关推荐

ubuntu单机安装open-falcon极度详细操作

备注:以下操作均由本人实际操作并得到验证,喜欢的同学可尝试操作安装。步骤一1.1环境准备(使用系统:ubuntu18.04)1.1.1安装redisubuntu下安装(参考借鉴:https://...

Linux搭建promtail、loki、grafana轻量日志监控系统

一:简介日志监控告警系统,较为主流的是ELK(Elasticsearch、Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,...

一文搞懂,WAF阻止恶意攻击的8种方法

WAF(Web应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤Internet流量以阻止不良流量和恶意请求,WAF是确保Web服务的可用性和完整性的重要安全解决方案。它...

14配置appvolume(ios14.6配置文件)

使用AppVolumes应用程序功能,您可以管理应用程序的整个生命周期,包括打包、更新和停用应用程序。您还可以自定义应用程序分配,以向最终用户提供应用程序的特定版本14.1安装appvolume...

目前流行的缺陷管理工具(缺陷管理方式存在的优缺点)

摘自:https://blog.csdn.net/jasonteststudy/article/details/7090127?utm_medium=distribute.pc_relevant.no...

开源数字货币交易所开发学习笔记(2)——SpringCloud

前言码云(Gitee)上开源数字货币交易所源码CoinExchange的整体架构用了SpringCloud,对于经验丰富的Java程序员来说,可能很简单,但是对于我这种入门级程序员,还是有学习的必要的...

开发JAX-RPC Web Services for WebSphere(下)

在开发JAX-RPCWebServicesforWebSphere(上)一文中,小编为大家介绍了如何创建一个Web服务项目、如何创建一个服务类和Web服务,以及部署项目等内容。接下来小编将为大...

CXF学习笔记1(cxf client)

webservice是发布服务的简单并实用的一种技术了,个人学习了CXF这个框架,也比较简单,发布了一些笔记,希望对笔友收藏并有些作用哦1.什么是webServicewebService让一个程序可...

分布式RPC最全详解(图文全面总结)

分布式通信RPC是非常重要的分布式系统组件,大厂经常考察的Dubbo等RPC框架,下面我就全面来详解分布式通信RPC@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》...

Oracle WebLogic远程命令执行0day漏洞(CVE-2019-2725补丁绕过)预警

概述近日,奇安信天眼与安服团队通过数据监控发现,野外出现OracleWebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725)。由...

Spring IoC Container 原理解析(spring中ioc三种实现原理)

IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...

Arthas线上服务器问题排查(arthas部署)

1Arthas(阿尔萨斯)能为你做什么?这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在...

工具篇之IDEA功能插件HTTP_CLENT(idea2021插件)

工具描述:Java开发人员通用的开发者工具IDEA集成了HTTPClient功能,之后可以无需单独安装使用PostMan用来模拟http请求。创建方式:1)简易模式Tools->HTTPCl...

RPC、Web Service等几种远程监控通信方式对比

几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

取消回复欢迎 发表评论: