2

我在我的 iPad 应用程序中加载模型作为 MDLAsset 以使用 RealityKit 查看它们。由于我需要更改模型的纹理,因此我目前只需在 RealityKit 中的 ModelEntity 上应用 SimpleMaterial。这很好用,但是因为没有优雅的方法可以将 RealityKit 对象导出为例如 usd 文件。所以我需要将我的更改持久化到 MDLAsset,然后可以轻松导出。

我设法持续更改 MDLAsset 的变换,但没有以任何方式更改材料。

当然,总会有使用 SceneKit 的解决方法,这使得操作模型并将其导出到 MDLAsset 变得容易。但我希望有更直接的方法。

我现在在做什么?

let modelAsset = MDLAsset(url: modelUrl)

guard let modelMesh = modelAsset.object(at: 0) as? MDLMesh else {
  return
}

modelMesh.transform = some MDLTransform

// change material here

try! modelAsset.export(to: exportUrl)

我尝试了许多不同的方法,但大多数归结为:

let objectMaterial = SCNMaterial()
objectMaterial.diffuse.contents = modelColor
let modelMaterial = MDLMaterial.init(scnMaterial: objectMaterial)

for subMesh in modelMesh.submeshes as! [MDLSubmesh] {
  subMesh.material = modelMaterial
}

我还尝试操作现有 subMesh 材质的 MDLMaterialProperties,但似乎材质以某种方式被写保护,至少我没有设法改变它的 baseColor 语义。

那么有没有直接的方法将材质应用到 MDLAsset / MDLMesh / MDLSubmesh ?

4

0 回答 0