如何通过Reality Kit获取USDZ Entity的metersPerUnit元数据?
获取USDZ的metersPerUnit元数据(RealityKit/MDLAsset)
当然可以获取这个元数据,两种常用路径:
从MDLAsset直接读取
如果已经将USDZ加载为MDLAsset,可以直接通过unitScale属性拿到对应的值——这个属性和USDZ里的metersPerUnit完全对应(比如你遇到的0.01会直接返回)。
代码示例:
guard let asset = MDLAsset(url: yourUSDZURL) else { return } let metersPerUnit = asset.unitScale
如果unitScale无法满足需求,还可以尝试直接读取USD的元数据属性:
if let metersPerUnitProp = asset.property(with: "metersPerUnit"), let metersPerUnit = metersPerUnitProp.floatValue { // 使用metersPerUnit }
从RealityKit Entity追溯获取
如果已经加载成Entity(通常是ModelEntity),可以从它的模型资源关联到底层的MDLMesh,再拿到对应的MDLAsset,进而获取metersPerUnit:
代码示例:
guard let modelEntity = loadedEntity as? ModelEntity, let mdlMesh = modelEntity.model?.mesh as? MDLMesh, let asset = mdlMesh.asset else { return } let metersPerUnit = asset.unitScale
拿到metersPerUnit后,你可以把visualBounds返回的尺寸乘以这个值,转换成统一的米单位,这样不同单位的实体边界就具备可比性了。
内容的提问来源于stack exchange,提问作者Marcus Raty
相关产品推荐
相关产品推荐

