如何将复杂的 .dae 模型导入到 SceneKit?

Posted

技术标签:

【中文标题】如何将复杂的 .dae 模型导入到 SceneKit?【英文标题】:How to import complex .dae model to SceneKit? 【发布时间】:2019-03-17 11:27:39 【问题描述】:

我知道如何从 Blender 中将单个模型(如汽车)导出为 .dae 文件,然后将其导入并使用 SceneKit 显示。还有那个模型的动画。

但我想知道导入更复杂模型的最佳方法是什么。就像一个城市的一小部分。就像一个有多辆汽车、建筑物和人的场景,有不同的动画。

有没有办法做到这一点,而无需将所有内容导出为一个具有一个动画的模型,然后通过 SceneKit 中的代码组合并放置所有内容?因此,尽可能在 Blender/其他 3D 工具中定义。

【问题讨论】:

【参考方案1】:

很明显,您必须从 3D 包中导出复杂的模型,这些包被分成更小的部分。当然,您不一定需要单独导出所有 3D 模型(基于每个模型)。在任何情况下,准备所有 3D 模型以在Game Engine 中使用都是非常耗时的过程。 没有一键式解决方案

像城市这样的复杂场景可以在逻辑上划分为一组静态对象:摩天大楼、柱子、沥青、房屋、长凳等。但是动画对象,比如人、树或汽车,必须从 Blender 导出并单独导入到 SceneKit .

请记住,这些 3D 对象(无论是单个对象还是一组对象)的所有对应纹理都必须保存为 UV 映射正方形 jpegpng 文件(如 512x512 或 1024x1024 像素)。并且不要忘记用于动力学的低多边形碰撞网格。

看看WWDC 2015 SceneKit session。您将看到如何在 Xcode 的场景编辑器中构建 3D 场景。

为了实现您的目标,您需要从 Blender 中导出 3D 场景的较小部分(如我之前提到的逻辑划分),将所有部分导入到 SceneKit (ARKit) 项目中,然后通过 Swift 代码将它们全部组合起来。此外,许多 3D 包可以将多个动画导出为带有所谓的子动画的单个动画。在this SO post你可以找到处理方法。

【讨论】:

【参考方案2】:

实际上,有一种方法可以做到这一点。

如果您观看有关 Model I/O 的 WWDC 视频,他将演示如何遍历 .USD 文件以轻松捕获节点、几何图形、相关层次结构、材质、动画等。

不幸的是,他没有为 .dae 文件执行此操作。

流程如下:

    在场景文件中创建一个节点数组。

    创建一个数组来描述每个节点的父节点。

    创建一个描述这些节点实例的数组。

    创建一个描述节点材料的数组...

    创建一个描述动画的数组...通过创建一个包含骨骼、它们附加的顶点、变换等的数组来实现。

毕竟,您必须编写一个函数来重新组合已被描述为数组数组的场景。

我不够熟练,无法做到这一点......我希望有人创建一个示例以便我可以研究它。

但这就是逻辑。

【讨论】:

以上是关于如何将复杂的 .dae 模型导入到 SceneKit?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ARKit 将 dae 导入 SceneKit

如何把SketchUP里创建的模型正确的导入到CityEngine中

SceneKit - 如何获取 .dae 模型的动画?

如何创建要在 SceneKit 中使用的 DAE 文件?

3D可以打开.dae文件吗?

iOS SceneKit:XCode“中断”导入的 DAE 材质颜色