Babylon.js 读取GLB模型元数据

如果你熟悉将 3D 资源导出到游戏引擎的过程,那么无疑也会熟悉 3D 资源的 PBR 和 GLB 导出过程。 这是我们之前概述的内容,也是我们交互式工作的所有资产准备的基石。

然而,从传统的管道意义上来说,能够用元数据标记网格有很多逻辑,以便可以通过代码以某种方式处理它们。

好处如下:

  • 你可以轻松设置更复杂的行为。
  • 你可以将文本、链接或任何其他自定义数据(例如 JSON 架构)嵌入到各个网格中。
  • 你可以标记单个资源中的网格组。
  • 你不受对象命名更改的束缚,因此强大的创建管道也不需要按部件名称过滤对象。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、Babylon 的标签机制

Babylon 中的标签非常有用,也是我们使用的东西,但它是在运行时使用的。 您仍在对对象进行过滤或排序到数组中,或者在创建对象时进行添加。 GLB 元数据使我们可以选择将数据保存到资产模型本身中。

我们使用 3dsMax 来准备我们的资源,工具和过程是我们之前介绍过的。 我们的 Github 存储库中有一些用于此目的的工具。

Babylon.js 是一个很棒的 WebGL 平台,也是我们喜欢用于交互式项目的平台。 因此,通过为 3dsMax 编写一个工具脚本来添加元数据预导出来添加到工具集中是有意义的,这样结构就可以由项目负责人或 TD 定义,并且可以为开发人员提供一个包含大量选项的模型。 保持相同的嵌入数据格式,你可以交换模型并在应用程序之间具有类似的功能,几乎不需要任何代码重构。

我们将在示例中使用此模型,即 Draco 编码的叉车动画。

2、设置自定义元数据属性

提取 GLTF 工具存储库后,你将可以访问属性工具。 这是使用默认属性设置的,该属性应该可以处理几乎大多数标记网格体的场景。

_attr 文件夹保存默认属性 - 如果你了解一些脚本,可以构建任意数量的自定义属性类型来保存任何级别的数据,甚至只是一些自定义值。

在 3dsMax 中,你可以将属性批量添加到每个对象。 要使用它,请运行babylonMetadata.ms 脚本文件。 你可以将它们添加到 #userscripts 目录中,但它将从任何地方运行。

元数据脚本会将相同的属性参数添加到每个网格的基础对象上 - 它是一个映射函数,因此它将循环选择来执行此操作。

你可以单独选择每个对象并自定义数据,也可以使用以下函数整体选择 -

SetBabylonMetadataOnSelection()

将特定网格设置为触发对象

其他子网格可以用不同的属性进行标记,以便在运行时自动过滤它们并向它们附加任何额外的数据 -

我将 HUD 动画设置为不同的 MeshID,因为我可以将其添加到发光层

完成此操作后,你可以运行导出器并以通常的方式保存,你将能够看到导出器在日志中正确添加元数据 -

请记住,Babylon 导出器仅添加到网格中!

导出网格体将带有此附加属性

3、验证嵌入的元数据

此沙箱提供了带有嵌入式元数据的 GLB 的简单示例。

这是检索元数据的代码 -

meshTask.onSuccess = function (task) { task.loadedMeshes.forEach(meshPart => { // check for metadata on the meshestry {console.log( “Custom Metadata Mesh — “ , meshPart.name , meshPart.metadata.gltf.extras);} catch (error) {console.log( “Null Objects”, meshPart.name); }}); }

我们可以在 Chrome 控制台中看到我们如何获得所有对象的良好数据集。

我希望这可以很好地概述如何使用 Babylon.js 导出器将数据嵌入到外部网格中。 如果需要更多信息,请参阅帮助文档中存储的信息,正是这个信息真正触发了整个过程。


原文链接:Babylon读取GLB元数据 - BimAnt

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

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

相关文章

通配符HTTPS安全证书

众多类型的SSL证书,要说适用或者说省钱肯定是通配符了,因为谁都想一本SSL证书包括了整条域名,而且也不用一条一条单独管理。 通配符HTTPS安全证书,其实就是通配符SSL证书,SSL证书主流CA的参数都一样,通配符…

【MHA】MySQL高可用MHA介绍8-常见错误以及解决

目录 MHA Node 未安装在 MySQL 服务器上 找不到主服务器的二进制日志 没有对二进制/中继日志授予读权限 使用多主复制(不受支持) 这些日志是 MHA Manager 在执行故障检测和故障切换过程中遇到的一些问题的记录。让我为您解释一下每个错误消息的含义&…

武汉星起航:亚马逊助力中国卖家扬帆出海,迎来跨境电商新机遇

2015年,亚马逊全球开店业务正式踏入中国这片充满活力和潜力的市场,此举不仅为中国卖家提供了前所未有的跨境电商新机遇,更为其发展出口业务、拓展全球市场、打造国际品牌铺设了一条坚实的道路。亚马逊作为国际版的电商购物平台,其…

Hadoop-Hive-Spark-离线环境搭建

一、版本描述 apache-hive-2.3.9-bin.tar.gz hadoop-2.7.0.tar.gz spark-2.4.0-bin-hadoop2.7.tgz 下载链接: https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz https://archive.apache.org/dist/hadoop/common/hadoop-2.7.…

js中onchange的使用场景及如何使用

使用场景&#xff1a; onchange 事件常用于表单元素&#xff08;如 input、select、textarea 等&#xff09;的值发生改变时触发相应的操作。可以用于实时监测用户输入的内容&#xff0c;进行验证或实时更新相关内容。 示例代码&#xff1a; <!DOCTYPE html> <html…

vscode 创建代码模版

在vscode中快捷创建代码模版 1.在VSCode中&#xff0c;按下Ctrl Shift P&#xff08;Windows/Linux&#xff09;或Cmd Shift P&#xff08;Mac&#xff09;打开命令面板。 2.然后输入"Preferences: Configure User Snippets"并选择该选项。打开一个json文件用户…

vue3 update:modelValue 用法

在Vue 3中&#xff0c;update:modelValue是v-model指令的默认事件&#xff0c;用于在组件内部通知父组件更新绑定的值。这种命名约定是固定的&#xff0c;当你在组件上使用v-model而没有指定参数时。然而&#xff0c;Vue 3也提供了灵活性&#xff0c;允许开发者自定义绑定的属性…

IDEA中配置使用maven和配置maven的中央仓库

1 以汉化后的IDEA为例配置maven 打开idea选择文件 选择 设置 点击>构建.执行.部署 点击>构建工具 点击>Maven 其中Maven主路径 就是我们maven下载解压后的路径 可以通过边上的三个点选择你解压后的绝对路径&#xff0c;也可以直接把解压后的绝对路劲复制过来 以下…

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索算法…

物联网:从电信物联开发平台AIoT获取物联设备上报数据示例

设备接入到电信AIoT物联平台后&#xff0c;可以在平台上查询到设备上报的数据。 下面就以接入的NBIOT物联远传水表为例。 在产品中选择指定设备&#xff0c;在数据查看中可以看到此设备上报的数据。 示例中这组数据是base64位加密的&#xff0c;获取后还需要转换解密。 而我…

实现异步的8种方式

一、前言 在编程中&#xff0c;有时候我们需要处理一些费时的操作&#xff0c;比如网络请求、文件读写、数据库操作等等&#xff0c;这些操作会阻塞线程&#xff0c;等待结果返回。为了避免阻塞线程、提高程序的并发处理能力&#xff0c;我们常常采用异步编程。 异步编程是一种…

2024 IDM最新破解版及软件介绍

*IDM&#xff1a;信息时代的高效管理工具** 在快节奏的现代社会中&#xff0c;随着信息的爆炸式增长&#xff0c;如何高效、有序地管理信息成为每个人都需要面对的挑战。IDM&#xff0c;作为一种信息管理工具&#xff0c;正在逐渐受到人们的青睐。 IDM&#xff0c;全称Inform…

Linux--进程控制(1)

文章衔接&#xff1a; Linux--环境变量-CSDN博客 Linux--地址空间-CSDN博客 目录 1.进程创建 2.进程的终止 2.1想明白&#xff1a;终止是在做什么&#xff1f; 2.2进程终止的三种情况 2.3 进程如何终止 3.进程等待 &#xff08;wait/waitpid&#xff09; 1.进程创建 在li…

C++内存分布 new和delete介绍

目录 C/C内存分布 栈区 堆区 静态区 常量区 C new和delete 分配空间形式对比 new delete与malloc free的区别 可不可以串着使用new和free呢 C/C内存分布 C的内存分布&#xff0c;大体上分为栈区 堆区 静态区 常量区 栈区 栈区是用于存储函数调用时的局部变量 函…

MySQL——运维

日志 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 查看日志位置&#xff1a; sho…

Eigen::svd和 np.linalg.svd的不同之处

目录 pythonc结论参考 SVD奇异值分解与PCA主成分分析 SVD动画图解–Wiki Eigen Svd 和 np.linalg.svd都可以用于SVD计算&#xff0c;但两者却存在细微的差别。 python import numpy as np datanp.array([[0.99337785, 0.08483806, 0.07747866, -92.91055059],[-0.07889607,…

【Qt常用控件】—— 多元素控件

目录 1.1 List Widget 1.2 Table Widget 1.3 Tree Widget 1.4 小结 Qt 中提供的多元素控件有: QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例&#xff1a; QTableView 是基于…

自动驾驶---OpenSpace之Hybrid A*规划算法

1 背景 笔者在上周发布的博客《自动驾驶---低速场景之记忆泊车》中,大体介绍了记忆泊车中的整体方案,其中详细阐述了planning模块的内容,全局规划及局部规划(会车)等内容,包括使用的算法,但是没有深入详细地展开讲述OpenSpace规划算法,因此在本篇博客中,详细讲解该部分…

03-JAVA设计模式-备忘录模式

备忘录模式 什么是备忘录模式 Java中的备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便以后可以将对象恢复到原先保存的状态…

Idea:阿里巴巴Java编码插件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、Alibaba Java Coding Guidelines插件介绍 二、使用步骤 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Alibaba Java Coding …