以 gltf 格式从 Blender 导出组到 Three.js

Posted

技术标签:

【中文标题】以 gltf 格式从 Blender 导出组到 Three.js【英文标题】:Exporting group to Three.js from Blender in gltf format 【发布时间】:2019-06-29 02:52:36 【问题描述】:

我有一个 Blender 场景,其中对象被组织成集合。

当我以 gltf 格式导出场景并将其导入我的 Three.js 项目时,没有跟踪这些集合。

我的预期是每个集合对应一个组。

我怎样才能得到这个结果?有可能吗?

【问题讨论】:

【参考方案1】:

我认为最稳健的方法可能是在 Blender 中为每个集合创建一个 Empty 对象,并将其用作其集合其余内容的父级。给它起一个你可以从 ThreeJS 端查到的名字。

在 glTF 中本身没有“集合”,但有一个父/子节点层次结构,您可以将其用于分组目的。

附带说明,glTF 确实支持多个“场景”,但我不记得导出器是否会这样写出多个 Blender 场景。无论如何,大多数 glTF 阅读器都不能很好地阅读。我怀疑使用 Empty 节点作为组的父节点来组织事物将是经过更好测试的代码路径。

【讨论】:

您能否详细说明要遵循的程序?【参考方案2】:

emackey 的回答很好,对于用例:

objects_x children of parent y = collection1
objects_z children of parent a = collection2

Three.js 有一个名为 Layers 的 Object3D 属性,它允许这个用例:

objects_x = collection1
objects_z = collection2
objects_x & objects_z = collection3

这允许部分显示集合,或单个对象出现在多个集合中。

我发现这样做的唯一方法是手动为每个对象分配 Three.js 层值,如下所示:

gltf.scene.children[0].layers.enable(1);
camera.layers.enable(1)

然后,您可以使用以下命令切换第 1 层中对象的可见性:

camera.layers.toggle(1);

查看此处了解更多详情:https://threejs.org/examples/#webgl_layers

【讨论】:

以上是关于以 gltf 格式从 Blender 导出组到 Three.js的主要内容,如果未能解决你的问题,请参考以下文章

Blender 2.79 材料导出到 gltf 失去光泽

为啥在导出为 GLTF 时,blender rigged 动画会变形?

从搅拌机导出的 USDZ 模型损坏

使用具有 0 粗糙度的 GLTF 导出的立方体 原则 BSDF 材料在 Three.js 中无法正确显示

Cesium + Blender 实现简单GIS

Cesium + Blender 实现简单GIS