作者最近在写项目的过程中遇到了一些3d模型格式问题,故写下这篇文章记录一下解决问题的过程。
示例
如果我们想用SceneKit库来实现在默认背景中展示一个3D模型,大致可以这样写代码:
var sceneView: SCNView!
var scene: SCNScene!
override func viewDidLoad() {
super.viewDidLoad()
// 创建一个SCNView
sceneView = SCNView(frame: self.view.frame)
self.view.addSubview(sceneView)
// 自动启用默认照明
sceneView.autoenablesDefaultLighting = true
// 创建一个scene
let scene = SCNScene(named: "art.scnassets/cup1.scn")!
sceneView.scene = scene
//允许相机控制
sceneView.allowsCameraControl = true
}
很明显的看到,我们的scene接受的是一个.scn文件(即一个场景),那么我们在Maya或者3dsmax做出来的.dae、.obj为后缀的3d模型文件如何在我们项目中使用呢?经作者过一个晚上的苦肝,才发现原来方法很简单。
不同格式文件为什么能转化?
首先我们先来谈一谈为何这几个文件可以互相转化。
区别
- USDZ格式:USDZ是苹果公司开发的一种3D模型文件格式,用于在iOS和macOS设备上显示AR和VR内容。它是基于USD(Universal Scene Description)格式的,其中包含了模型、材质、动画和场景信息,以及用于显示和交互的代码。
- SCN格式:SCN是苹果公司用于在iOS和macOS设备上显示3D场景的格式。它是基于Collada格式的,其中包含了模型、材质、动画和场景信息,以及用于显示和交互的代码。
- OBJ格式:OBJ是一种开放的3D模型文件格式,用于在多个3D软件和游戏引擎中共享模型。它包含了模型、材质和纹理信息,但不包含动画和场景信息。
- DAE格式:DAE是一种开放的3D模型文件格式,也称为Collada格式。它可以包含模型、材质、动画和场景信息,以及用于显示和交互的代码。DAE格式被广泛应用于各种3D软件和游戏引擎中。
综上所述,USDZ格式是为AR和VR应用而设计的,SCN格式是为苹果设备上的3D场景设计的,而OBJ和DAE格式是为多个3D软件和游戏引擎之间的模型共享而设计的。每种格式都有其特定的用途和优劣势,具体的选择应该根据实际应用场景来进行。
本质
USDZ、.scn、.obj和.dae都是三维模型文件格式,它们的本质是描述三维模型的数据结构和存储方式。虽然这些格式之间有些许差异,但它们都是基于三维模型的顶点、面、材质和纹理等数据构成,描述了一个三维模型的完整信息。
因此,这些格式之间可以通过转化工具进行转换,其本质是将三维模型的数据结构和存储方式从一种格式转换为另一种格式,而不会改变三维模型本身的形状和内容。这种转化通常是因为不同的3D软件或3D引擎支持不同的格式,或者因为不同的应用场景需要不同的格式。
转化方法
既然我们可以直接使用.scn文件于我们的项目中,那么我们的最终目的就是将其他格式的文件转为.scn文件,这里就不得不提苹果提供的几个强大工具了。
工具:
1.Reality Converter: 这款工具可以将.obj格式转换为.usdz格式
可以在苹果开发者官网搜索找到它.
2.usdz工具:同样也是将.obj转为.usdz,即为上图中右下角的工具。
操作方法:
在终端输入以上命令,可以看到有两个路径,第一个路径为待转化的.obj文件,第二个路径为转化的.usdz目的路径。
3. xcode工具
这算是xcode中的一个彩蛋啦,在xcode中可以将.dae格式和.usdz格式直接转化为.scn格式,就能直接使用在项目中了.
操作方法:
总结一下,.dae和.usdz格式的文件可以直接在xcode中转成.scn格式,而.obj格式需要先通过Reality Converter或者usdz工具转化为.usdz格式,再由xcode转成.scn格式。
是不是非常简单方便呢?如果本文对你有帮助的话就点个赞➕关注吧,感谢支持!