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

How to import complex .dae model to SceneKit?

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

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

有没有一种方法可以做到这一点,而无需将所有内容导出为一个模型和一个动画,然后通过 SceneKit comebine 中的代码放置所有内容?以便尽可能多地在Blender/other 3D 工具中定义。

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

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

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

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

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

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

如果您观看有关模型 I/O 的 WWDC 视频,那家伙演示了如何遍历 .USD 文件以轻松捕获节点、几何图形、关联的层次结构、材料、动画等。

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

过程是这样的:

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

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

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

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

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

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

我不够熟练,做不到...我希望有人创建一个示例,以便我学习。

但这就是逻辑。