Ios 从Blender导出到COLLADA/.dae格式以在SceneKit中使用时包括纹理

Ios 从Blender导出到COLLADA/.dae格式以在SceneKit中使用时包括纹理,ios,blender,collada,scenekit,Ios,Blender,Collada,Scenekit,我可以使用COLLADA/.dae格式导出Blender中创建的网格,以便在SceneKit中使用-但是iOS设备上没有显示纹理 此外,OS X上的预览不会打开从Blender导出的任何COLLADA文件,但侧栏预览会显示网格。导出时需要哪些选项才能执行此操作?Collada文件不嵌入纹理,它们只有对纹理的引用。确保在预览中打开collada文件时可以从该文件访问纹理,并确保在构建应用程序时将纹理包含在应用程序包中。首先创建一个scnassets文件夹(不是必需的,但很有用) 在桌面上创建文件夹

我可以使用COLLADA/.dae格式导出Blender中创建的网格,以便在SceneKit中使用-但是iOS设备上没有显示纹理


此外,OS X上的预览不会打开从Blender导出的任何COLLADA文件,但侧栏预览会显示网格。导出时需要哪些选项才能执行此操作?

Collada文件不嵌入纹理,它们只有对纹理的引用。确保在预览中打开collada文件时可以从该文件访问纹理,并确保在构建应用程序时将纹理包含在应用程序包中。

首先创建一个scnassets文件夹(不是必需的,但很有用)

  • 在桌面上创建文件夹,并将其扩展名设置为“.scnassets”

  • 将collada(.dae)文件与将在其中使用的任何纹理放在一起

  • 将文件夹拖到项目中,并像往常一样另存为副本

  • 单击scnassets文件夹,您将看到一个用于转换为“y”向上轴的复选框(如果未选中)

  • 为场景模型指定纹理

  • 在xcode中单击项目中的collada(.dae)文件

  • 您应该看到您的场景,并在其左侧显示摄影机、灯光、材质等的列表。这是您的场景树

  • 打开“材质”选项卡并单击其中一种材质

  • 在检查窗口的右侧,单击蓝色球形图标(材质检查器)以查看该材质的漫反射、镜面反射等

  • 单击“漫反射”选项卡,当它打开时,您应该可以在项目中选择颜色和纹理。在3d程序中选择模型上使用的纹理。只要在3D程序中正确地对其进行UV展开,它们就会立即应用于场景视图中

  • 如果加载场景后要更改材质,该怎么办?很高兴你这么问

    为此,我们必须使用SCNSceneSource类的entryWithIdentifier方法。我打算在这里使用swift,因为它太棒了!我们走吧

  • 像这样获取场景(.dae)的url

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    
  • 现在,让我们将该url用于

    let source = SCNSceneSource(URL: url, options: nil)
    
  • 单击.dae,场景图下是项目列表,其中一个是几何体。它的右边将有一个T形水壶,以示支持。我们将在这里使用它的名字。假设几何体的名称为Geo。像这样使用它

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    
  • 现在我们有一个源附加到一个名为yourGeomerty的SCNNode。让我们用UIColor创建一个新材质,如下所示

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    
  • 最后,我们将用新材料替换旧材料,如

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    
  • 如果你有不止一种材料,可以使用它和其他索引。也可以使用UIImage类使用另一个纹理而不是颜色

    提示
    如果要在scnassets文件夹中添加或删除某些内容,请导航到项目文件夹,而不是xcode。这件事我花了一段时间才弄明白,所以我想我可以省去大家的麻烦

    3件事我必须做才能让它工作

  • 确保将图像打包到.blend文件中(这是UV编辑器中的一个选项)

  • 导出时,文件不会自动包含uv或材质。有一个复选框用于在DAE中包括UV和材质。我做这件事的时候也错过了

  • 只有当你把球放在操场上时,你才需要这个。dae还没有完全应用,但我能够在开发人员工具中使用他们的scntool导出一个dae。下面是我使用的一个示例命令行

  • ./scntool--convert~/Documents/Art/blendeart/tableandappleUV.dae--format c3d--output~/Documents/Table5.dae


    注意c3d格式。使用该选项,您的游乐场现在也可以识别dae。(另一个注意事项:如果您想在游乐场中使用dae,您需要将其放入游乐场的resources文件夹)

    我认为您需要告诉我们有关如何导出这些纹理的更多信息。此外,如果预览甚至无法打开纹理,那么这听起来更像是Blender的问题,而不是Scene Kit的问题。我一直在四处寻找关于如何从Blender导出到SceneKit的教程或说明,但没有真正找到任何内容。这段文字很有趣,但很老:到目前为止,我刚刚尝试从Blender导出到COLLADA,更改了一些有关COLLADA的导出选项-起初它没有导出我正在玩的一个纹理文件,但后来让它这样做了-它将它放在同一个文件夹中。不过,我得到的结果与我的问题一样。如果你在Xcode中启动scenekit游戏,模板“ship”在“ship.dae”中定义,打开xml文件可以发现苹果使用“scenekit Collada Exporter v1.0”导出它-这看起来像是他们自己的工具。让你想知道他们首先导出的是什么工具/格式,可能是3dsmax、Maya或其他东西。Collada版本为1.4.1,与Blender相同。我会继续,看看有什么不同…还有一个注意事项:苹果的ship.dae有Y向上,Blender有Z向上。也许它会破坏东西。我知道我在Blender Jonny上为你回答了这个问题,但我想我也会把它放在这里。只是做了一个更新,演示加载场景后如何切换材质。很抱歉延迟。这是正确的方法。Blender并没有以OSX/iOS能够理解的方式编写COLLADA。只有在Xcode 3d编辑器中手动设置纹理并保存后,.dae文件才能在预览中打开并与SceneKit一起使用。谢谢手头有足够的时间,可以比较Xcode和Blender编写的COLLADA格式。然后可能为Blender编写一个插件或类似插件,允许Blender首先编写与SceneKit兼容的COLLADA,这将大大节省时间