我在我的 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 ?