Blender导出USDZ模型在RealityKit面部锚定异常及警告解决
问题描述
- 操作流程:Blender创建面部模型 → 导出为.obj格式 → 通过RealityConverter转成.usdz → 导入Xcode项目
- 使用代码:
let cat = try! Entity.loadAnchor(named: "alienCat") uiView.scene.addAnchor(cat)
- 异常情况:
- 用Reality Composer创建的简单模型能正常锚定在面部,但自定义模型位置异常:相机正对脸时看不到模型,旋转手机后能看到放大的模型悬浮在头部上方
- Xcode控制台弹出警告:
Warning: in AppendProperty at line 858 of sdf/path.cpp -- Can only append a property 'preliminary:anchoring:type' to a prim path (/) Warning: in AppendProperty at line 858 of sdf/path.cpp -- Can only append a property 'triggers' to a prim path (/)
解决步骤
一、Blender端模型预处理
- 重置模型变换:选中模型,按
Ctrl+A选择「应用全部变换」(包含位置、旋转、缩放),确保模型原点在世界坐标原点,缩放值为(1,1,1)。未应用的变换会直接导致导出的模型尺寸、位置偏移。 - 适配真实尺寸:Blender默认单位是米,ARKit面部锚定的坐标系以面部中心为原点,模型要贴合真实人脸大小(比如人脸宽度大概0.15-0.2米)。选中模型按
S缩放至合适大小,之后再次应用缩放变换。 - 对齐原点到面部中心:如果模型是面具这类面部装饰,把模型原点移到和ARKit面部锚定原点匹配的位置。进入编辑模式选中面部中心的顶点,按
Shift+S选「游标移至选中项」,回到对象模式按Ctrl+Shift+Alt+C选「原点到游标」。 - 正确导出.obj:导出时勾选「应用变换」,避免导出未生效的缩放/旋转;设置「坐标轴向前」为
-Z向前(Blender的Z轴向上,ARKit的Z轴向前,匹配坐标系)。
二、RealityConverter调整锚定属性
- 把转好的.usdz文件导入RealityConverter,选中根实体,在右侧属性面板找到「锚定」选项,设置锚定类型为「面部」。这一步会给模型添加正确的面部锚定元数据,直接消除控制台的警告。
- 在预览界面微调模型的位置和缩放,确保模型能贴合面部区域。
三、Xcode代码优化
- 不要直接加载锚定实体,改为手动创建面部锚定再挂载模型,可控性更强:
// 加载模型实体而非锚定 guard let catModel = try? Entity.load(named: "alienCat") else { return } // 创建面部锚定 let faceAnchor = FaceAnchor() // 将模型添加到面部锚定的子节点 faceAnchor.addChild(catModel) // 添加到场景 uiView.scene.addAnchor(faceAnchor)
- 如果模型尺寸还是不对,手动调整缩放值:
catModel.scale = SIMD3<Float>(0.1, 0.1, 0.1) // 根据实际效果调整数值
警告消除说明
控制台的警告是因为.usdz文件的锚定属性没正确附加到根实体。通过RealityConverter给根实体设置面部锚定类型,再配合Blender端的变换重置,就能彻底消除这些警告。
内容的提问来源于stack exchange,提问作者Alan Scarpa
相关产品推荐
相关产品推荐

