Babylon.js 读取GLB模型元数据

news/2024/10/20 18:59:32/

如果你熟悉将 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.ppmy.cn/news/1442654.html

相关文章

硬件解码后显存数据直接推理

网络摄像头为何可能比mipi速度快 网络摄像头解码的时候传输到内存中后数据比原始的rgb 图像要小很多,这时候直接传输到显卡以后解码,速度很快,而mipi摄像头如果不使用dma技术,结果会直接用rgb传输到显存中,可想而知&a…

本地wsl的Ubuntu安装docker,不使用docker桌面版

第一步:安装docker引擎 建议大家去docker官网那边看 Install Docker Engine on Ubuntu | Docker Docs 第二步:使用以下命令 sudo update-alternatives --config iptables 选1就对了 第三步:启动docker service docker start

嵌入式全栈开发学习笔记---Linux基本命令4

目录 压缩和解压缩 tar -zcf 压缩包的名字 需要压缩的文件 tar -xzf 压缩包的名字 查找命令 Find 路径 -name “文件名” grep “搜索的关键字” 路径 -R 我们最后学习几个命令: 我们有的时候下载一些文件、软件、库,它会以压缩包的形式出现&am…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

Linux中文件描述符与重定向的深入探索

目录 1. 理解C语言的文件操作函数 2. 操作系统的文件操作接口 3. 文件描述符详解和其内核本质 4. 如何理解Linux下一切皆文件 5. Linux中的重定向 5.1 输出重定向 5.2 追加重定向 5.3 输入重定向 6. 结合文件描述符理解重定向 7.重定向的系统调用 在Linux操作系统中&a…

docker下载镜像到指定目录

要将Docker镜像下载到指定目录,您可以按照以下步骤操作: 下载镜像: 使用docker pull命令从Docker Hub或其他镜像仓库拉取所需的镜像。例如,要下载名为nginx、标签为latest的镜像,可以运行docker pull nginx:latest。 保…

HarmonyOS:Preferences每次启动都会清除

使用现象: 在第一次启动应用时,手动存储了一些测试数据,并利用Preferences将相关信息持久化地存储到设备中。 第二次在该设备上运行同一应用时会判断是否存在该文件。但调试时发现:每次重新启动应用后相关文件都被删除了&#xf…

NLP - 使用 transformers 翻译

from transformers import AutoTokenizer#加载编码器 tokenizer AutoTokenizer.from_pretrained(Helsinki-NLP/opus-mt-en-ro,use_fastTrue)print(tokenizer)#编码试算 tokenizer.batch_encode_plus([[Hello, this one sentence!, This is another sentence.]])PreTrainedToke…