WebGPU实战3D电商

在过去的几年里,我们一直在为 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 skeletonsscene.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.hqwc.cn/news/19906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go 爬虫速度控制

go 爬虫速度控制 使用go语言用原生net/http写爬虫如何优雅的控制并发和请求速度控制并发限流并发和限流的区别简单说明有了并发控制为什么还要限流 最总代码 使用go语言用原生net/http写爬虫如何优雅的控制并发和请求速度 go程序的执行效率相对python要快的多,且占…

今天实习第一天,用git

老板问了我是否用过gitee,并且是否用过git,在集成工具中,会git来提交代码。我说没有。 所以,先使用gitee。 01.登录gitee的官网,在此处登录。 02.绑定邮箱,我用的是QQ邮箱。 03.git的历史 git是分布式的…

用OpenCV进行图像分割--进阶篇

1. 引言 大家好,我的图像处理爱好者们! 在上一篇幅中,我们简单介绍了图像分割领域中的基础知识,包含基于固定阈值的分割和基于OSTU的分割算法。这一次,我们将通过介绍基于色度的分割来进一步巩固大家的基础知识。 闲…

Java实现站内信

假如后台某个任务比较耗时,这时就需要任务完成时,通知一下用户,如下图,实现站内信的效果 两张表即可实现 t_message_content内容表 CREATE TABLE t_message_content (c_id int(11) NOT NULL AUTO_INCREMENT COMMENT 消息的id,se…

flink-conf.yaml的参数

参数 ⚫jobmanager.memory.process.size:对 JobManager 进程可使用到的全部内存进行配置, 包括 JVM元空间和其他开销,默认为 1600M,可以根据集群规模进行适当调整。⚫ taskmanager.memory.process.size:对 TaskManage…

【全栈开发指南】OAuth2授权获取token调试接口的方式

在我们实际应用接口的调用调试过程中,需要用到token或者刷新token,GitEgg支持OAuth2.0协议进行认证授权,这里介绍说明如何通过Postman获取token和refresh_token并进行接口调试。 1、使用密码模式获取token 根据spring-security-oauth2的实现…

怎么使用文件高速传输,推荐镭速高速文件传输解决方案

​​随着互联网的发展,文件传输越来越频繁,如何实现文件高速传输已经越来越成为企业发展过程中需要解决的问题,在当今的业务中,随着与客户和供应商以及内部系统的所有通信的数据量不断增加,对 高速文件传输解决方案的需…

[静态库和动态库][VS2022]

静态库和动态库 前言:一、静态库二、动态库三、静态库和动态库的使用 前言: 我们写代码,可以分模块去写,最后可以协作,能整合起来; 可以吧代码的实现和声明分离。 比如:我的这篇博客C语言猜拳小…

JavaScript ES6实现继承

1 对象的方法补充 2 原型继承关系图 3 class方式定义类 4 extends实现继承 5 extends实现继承 6 多态概念的理 function 创建的名称如果开头是大写的&#xff0c;那这个创建的不是函数&#xff0c;是创建了类。 ES6-class类中的内容 <!DOCTYPE html> <html lang&…

CUDA编程实战(使用Sobel算子对rgb图片进行边缘检测)

写在前面&#xff0c;本篇文章为一个CUDA实例&#xff0c;使用GPU并行计算对程序进行加速。如果不需要看环境如何配置&#xff0c;可以直接到看代码部分:点击直达 关于如何更改代码和理解代码写在这个地方:点击直达 运行环境&#xff1a; 系统:windows10专业版 显卡:NVIDIA …

uniapp 在app中获取经纬度

在uniapp中app端&#xff0c;uni.getLocation获取经纬度会有大概1-2公里的偏差&#xff0c;在实际项目中&#xff0c;有的需求对经纬度的准确度要求比较严格&#xff0c;研究了很多种方式&#xff0c;最终发现使用高德地图api的微信小程序的插件获取的准确性是最准的&#xff0…

vue3前端模拟https安全策略同局域网内测试方法-local-ssl-proxy

文章目录 前言建议全局安装运行安全策略模拟运行效果如果其他客户端不能访问 直接在cmd跑即可&#xff0c;不过我们应该先运行项目 前言 为什么要用https安全策略呢&#xff0c;因为http浏览器策略访问权限有限&#xff0c;不能使用navigator的激活“用户音频或视频”的方法&a…