【问题标题】:Including textures when exporting from Blender to COLLADA/.dae format for use in SceneKit从 Blender 导出到 COLLADA/.dae 格式以在 SceneKit 中使用时包括纹理
【发布时间】:2014-09-21 19:07:35
【问题描述】:

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

此外,OS X 上的预览不会打开从 Blender 导出的任何 COLLADA 文件 - 但侧边栏预览确实显示网格。导出时需要哪些选项才能完成这项工作?

【问题讨论】:

  • 我认为您需要告诉我们更多关于如何导出这些纹理的信息。此外,如果预览甚至无法打开纹理,那么这听起来更像是 Blender 的问题,而不是 Scene Kit 的问题。
  • 我一直在寻找有关如何从 Blender 导出到 SceneKit 的教程或解释,但还没有真正找到任何东西。这段文字很有趣,但很旧:iphonedevelopment.blogspot.jp/2012/08/… 到目前为止,我刚刚尝试从 Blender 导出到 COLLADA,更改了一些关于 COLLADA 的导出选项 - 起初它没有导出我正在使用的一个纹理文件,但得到了它稍后会这样做 - 它将它放在同一个文件夹中。但是,我只是得到了问题中的结果。
  • 如果您在 Xcode 中启动场景工具包游戏,模板“ship”在“ship.dae”中定义,打开 xml 文件显示 Apple 使用“SceneKit Collada Exporter v1.0”导出它- 这看起来像是他们自己的工具。让您想知道他们首先导出的工具/格式是什么,可能是 3dsmax、Maya 或其他什么。 Collada 版本是 1.4.1,与 Blender 相同。我会继续看看有什么不同......
  • 还有一点需要注意:Apple 的 ship.dae 有 Y 向上,Blender 有 Z 向上。也许它会破坏事情。

标签: ios blender collada scenekit


【解决方案1】:

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

  1. 在您的桌面上创建一个文件夹并将其扩展名为“.scnassets”

  2. 将您的 collada(.dae) 文件连同您将在其中使用的任何纹理一起放入。

  3. 将文件夹拖到您的项目中并像往常一样另存为副本。

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

为场景模型分配纹理

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

  2. 您应该会看到您的场景,并在其左侧列出相机、灯光、材质等。这是您的场景树。

  3. 打开材料选项卡并单击其中一种材料。

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

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

如果我想在加载场景后更改材质怎么办?很高兴你问!

为此,我们必须使用 SCNSceneSource 类的 entryWithIdentifier 方法。我将在这里使用 swift 因为它太棒了!来了……

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

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
  2. 现在让我们使用那个 url...

    let source = SCNSceneSource(URL: url, options: nil)
    
  3. 单击您的 .dae 并在“场景图”下是项目列表,其中之一是您的几何体。它的右侧将有一个三通水壶,表示如此。我们将在这里使用它的名字。假设您的几何图形名称是 Geo。像这样使用它...

    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
  4. 现在我们有一个附加到名为 yourGeomerty 的 SCNNode 的源。让我们用这样的 UIColor 创建一个新材质...

    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
  5. 最后我们将像这样用新材料切换旧材料......

    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    

如果您有不止一种材料,请使用它和其他索引。您还可以使用 UIImage 类来使用另一个纹理而不是颜色。

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

【讨论】:

  • 我知道我在 Blender Jonny 上为你回答了这个问题,但我想我也会把它放在这里。
  • 刚刚做了更新,展示加载场景后如何切换材质。
  • 抱歉耽搁了。这是正确的方法。不知何故,Blender 并没有以 OSX/iOS 可以理解的方式编写 COLLADA。只有在 Xcode 3d 编辑器中手动设置纹理并保存后,.dae 文件才能在 Preview 中打开并与 SceneKit 一起使用。谢谢。如果手头有足够的时间,可以比较一下 Xcode 和 Blender 编写的 COLLADA 格式。然后可能为 Blender 编写一个插件或类似的插件,允许 Blender 首先编写与 SceneKit 兼容的 COLLADA - 这将节省大量时间,因为现在您必须在 Xcode 每次 中手动选择这些纹理。
  • 如何将标识符从“Geo”更改为其他。
  • 我没有运气从场景包中进行更改。这个名字是从你的 collada 中提取的。因此,只需在导出之前从您正在使用的 3d 程序中重命名您的几何图形。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    要让它发挥作用,我必须做 3 件事。

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

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

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

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

    注意 c3d 格式。使用它,您的游乐场现在也可以识别 dae。 (另一个注意事项:如果你想在操场上使用 dae,你需要放在操场的资源文件夹中)

    【讨论】:

    • 另外一个注意事项,打包图像会放入 UV 资产的完整路径。如果您将它们保存在外部,我发现如果放置在相同的相对路径中,它将使用 UV 图像。
    • 关于如何使用 scntool 的文档在哪里?
    • 在搅拌机 2.79 中,这是需要的“有一个复选框可以在 DA 中包含 UV 和材料”
    猜你喜欢
    • 2018-12-23
    • 2013-08-03
    • 2018-12-02
    • 1970-01-01
    • 2019-09-16
    • 2012-02-22
    • 2014-10-12
    • 2017-01-02
    • 2019-08-30
    相关资源
    最近更新 更多