Babylon.js实战WebXR/元宇宙

news2024/11/22 21:33:12

从 VR 音频实验到街机上的 VR 休闲游戏,再到使用 AR 或 VR 创建新协作方式的更严肃用途,阅读本文后,你应该对今天可以做什么有很好的了解。

事实上,在本文中,我将分享我一直致力于使用 Babylon.js 构建沉浸式或增强现实 WebXR 体验的许多有趣实验,以及更严肃的/业务场景。 你将能够通过试验和阅读每个演示的源代码来学习。 如果你还没有兼容的设备,我将分享一些后备方案以及使用 Valve Index、Oculus Quest 2 或 HoloLens 2 的视频。

在这里插入图片描述

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

Babylon.js 是一个免费的开源 3D 引擎,构建在 WebGL 和 WebGPU 之上。 它开箱即用地支持 Web Audio 和 WebXR。 你只需专注于想要构建的体验或游戏,Babylon.js将为你管理许多 Web API 的复杂性。

1、WebXR?

WebXR 是一种支持虚拟现实 (VR) 和增强现实 (AR) 场景的 Web API。 我期待它会越来越受欢迎,因为它将成为网络上元宇宙的主要构建块之一。 你应该看看!

要了解有关此规范的更多信息:

  • WebXR 设备 API
  • 沉浸式 Web 工作组/社区组
  • 将 WebXR 与 Windows 混合现实结合使用
  • WebXR | ARCore
  • WebXR 基础 – Web API

为了能够使用WebXR,你需要一个兼容的设备,例如 Valve Index、Oculus Quest 2、Windows Mixed Reality 头戴式设备、HoloLens 2 或任何与 SteamVR 兼容的 VR 头戴式设备,以及用于 AR 的 Android 智能手机或 HoloLens 2。 对于浏览器,需要一个基于 Chromium 的浏览器,例如 Google Chrome、Microsoft Edge、Opera、Samsung Internet、Chrome for Android 或 Oculus 浏览器。

2、XR 体验助手

Babylon.js 通过一行代码提供完整的 VR 体验。 它将转换现有的场景 VR 兼容,将提供远传(teleport)能力(你必须提供充当地板的网格的名称)并将显示当前使用的控制器的正确模型。

例如,要让自己沉浸在著名的《回到未来》序列中,请导航至此 URL 并查看代码。 由于这行代码,你会发现奇迹发生了:

var xr = await scene.createDefaultXRExperienceAsync({
    floorMeshes: [
    	scene.getMeshByName("Road1"), 
        scene.getMeshByName("Herbe1")
    ]
});

其中 2 个对象可以支持传送目标:“Road1”和“Herbe1”。

如果你连接了兼容的浏览器和 WebXR 兼容设备,会在右下角看到一个 VR 图标:
在这里插入图片描述

如果你没有兼容的设备,可以尝试安装此 Chrome 扩展程序:WebXR API Emulator – Chrome Web Store ,它将模拟 WebXR 设备。 打开开发者工具,你就可以模拟某人使用 VR 头戴式设备:
在这里插入图片描述

下面这段视频,展示了在 Windows 11 上的 Microsoft Edge 中使用 Valve Index 的完整体验:

在这里插入图片描述

你可以看到你可以像在任何经典 VR 游戏中一样使用传送目标移动,你甚至可以选择着陆时的朝向。

请注意,即使按下触发按钮,控制器上启用的激光也会产生指针向下。 这意味着你可以设计 3D 场景以在构思过程中使用鼠标或触摸,并且它将自动与我们的 VR 体验助手兼容。

顺便说一下,如果你像我一样喜欢这个场景,可以看看相同版本但兼容 WebGPU 的版本。 如果在兼容 WebGPU 的浏览器中运行它,你将获得高达 10 倍的性能提升!

3、VR街机

我喜欢制作小型视频游戏,喜欢街机,也喜欢 VR。 所以,我很自然地将所有这些混合到一个演示中。

首先,你可以看看我多年前移植的原始 2D Canvas 游戏:
在这里插入图片描述

然后我简单地使用这个 2D 画布在 Babylon.js 的 3D 画布中的 2D 平面上渲染它。 事实上,你必须在 WebGL 画布中渲染所有内容,以便能够在 VR 中查看元素并与之交互。 经典 HTML 元素不会投影到 VR 中的 3D 画布中。

Babylon.js 通过动态纹理支持 2D 画布。

然后我只需要将飞机放在街机模型的顶部。 我从 Sketchfab 下载了模型。

如果需要帮助定位场景中的对象,我强烈建议你使用我们的检查器工具:

你可以在此处找到源代码和准备播放的演示。 可以使用键盘、游戏手柄控制器或进入沉浸模式后的 VR 控制器来玩平台游戏。

这里有 2 个视频展示了体验,第一个使用 Valve Index,第二个使用 Oculus Quest 2。

4、虚拟 360 VR 钢琴

我喜欢作曲,也喜欢 VR。 所以再一次,我不得不把两者结合起来! 顺便说一下,你可以在 Sound Cloud 上收听我的音乐作品。

然后我决定使用我们的网络音频支持创建 360 钢琴并为每个键关联音符。 我还使用了网络音频分析器功能在功能区上显示每个音符的波形。

你甚至可以在这里使用平面 2D 屏幕进行尝试:
在这里插入图片描述

要使其在 VR 中运行,只需取消第 12 行和第 11 行的注释。然后相机将位于 360 钢琴的中心。

当然,WebXR 不仅仅是为了娱乐和游戏体验。 老实说,今天它可能更多地用于“严肃”场景(即使对我来说,游戏是一项严肃的业务)。

6、电子商务

WebXR 及其 AR 功能对于电子商务场景很有趣。 我鼓励你阅读 Babylon.js 博客上的这篇精彩文章:WebXR、AR 和电子商务:初学者指南。 它包含一个演示,可以在 Android 智能手机(或 HoloLens 2)上试用。视频可以看这里。
在这里插入图片描述

7、元宇宙/虚拟访问

我最近还一直致力于构建一个“Metaverse”演示,在该演示中,我能够使用 Azure 通信服务(一种运行在 WebRTC 之上的 CPaaS) 从 VR 场景中使用 Microsoft Teams 呼叫某人。 这个想法是为了试验一个概念,例如,你可以在 Microsoft Teams 连接的销售代表的帮助下参观房屋。下面是使用Valve Index设备的演示视频:

在这里插入图片描述

我首先在 Babylon.js Playground 中构建了一个原型,你可以在其中导航到场景,按下“呼叫”按钮并体验一段假视频,还可以单击 Oculus 控制器的“A”按钮,将视频放在左侧控制器的顶部。

然后,我集成了 ACS JavaScript SDK,以通过 Microsoft Teams 的 ACS 基础设施流式传输视频。 你可以尝试示例并阅读我的 Github 存储库中的代码。在不到 10 分钟的时间内部署一个 Azure 通信服务示例,以便与你的同事和朋友共享和测试。 可以在自述文件中找到完整的设置说明。


原文链接:Babylon.js WebXR实战 — BimAnt

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

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

相关文章

Towards Open-Set Object Detection and Discovery(论文翻译)

Towards Open-Set Object Detection and Discovery 摘要 随着人类对知识的不断追求,开集目标检测(OSOD)被设计用于识别动态世界中的未知目标。然而,当前设置的一个问题是,所有预测的未知对象共享相同的类别为“未知”…

Kali-linux使用Metasploitable操作系统

Metasploitable是一款基于Ubuntu Linux的操作系统。该系统是一个虚拟机文件,从http://sourceforge.net/projects/metasploitable/files/Metasploitable2/网站下载解压之后可以直接使用,无需安装。由于基于Ubuntu,所以Metasploitable使用起来十…

卧龙、凤雏!两源码学得一,代码质量都不会差!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 有人问我,编程能力怎么提升,我说学源码学的。他有问我,是不学 Spring 源码比学 MyBatis 更好…

ESP32 event loop(事件循环)(17)

提示:本博客作为学习笔记,有错误的地方希望指正,主要参考乐鑫技术手册说明结合实例代码分析,结合理论知识学习后示例分析以及常见问题说明。 文章目录 一、ESP32 Event Loop 概述2、使用 esp_event APIs3、默认 event loop4、句柄…

Java进阶-面向对象进阶(抽象类接口内部类)

1 抽象类 1.1 概述 1.1.1 抽象类引入 ​ 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话…

Marvin - LLM驱动的AI函数开发包【Python】

Marvin是一个用于构建 AI 驱动软件的Python库。 Marvin 的工作是将 AI 直接集成到你的代码库中,使其看起来和感觉起来与任何其他功能一样。 Marvin 引入了一个新概念,称为 AI 函数(AI functions)。 AI函数与传统函数的不同之处在…

Java进阶-常用的API

1 Math类 1.1 概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Math类的定义如下: Math类所在包为java.lang包,因此在使用的时候不需要进行导包。并且Math类被final修饰了,因此该类是不能被继承的。 Math类…

springboot+jsp超市库存进销存管理系统-a597o

Spring框架是Java平台的一个开放源代码的Full-stack(全栈)应用程序框架,和控制翻转容器的实现。Spring框架的一些核心功能理论,可以用于所有Java应用,Spring还为Java EE构建的Web应用提供大量的扩展支持。Spring框架没有实现任何的编程模型&a…

PHP生成带有雪花背景的验证码

<?session_start();?> <FORM METHOD=POST ACTION=""> <input type=text name=number maxlength=4><img src="YanZhengMa.php?act=init"> <INPUT TYPE="submit" name="sub"> </FORM><?//检…

【分布族谱】正态分布和二项分布的关系

文章目录 正态分布二项分布验证 正态分布 正态分布&#xff0c;最早由棣莫弗在二项分布的渐近公式中得到&#xff0c;而真正奠定其地位的&#xff0c;应是高斯对测量误差的研究&#xff0c;故而又称Gauss分布。测量是人类定量认识自然界的基础&#xff0c;测量误差的普遍性&am…

本地电脑做服务器搭建私人音乐网站ThinkMusic + cpolar内网穿透

文章目录 1. 前言2. 本地网页搭建2.1 环境使用2.2 支持组建选择 3. 网页安装3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN lisacpolar的文章&#xff1a;ThinkMusic源码搭建音乐网站&#xff0c;并实现公网访问 1. 前言 在我们的日…

数据结构初阶(1)(一些学习数据结构所需掌握的先导知识:包装类、装箱与拆箱、泛型【泛型的编译——擦除机制、泛型的上界、泛型方法、裸类型】、List简介)

目录 包装类 基本数据类型&#xff08;Primitive Types&#xff09;&#xff1a; 包装类&#xff08;Wrapper Classes&#xff09;&#xff1a; 装箱和拆箱 自动装箱和自动拆箱 泛型 泛型的编译——很重要的擦除机制&#xff1a; 泛型的上界&#xff1a; 泛型方法&…

LC-1335. 工作计划的最低难度(区间DP、记忆化搜索==>动态规划)

1335. 工作计划的最低难度 难度困难97 你需要制定一份 d 天的工作计划表。工作之间存在依赖&#xff0c;要想执行第 i 项工作&#xff0c;你必须完成全部 j 项工作&#xff08; 0 < j < i&#xff09;。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一…

JavaSE进阶(一)—— 面向对象进阶(static、单例、代码块、继承)

目录 一、static静态关键字 1. static是什么&#xff0c;static修饰成员变量的用法 2. 成员方法的分类 2.1 使用场景 3. static修饰成员方法的内存原理 4. static的注意事项[拓展] 二、static应用知识&#xff1a;工具类 1. 工具类是什么 2. 工具类的好处 3. 为什么工…

域名信息收集

被动信息收集 0x01 Certificate Transparency&#xff08;证书透明&#xff09; 证书透明度(Certificate Transparency)是证书授权机构的一个项目&#xff0c;证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址。查找某个域名…

Java进阶-字符串的使用

1.API 1.1API概述 什么是API ​ API (Application Programming Interface) &#xff1a;应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需要…

PPT技能之描边字,要大要醒目别整没用的

文字仅仅加粗&#xff0c;还是不够明显&#xff0c;不妨用上描边字。不会Photoshop&#xff0c;不会PS&#xff0c;也可以做好看的描边字。 描边字&#xff0c;是在文字的边缘加上边框&#xff0c;让文字更醒目、突出。 你的关注&#xff0c;是我最大的动力&#xff01;你的转…

【K8s】基本存储、高级存储(PV和PVC)、配置存储

文章目录 背景一、基本存储1、EmptyDir2、HostPath3、NFS 二、高级存储1、认识PV和PVC2、PV3、PVC4、生命周期 三、配置存储1、ConfigMap2、 Secret 背景 程序运行在容器中&#xff0c;而容器的生命周期可能极其短暂&#xff0c;容器销毁&#xff0c;数据丢失&#xff0c;因此…

pip install出现socket.timeout: The read operation timed out的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

MySQL 8.0不再担心被垃圾SQL搞爆内存

MySQL 8.0.28引入的新功能 MySQL 8.0.28开始&#xff0c;新增一个特性&#xff0c;支持监控统计并限制各个连接&#xff08;会话&#xff09;的内存消耗&#xff0c;避免大量用户连接因为执行垃圾SQL消耗过多内存&#xff0c;造成可能被OOM kill的风险。 首先&#xff0c;需要…