SceneKit:如何控制导入资产的大小,一个 DAE 文件创建巨大的 SCNNode 而另一个是“正常”

Posted

技术标签:

【中文标题】SceneKit:如何控制导入资产的大小,一个 DAE 文件创建巨大的 SCNNode 而另一个是“正常”【英文标题】:SceneKit: how to control size of imported assets, one DAE file creates SCNNode of huge size while another is "normal" 【发布时间】:2017-01-14 11:26:36 【问题描述】:

一位设计师提供了在Cinema 4D 中创建的attached two DAE files。

这两种资产在 Cinema 4D 中的大小相当。两个 DAE 文件都是使用相同的导出过程生成的。

但是,将 DAE 文件导入 SceneKit 场景会产生不同的结果。

Chango.dae 以“正常”大小导入,边界框约为 3x4x3。

Tiki.dae 以巨大的尺寸导入,边界框约为 155x325x140。它在 C4D 中的尺寸约为 122x283x142。

问题:

1) 你如何确保资产“适合”到 SceneKit 场景中?您是应该使用 SCNNode 的“缩放”属性来缩小资产,还是应该要求设计人员制作一定大小的资产?在SpriteKitUIKit 中,这很简单。资产大小与其屏幕大小直接相关(例如,20x20 图标会占用多少屏幕空间,具体取决于分辨率)。但是,SceneKit 的类比是什么?如果您希望资产适合 1x1x1 SCNNode,您要求设计师制作多大尺寸的资产?

2) 如果你的资源对于一个场景来说太大了,你如何缩小它?例如,在UIKit 中,您可以缩放图像以适应UIViewScaleAspectFit 之类的内容。 SCNNode 似乎没有类似物。使用 SCNNode 的 scale 属性会更改外观,但不会更改资源的边界框。甚至改变外观也不精确。例如,对于 Tiki.dae,资产的原始高度(如边界框所示)为 324.36。但是,如果将 Y 比例设置为 0.01,则高度不会变为 ~3.24。它变得小于 3,您可以通过将其舒适地安装在高度为 3(半径为 1.5)的球体中来证明这一点。

【问题讨论】:

【参考方案1】:

如果您打开 Collada 文件,您会发现在一种情况下距离以米为单位:

昌哥大

<unit name="meter"/>

在另一种情况下,它们以厘米表示:

Tiki.dae

<unit meter="0.01" name="centimeter"/>

所以1 的值表示一个文件中的 1m 和另一个文件中的 1cm。 这是一个资产问题,您可能可以在 Cinema 4D 中修复,或者通过手动编辑 Collada 文件。您还可以使用convertUnitsToMeters 选项在加载时转换单位。

【讨论】:

非常感谢!您是否有机会帮助回答有关垂直居中缩放节点的问题?缩放节点的边界框永远不会改变,并且使用缩放高度不起作用。如果没有准确的高度,如何在其父节点中居中缩放节点?详情:***.com/questions/39133619/….

以上是关于SceneKit:如何控制导入资产的大小,一个 DAE 文件创建巨大的 SCNNode 而另一个是“正常”的主要内容,如果未能解决你的问题,请参考以下文章

如何将复杂的 .dae 模型导入到 SceneKit?

在 SceneKit 中,如何在不同大小的对象上平铺纹理,同时保持最小的绘制调用?

SceneKit - 如何获取 .dae 模型的动画?

如何为 ARKit 将 dae 导入 SceneKit

如何访问从 Firebase 下载的 SceneKit 文件?

导入到 SceneKit 时导出的 Blender 模型“面对”错误