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 с настраиваемой моделью, потому что на данный момент у меня нет поддерживаемого устройства. Пожалуйста, протестируйте его и напишите об опыте использования мокапов.