SceneKit. 朝上的方向是哪个?

7

看起来大多数3D制作应用程序使用Z轴作为“上”轴,而SceneKit使用Y轴作为“上”轴。SceneKit允许您将场景加载为Collada .DAE文件。在通过以下任一方式加载场景时:

SCNScene(named: String?, inDirectory: String?, options: [NSObject : AnyObject]?)

或者

SCNSceneSource(URL url: NSURL!, options: [NSObject : AnyObject]!)

你可以指定选项,包括SCNSceneSourceConvertToYUpKey和SCNSceneSourceConvertUnitsToMetersKey。
正确设置这些选项后,我希望从加载的场景中构建出来的节点在添加到我的场景时能够进行转换和缩放。但是这些选项似乎没有任何作用。
let myScene = SCNScene(named: "Scene.dae", inDirectory: nil, options: [SCNSceneSourceConvertToYUpKey:true, SCNSceneSourceConvertUnitsToMetersKey:25.4])

我是否理解这些选项参数的含义有误?

我使用的唯一一个Z-up应用程序是Blender。标准是Y-up,右手坐标系。你还使用了哪些使用Z-up的应用程序? - user652038
Sketchup和3DS Max也使用Z-Up,并且似乎默认以英寸为基本单位。 - BassetMan
我想我可能找到了问题所在。SceneKit:警告,SCNSceneSourceConvertUnitsToMetersKey和SCNSceneSourceConvertToYUpKey对压缩资产没有影响。请改用Xcode的压缩选项。 - BassetMan
3
将文件设置为未压缩会出现以下错误: SceneKit IO: error, COLLADA 文件在此平台上不受支持。因此,这些选项似乎不支持 DAE 文件? - BassetMan
1个回答

10

SceneKit不直接在iOS上加载DAE(或ABC)文件--它从一个私有的苹果格式加载场景,当您将场景文件包含在项目中时,Xcode会自动转换为该格式。其中之一的选项是转换上轴。

我认为当您仅将DAE文件作为捆绑资源包含时,该选项不会被公开。 (这可能是需要报告的一个好bug。)但无论如何,使用新的SceneKit资产目录功能是个好主意--将您的DAE文件和任何外部资源(纹理)放入一个带有.scnassets 扩展名的文件夹中,当您构建时,Xcode会将它们一起处理以针对目标设备进行优化。然后,在Xcode导航器中选择该文件夹时,您将获得一个场景建立选项的编辑器:

SceneKit Asset Catalog options

所有框都是要勾选的。 :) (因为第一个框没有解释:交错意味着组织几何体的顶点数据,以便在顶点处理期间获得更好的GPU内存局部性,这对于嵌入式设备的性能很重要。)

嗯,我没有看到任何关于单位的内容。这可能是需要报告的另一个好bug

还有另一个选项--所有SceneKit对象都实现了NSSecureCoding协议,因此您可以在OS X上加载和预处理场景,然后使用NSKeyedArchiver将其写出。将生成的文件作为捆绑资源包含在iOS项目中,Xcode不会预处理它(它已经被压缩和优化得尽可能好)--如果您将其命名为.scn扩展名,就可以像加载(预处理的)DAE文件一样使用所有的SCNScene SCNSceneSource 方法来加载它。


13
要将dae文件转换为可被SCNScene(named:...)读取的文件,您可以使用以下命令在终端中手动转换文件:**/Applications/Xcode.app/Contents/Developer/usr/bin/scntool --convert InFile.dae --format c3d --output OutFile.dae --force-y-up --force-interleaved --look-for-pvrtc-image**(当然,用您自己的文件名替换InFile.dae和OutFile.dae)。抱歉,在评论中无法进行真正的格式化。 - Marcus
1
只是添加一条注释,您可以通过使用以下命令来运行scntool而无需输入Xcode安装的完整路径:xcrun scntool <arguments here> - bunnyhero
1
在注释中添加一个注释:您也可以直接在Xcode中完成此操作。选择.scnassets目录中的.dae文件,然后点击编辑器/转换为场景文件格式(.scn)。 - Dorian Roy
在新的Xcode 8.1中,那个选项在哪里? 在我看来它消失了,还是被藏起来了? - Nico S.
1
实际上,所有这些选项都已经消失了,包括在当前的Xcode 8.2.1中的Y-up轴选项。 - Jonny
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接