将.dae模型导入SceneKit

我们最近一直在开发一款相对知名的“不稳定方块塔”游戏的AR版本,我们决定将其命名为Toppler。 我们采取的第一步就是使用Blender设计木块,然后直接在SceneKit中使用它们。 我将详细介绍将3D模型导出为.dae (数字资产交换)文件的过程以及如何将其与SceneKit一起使用。 您可能倾向于将其视为一个简单的步骤,但是需要注意一些事项,并且如果您以前没有做过此主题,那么缺少有关该主题的文档就尤其具有挑战性。

1.导出.dae文件

我使用Blender来制作木制积木(我将跳过积木创建步骤,这可能是以后的主题)。 您将在Blender中采取的最后一步是导出您的创作。

经典菜单,只需点击文件>导出> Collada(.dae)。

您将看到一个带有多个选项的导出窗口。 我们将感兴趣的选项是Selection Only 。 取消选中该复选框将导出场景中的所有内容(例如:灯光,照相机等)。 在这里,我们只希望将木块导出,因此我们将确保之前已选择它,然后将其选中。

选择一个适当的路径,然后单击右上角的“ 导出COLLADA”按钮。 导出后,您将在其纹理旁边找到导出的DAE文件(如果有的话)。 您甚至可以通过QuickLook获得不错的预览。

2. .dae文件

.dae文件格式(或COLLADA文件)已由“ 协作设计活动”定义。 就像定义3D对象各种特征的XML文件一样简单。

您将在文件中找到各种库,这些库将用于描述场景。 例如,我们将找到library_images来引用我们的纹理,

引用了我们的纹理和效果的library_geometries ,声明了可用几何形状的library_visual_scenes ,以及保存我们的场景元素并引用所需材质和几何形状的library_visual_scenes部分。

这里没有其他小节。 随时使用您喜欢的文本编辑器打开.dae文件,以亲自检查一下。

3.导入Xcode

使用Blender建模3D对象时要了解的一件事是与Xcode使用不同的坐标系:

在Xcode中,Y轴描述高度,而Blender中的Y轴描述深度(并且反向观察适用于Z轴)。

幸运的是,Xcode知道如何处理坐标系之间的这种差异。 如果查看Xcode中的scnassets资源文件夹,您会注意到“ 始终使用Y轴 ”选项。 意思是 :

Xcode将强制执行自己的坐标系,并将转换任何使用不同坐标系的对象。

现在,只需将.dae文件及其纹理拖放到.scnassets文件夹中即可。 Xcode将自动使用适当的轴设置对其进行转换,您将能够使用Xcode Scene Editor打开它并预览3D对象。

如果最终将纹理.png文件移动到其他位置,请确保使用“材质检查器”将其重新分配给所需的材质。

4.转换为.scn

如果要使用场景编辑器(或任何特定于SceneKit的设置)更改3D对象的物理行为,则需要将模型转换为.scn文件。 在Xcode中预览模型时,请点击编辑器菜单,然后点击转换为SceneKit场景文件格式

然后你走了! 您最终将获得一个.scn文件,准备在SceneKit中完全使用它。 现在,您可以将其拖放到另一个场景中,或者可以通过代码将其导入并将其根节点添加到父SCNNode

通过从Blender导入并使用我们的.dae模型到Xcode,我们能够继续前进并构建出了不起的增强现实游戏。 但是,我们遇到了创建Toppler的许多其他障碍,其中之一是找到一种以最小的性能成本立即更新块材料以反映其突出显示状态(准备被抓取和移动)的方法。 但是,我们将继续在另一期发布此问题,敬请期待!