web-dev-qa-db-ja.com

ARKit 3.0 –モーションキャプチャRealityKitでのロボットキャラクターの複製

Apple)で提供されるロボットのような3Dモデルを作成しようとしています。これは、モーションキャプチャARKit 3.0でAppleから提供されたロボットキャラクターを置き換えることで私を模倣できます。

望ましい解決策:

  • Apple robot.usdzファイルの作成に使用される特別なソフトウェアはありますか?ある場合は、その詳細を提供してください。

  • AppleのPythonベースのツールを使用して、.glb/.gltf/.obj/.daeファイルなどの形式をどのように.usdzに変換できますか?シーングラフに影響を与えることなく?

  • Xcodeで.usdzファイルのシーングラフを編集して、変更を.usdzファイルに正常に保存するにはどうすればよいですか?

9
Ameer Hamza

まだテストしていません

次のソリューションを試して、ARKitのMoCapで使用する骨格メッシュを準備します。

  • Autodesk Maya 2020でキャラクターを作成する
  • スケルトンを作成し、各ジョイントに軸を向ける
  • SkinBind Skinを使用してメッシュにスケルトンを追加する
  • アウトライナでスケルトンとメッシュを選択し、FileGame Exporterを使用します
  • ファイルタイプを選択:Binaryおよびバージョン:FBX 2020を押してSaveを押します

次に sdz Tools for Xcode 11 および FBX Python SDK をダウンロードします。

これが私のpostで、macOS Catalinaで.zshrcファイルを作成する方法を説明しています。

その.zshrcファイルに次の行を追加(および保存)します。

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

enter image description here

これで、お気に入りのコマンドを使用して.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]
            }
        }
    }
}

P.S。率直に言って、カスタムリギングモデルでARBodyTrackingConfigurationをテストしていません。現在、サポートされているデバイスがないためです。テストして、モーションキャプチャの経験について書いてください。

1
Andy Fedoroff