ModelIO: изменить материал MDLAsset / MDLMesh / MDLSubmesh
Я загружаю модели в свое приложение для iPad как MDLAsset, чтобы просматривать их с помощью RealityKit. Поскольку мне нужно изменить текстуру моделей, сейчас я просто применяю SimpleMaterial к ModelEntity в RealityKit. Это прекрасно работает, но нет элегантного способа экспортировать объект 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
}
Я также пытался манипулировать MDLMaterialProperties существующего материала subMesh, но, похоже, материал каким-то образом защищен от записи, по крайней мере, мне не удалось изменить его семантику baseColor.
Итак, есть ли прямой способ применить материал к MDLAsset/MDLMesh/MDLSubmesh?