SCNView 导出的 Collada (.dae) 文件看起来不同,无法导入到 Blender
Posted
技术标签:
【中文标题】SCNView 导出的 Collada (.dae) 文件看起来不同,无法导入到 Blender【英文标题】:SCNView exported Collada (.dae) file looks different and impossible to import to Blender 【发布时间】:2019-11-30 17:53:30 【问题描述】:我从SCNView
导出场景时遇到问题。
在 Xcode 中,我用光和一个大的透明盒子制作了简单的场景。
在运行的应用程序中会生成彩色的小盒子。
SCNView 中的场景如下所示:
我对此很满意。 但是如果我通过
导出文件@IBAction func exportDAE(_ sender: Any)
if let scene = view3D.scene
let panel = NSSavePanel()
panel.allowedFileTypes = ["dae"]
panel.runModal()
if let url = panel.url
scene.write(to: url,
options: nil,
delegate: nil,
progressHandler: nil);
抛出一个错误:
2019-12-02 13:27:16.450749+0100 ShowMeInstances[83949:14810790] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo=NSLocalizedDescription=query cancelled
所有的小盒子都被销毁了,只有一个大的看起来还可以:
有时材料也会被破坏:(那些被破坏的洋红色盒子应该与被包围的盒子颜色相似:
在 AppDelegate 我定义:
var instancesNode: InstancesNode? = nil
发起者:
class InstancesNode: SCNNode
typealias CoordUnit = Double
var instanceGenerator: InstanceGenerator<CoordUnit>?
init(with data: Data) throws
self.instanceGenerator = try InstanceGenerator(from: data)
super.init()
for instance in instanceGenerator?.instances ?? []
let coords = instance.coordinates.map( $0.value)
let color = getMaterialDiffuseColor(for: coords)
let coords3D = convertCoordinatesTo3D(coords)
let node = Instance3D(
name: instance.instanceName,
coordinates: coords3D,
color: color)
self.addChildNode(node)
.....
现在Instance3D
由
class Instance3D: SCNNode
init (name: String, coordinates: SCNVector3, color: NSColor)
super.init()
self.name = name
let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)
let material = SCNMaterial()
material.diffuse.contents = color
material.emission.contents = color
material.lightingModel = .lambert
material.metalness.contents = 0
material.shininess = 1
box.materials = [material]
self.position = coordinates
self.geometry = box
一切都被插入到场景中
view3D.scene?.rootNode.addChildNode(instancesNode!)
在 appDelegate 中。如果没有这条线,则只能看到大盒子和灯光。
Blender 也无法导入文件,Blender 无声无息立即爆炸。
可能是什么原因?这是一个功能还是一个错误?
【问题讨论】:
能分享一下生成大小立方体的代码吗? 大立方体是通过编辑器添加的。给我几分钟。 我添加了代码并试图解释这个结构是如何创建的逻辑。 【参考方案1】:当我只生成一个Instance时,生成的盒子是OK的,可以将文件导入Blender,如果两个——只有一个是OK的,Blender会爆炸。如果我将框更改为球体 - 在 QuickLook 中可以看到一个球体
绝对是错误。
【讨论】:
【参考方案2】:我可以确认。下面的代码,一旦从 SceneKit 以 .dae 格式导出,Blender 就会崩溃(并且会导致 Meshlab 出错,并且在 Mac OS X 的 finder 预览中无法正确渲染)。
var radius = 0.0005
let s1 = SCNNode(geometry: SCNSphere(radius: CGFloat(radius)))
let s2 = SCNNode(geometry: SCNSphere(radius: CGFloat(radius)))
s1.position = SCNVector3(0,0,0)
s2.position = SCNVector3(1,0,0)
scene.rootNode.addChildNode(s1)
scene.rootNode.addChildNode(s2)
【讨论】:
以上是关于SCNView 导出的 Collada (.dae) 文件看起来不同,无法导入到 Blender的主要内容,如果未能解决你的问题,请参考以下文章
从 Collada (.dae) 文件(在 Maya 中创建)导入的 SceneKit 键控混合形状动画未播放
dae 到 gltf pbr 导出不导出纹理不是 base64
Collada .DAE 的哪些节点与游戏对象和角色使用最相关?