如何将复杂的 .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 映射正方形 jpeg
或 png
文件(如 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?的主要内容,如果未能解决你的问题,请参考以下文章