iOS SceneKit:XCode“中断”导入的 DAE 材质颜色

Posted

技术标签:

【中文标题】iOS SceneKit:XCode“中断”导入的 DAE 材质颜色【英文标题】:iOS SceneKit: XCode "breaks" imported DAE material colors 【发布时间】:2018-05-30 02:38:13 【问题描述】:

首先,如果关于 3D 设计的非技术性语言超出了我的范围,我深表歉意。 我正在使用由 3D 设计师提供的一些 DAE 文件在 SceneKit 上显示 3D 模型。但是,当我将它添加到 XCode 上的 scnassets 文件夹时,所有材质颜色都会“损坏”。以这个珠宝的 DAE 为例,蓝色和白色的版本在在线查看器上可视化并且是正确的。另一张黑白照片是我在手机运行 ARSession 时截取的屏幕截图,其中 dae 加载到节点上。

知道如何保留原始颜色吗?

更新从命令行运行我收到很多这样的警告:

$ xcrun scntool --convert ARO-E-BLING.DAE --output cliConverted.scn --format scn

警告:带有 URL 文件的 instance_effect:/Users/Leandro/Documents/ARO-E-BLING.DAE#White stone-fx 没有引用效果,跳过它

警告:带有 URL 文件的 instance_effect:/Users/Leandro/Documents/ARO-E-BLING.DAE#Blue Stone-fx 没有引用效果,跳过它

警告:发现无效材质 [白色],正在恢复为默认材质

警告:发现无效材质 [蓝色],正在恢复为默认材质

【问题讨论】:

【参考方案1】:

嗯,从命令行运行它帮助我找到了解决方案。如果 dae 中的材料和/或效果上有空格,scntool 似乎会失败。例如,我有这样的事情:

<material id="Blue Stone" name="Blue Stone">
  <instance_effect url="#Blue Stone-fx"/>
</material>

我不得不替换它

<material id="Blue_Stone" name="Blue_Stone">
  <instance_effect url="#Blue_Stone-fx"/>
</material>

2018 年 1 月 8 日更新我向 Apple 提交了一份错误报告,他们表示此行为不是错误,说明:

根据 Collada 规范 (https://www.khronos.org/files/collada_spec_1_4.pdf) 的 URL “instance_effect”的类型为“xs:anyURI”。

URI 不允许包含空格,它们必须被转义(“Spaces 应该使用 %20" 转义 http://www.datypic.com/sc/xsd/t-xsd_anyURI.html)。

【讨论】:

很好的答案。我不太清楚,但这看起来像一个错误。你应该用 Apple 记录它:bugreport.apple.com @RoboticCat 做到了,他们认为这不是一个错误(如果有兴趣,请参阅答案更新) 感谢您的更新。所以毕竟不是错误;这使得这是一个非常有用的答案。

以上是关于iOS SceneKit:XCode“中断”导入的 DAE 材质颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ARKit 将 dae 导入 SceneKit

iOS - Scenekit3D引擎初探之 - 导入模型+上传服务器+下载并简单设置

Scenekit Xcode 模板 (BoilerPlate) 代码在运行时崩溃,Xcode 13, 2021

iOS开发- SceneKit

使用 Scenekit 场景时间在 iOS 中擦洗动画

DAE 文件解析错误