WebGPU实战3D电商

news2025/2/24 12:34:45

在过去的几年里,我们一直在为 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 实现的幕后英雄。


原文链接:WebGPU 3D电商实验 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100种思维模型之安全边际思维模型-92

安全边际, 简而言之即距离某一件糟糕的事件发生,还有多大的空间,安全边际越高,我们就越安全! 安全边际思维模型一个 让生活变得更从容 的 思维模型。 01、何谓安全边际思维模型 一、安全边际思维 安全边际 源于…

千云探探监测到7月4日法国Facebook社交网络异常

针对法国近期出现的骚乱游行,法国司法部长莫雷蒂7月1日时候表示,法国检察官要求互联网运营商提供在社交平台Snapchat上号召骚乱年轻人的IP地址。 法国总统马克龙7月4日表示:“如果事态失控,我们可能需要监管或关闭它们&#xff0…

idea 添加类库

打开项目中的独立环境文件夹,右键打开终端输入安装类库的命令: pip install requests pip3 install BeautifulSoup4 检查这里是否把类库加进来了,加进来就完成!

第十二章 kafka

Producer:Producer即生产者,消息的产生者,是消息的入口。 kafka cluster: Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等…… 主…

Windows如何恢复已删除的Word文档?

案例:可以恢复已删除的Word文档吗? “大家好,我遇到了一个问题,需要大家的帮助。昨天我编辑了一个Word文档并保存到了桌面上,但当我今天再次打开电脑时,它就不见了!昨天工作完成后&#xff…

mysql数据库以及管理流程

目录 1.基本概念 2.DBMS工作模式 3.关系型数据库和非关系型数据库 4.数据库管理 sql语句 5.一些命令 6.增删改查命令 DDL DML 7.案例 创建表 删除 DML管理表中内容 增加内容 改内容 删内容 DCL具体应用 1.基本概念 1.数据 描述事物的符号记录(数字 文字 图像等) …

【报错记录】解决CentOS免密失败的问题,以及解决免密问题的排查流程

前言 本文相当于对之前的文章进行的补充【原创】三台CentOS7非root用户间实现相互间的免密登录_DCTANT的博客-CSDN博客 现场遇到一台旧服务器与其他服务器免密失败的问题,明明.ssh目录中authorized_keys中的公钥设置都是正确的,但是别的服务器连它都得…

基础篇--STM32原理图设计

学会查看数据手册 芯片数据手册获取方式 ST官网:https://www.st.comST中文社区网:https://www.stmcu.org.cn/ 数据手册内容概要 芯片的基本参数(STM32F103ZET6为例) 主频/FLASH/SRAM : 72MHz/512KB/64KB工作电压/…

vue3 + axios 实现带进度条的下载对话框

文章目录 问题实现采用axios实现下载请求写一个进度下载对话框调用对话框 参考链接 问题 上传下载是前端经常面临的两大需求,当文件比较大时,下载进度显示能提升用户体验。本文结合vue3介绍下载对话框的实现。当点击页面中下载按钮后,会呈现…

在日常学习生活中,究竟该如何保持稳定的情绪呢?

方向一:分享工作中让你有强烈情绪波动的事情 编程仅仅是工程的过程实践化,投入进去确实会出现精神集中,出现问题排查过程会绞尽脑汁,甚至抓耳挠腮,当发现问题无法解决时不如放下来想一想,是不是知识点掌握不…

按日,周,年统计,无的数据补充0

需求:按日-周-年统计。统计涉及到3张表数据。 写sql。先把3张表数据摘取出来,只需对3张表的时间做分组统计即可。 按日统计 select DAY(dateff) as time,IFNULL(count(id),0)as num from(select create_time as dateff,id as id from cz_taxi_orders…

go语言开发 三种容器类型:数组、切片、map

目录 go语言中的三种容器类型:数组,切片,map go 与 python的容器类型对比 python go: 数组: 数组的定义:(定义数组的格式、二维数组、初始化、任意长度初始化、取值) 数组的…

swager异常_Failed to load API definition.

现象 Fetch error Internal Server Error /swagger/base/swagger.json 排查 按照以往的经历基本都是因为Conroller中的类中有非对外调用的函数,但是用了public修饰函数,会导致这个问题。这个问题通常通过查看git/svn中最近的提交记录,找出…

hadoop -Unable to start failover controller. Parent znode does not exist

Unable to start failover controller. Parent znode does not exist 问题描述 今天使用星环的TDH集群时,HDFS服务宕掉,在后台查看namenode 始终起不来 kubectl get pod -o wide | grep hdfs 如上图,k8s pod 起来又crash 掉,然后…

10 thymeleaf模版引擎使用

10.1 原理 首先&#xff0c;在idea搜索thymeleafProperties这个配置类。 通过源代码可以发现&#xff0c;使用的文件后缀是html&#xff0c;文件应该放在templates路径下&#xff1a; 10.1 依赖 直接加入启动器的thymeleaf依赖。 <dependency><groupId>org.sprin…

814. 复制数组

链接&#xff1a; 链接 题目&#xff1a; 给定两个数组 aa 和 bb 以及一个整数 sizesize&#xff0c;请你编写一个函数&#xff0c;void copy(int a[], int b[], int size)&#xff0c;将 aa 数组中的前 sizesize 个数字&#xff0c;复制到 bb 数组中。 复制完成后&#xff0c;…

AR 技术应用与管理:施工建造、机柜扫描、办公室导航

随着科技的不断革新和创新&#xff0c;越来越多的行业开始迎来数字化时代的变革。建筑行业作为人类历史上最重要的产业之一&#xff0c;在数字化转型方面同样也在不断推进。图扑软件结合 AR 技术的应用&#xff0c;为建筑行业带来了更加便捷高效的建筑施工过程管理。 传统的建…

娇滴滴的一朵花(Python实现)

目录 1 娇滴滴的她 2 Python代码实现 1 娇滴滴的她 娇滴滴。双眉敛破春山色。春山色。 为君含笑,为君愁蹙。多情别後无消息。 此时更有谁知得。谁知得。夜深无寐&#xff0c;度江横笛。 2 Python代码实现 import turtle from turtle import * turtle.title(春天送她一朵小花) #…

cf卡中毒了?别担心,这2种方法帮助你恢复数据

在现代数字化生活中&#xff0c;数据的重要性日益突出&#xff0c;而CF卡作为一种常见的存储设备&#xff0c;其安全性问题也备受关注。然而&#xff0c;由于各种原因&#xff0c;包括但不限于操作失误、设备故障和病毒攻击&#xff0c;我们可能会遇到数据丢失的情况。在这篇文…