ARKit 3.0 - репликация персонажа робота в Motion Capture RealityKit

Я пытаюсь создать 3D-модель, такую ​​как робот, предоставленный Apple, в примере захвата движения (показан на WWDC 2019), который может имитировать меня в захвате движения ARKit 3.0, заменив персонажа робота, предоставленного Apple.

Желаемое решение:

  • Есть ли какое-то специальное программное обеспечение, которое Apple использовала для создания robot.usdzфайл? Если да, то опишите подробнее?

  • Как мы можем конвертировать такие форматы, как .glb/.gltf/.obj/.dae файл в .usdz использовать инструмент Apple на основе Python, не затрагивая его граф сцены?

  • Как мы можем отредактировать граф сцены .usdz файл в Xcode и успешно сохранить изменения в файле.usdz?

1 ответ

Еще не тестировал.

Попробуйте следующее решение, чтобы подготовить скелетную сетку для использования в MoCap ARKit:

  • Создайте персонажа в Autodesk Maya 2020
  • Создайте каркас, затем сориентируйте оси для каждого сустава
  • Добавьте скелет в сетку, используя Skin-Bind Skin
  • Выберите скелет и сетку в Outliner и используйте File-Game Exporter
  • Выберите тип файла: Binary и версия: FBX 2020 и нажмите Save

Затем загрузите инструменты usdz для Xcode 11 и FBX Python SDK.

Вот мой пост, где вы найдете инструкции, как создать.zshrc файл в macOS Catalina.

Добавьте к этому .zshrc заполните следующую строку (и сохраните ее):

export PYTHONPATH="/Applications/Autodesk/FBXPythonSDK/2020.0.1/lib/Python27_ub:$PYTHONPATH"


Теперь вы можете конвертировать .fbx файл в .usdzформатирование с помощью нашей любимой команды:

usdzconvert ~/Desktop/character.fbx

И протестируем модель в мокапе:

import RealityKit
import ARKit

class ViewController: UIViewController, ARSessionDelegate {

    @IBOutlet var arView: ARView!
    
    var character: Entity?
    let characterAnchor = AnchorEntity()
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        arView.session.delegate = self

        guard ARBodyTrackingConfiguration.isSupported
        else { fatalError("MoCap is available on A12 & later") }
        
        let config = ARBodyTrackingConfiguration()
        arView.session.run(config)
        arView.scene.addAnchor(characterAnchor)
        
        character = try? Entity.load(named: "character")
    }
    
    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
        
        for anchor in anchors {
            
            guard let bodyAnchor = anchor as? ARBodyAnchor
            else { continue }

            let bodyPosition = simd_make_float3(bodyAnchor.transform.columns.3)
            characterAnchor.position = bodyPosition
            characterAnchor.orientation = Transform(matrix: bodyAnchor.transform).rotation

            if let character = character, character.parent == nil {

                characterAnchor.addChild(character)
                characterAnchor.scale = [0.02, 0.02, 0.02]
            }
        }
    }
}

PS Честно говоря, я не тестировал ARBodyTrackingConfiguration с настраиваемой моделью, потому что на данный момент у меня нет поддерживаемого устройства. Пожалуйста, протестируйте его и напишите об опыте использования мокапов.

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