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?

0 ответов

Другие вопросы по тегам