0

AR 描画アプリを開発していますが、AR Kit 3 でバグ/問題が発生しました。ワールド トラッキングが機能しなくなり、AR ビューに追加された 3D オブジェクトがフリーズします。

私のアプリは、フロント カメラとバック カメラを切り替えます。どちらの場合も、ワールド トラッキングを有効にしています。

1. バックカメラ セッションを次のように有効にします。

let configuration = ARWorldTrackingConfiguration()
configuration.isLightEstimationEnabled = true
configuration.planeDetection = [.horizontal, .vertical]
if #available(iOS 13.0, *) {
    configuration.frameSemantics = [.personSegmentationWithDepth]
}
sceneView.session.run(configuration)

シーン セッションでこの構成を実行するだけで、すべてが完璧に機能します。

2.次のようにフロントカメラに切り替えると:

let configuration = ARFaceTrackingConfiguration()
if #available(iOS 13.0, *) {
    configuration.isWorldTrackingEnabled = true
}
configuration.isLightEstimationEnabled = true
if #available(iOS 13.0, *) {
    configuration.frameSemantics = [.personSegmentation]
}
sceneView.session.run(configuration)

すべてがまだ完璧に機能しています。

3.しかし、カメラセッションに戻ると(ポイント1のように戻ります):

AR シーンに追加された 3D オブジェクトが静的ビューでフリーズし、ワールド トラックが機能しなくなります。また、元に戻す方法はありませんが、アプリを閉じて再度開く必要があります。

面白いこと:

  • パーツを無効にするとconfiguration.isWorldTrackingEnabled = true 。バグは表示されません。しかし、私は configuration.isWorldTrackingEnabled = true設定が必要です。
  • フロントカメラのセッションが中断されることはありません。バグが発生した後でも、フロントカメラに切り替えると、ワールドトラッキングがうまく機能します。

アプリのビデオ (バグは表示されません) は次のconfiguration.isWorldTrackingEnabled =falseとおりです。

バグ動画なし- https://www.youtube.com/watch?v=JPAa6zJe_kQ

そして、これがアプリのビデオ(バグが表示されます)ですconfiguration.isWorldTrackingEnabled =true

はいバグビデオ- https://www.youtube.com/watch?v=UF2Z8c4A42I

私はすでに何を試しましたか?

  • 最初にフロントカメラでアプリを実行して、バックカメラに変更したときにも壊れるかどうかを確認しました。そして、はい、それも壊れます。
  • ARFaceTrackingConfiguration()withを実行configuration.isWorldTrackingEnabled = trueしてから、もう一度 withconfiguration.isWorldTrackingEnabled = falseを実行して、何かをオーバーライドして修正するかどうかを確認しました。しかし、ロックはなく、まだ壊れています。
  • また、セッションを一時停止してから、カメラの切り替え間で再度有効にしようとしましたが、まだバグがあります. 遅れても。
  • また、次のような設定で構成を実行しようとしましたsceneView.session.run(configuration,options: [.resetTracking,.removeExistingAnchors,.stopTrackedRaycasts])が、まだ運がありません。

誰でもそれを修正する方法について考えがありますか? 誰もがこの奇妙な行動に遭遇しましたか?

4

1 に答える 1

0

従来のカメラ セッションのように、フロント カメラとリア カメラ (この場合は ARWorldTrackingConfiguration と ARFaceTrackingConfiguration) を切り替えることはできないと思います。これを行うたびに、ARKit は追加されたすべてのオブジェクトとアンカーをリセットします。

Apple の「 Combining User Face-Tracking and World Tracking 」サンプル プロジェクトを調べることをお勧めします。これには、背面カメラで顔追跡を使用する方法の詳細が含まれています。これは、顔を追跡する必要があるだけで、実際に正面向きのカメラを表示する必要がないことを前提としていますが、これは賢明ではないかもしれません.

仮説としては、ARKit セッションに独自の Metal レンダラーを使用することを検討できます。これにより、AVFoundation を利用してカメラの手動制御 (およびカメラの切り替え) を行うことができますが、オブジェクトの 3D 配置を決定し、それらをレンダリングする責任があります。画面上/3D 空間内。

userFaceTrackingEnabledさらに、を構成するときに true に設定してみる価値があるかもしれませんARWorldTrackingConfiguration

要するに、あなたが思っているようにカメラを実際に切り替えているのではなく、たまたま異なるカメラを使用する構成を切り替えているのです。iOS/iPadOS 13 では、ワールド トラッキング構成にフェイス トラッキングを実装し、フェイス トラッキング構成にワールド トラッキングを実装する機能が追加されましたが、両方のカメラを同時にアクティブに実行する目的で、これらのカメラの 1 つのカメラ プレビューのみを表示します。セッション中にユーザーに (その後、ピープル オクルージョンは ARFaceTrackingConfiguration で実際には何もしません。リア カメラでのみ機能します。同様の効果を実行するには、AVDepthData を使用する必要があります)。

于 2020-02-24T04:24:08.320 に答える