サンプルコード
Occluding Virtual Content with People
(人により仮想コンテンツを隠す)
アプリの仮想コンテンツを、ARKit がカメラフィードで認識する人々でカバーします。
概観
デフォルトでは、仮想コンテンツはカメラフィード内のすべてをカバーします。たとえば、人が仮想オブジェクトの前を通過すると、オブジェクトは人の上に描画され、AR 体験の錯覚を壊す可能性があります。
ARKit がカメラフィードで認識する人で、アプリの仮想コンテンツをカバーするには、人で隠すこと を有効にします。そうすると、あなたのアプリは、カメラの前を通過する人の後に仮想オブジェクトをレンダリングできます。ARKit は、カメラフィード内で人がいる領域を識別し、仮想コンテンツがその領域のピクセルに描画されないようにすることで、隠すことを実現します。
このサンプルは、RealityKit を使用してグラフィックをレンダリングしますが、同じ手順に従って、SceneKit で人で隠すことを使用できます。Metal アプリで人が隠すことを有効にするには、カスタムレンダリングで人が隠すことを有効にする (Effecting People Occlusion in Custom Renderers) を参照してください。
人で隠れる事に対するデバイスのサポートを確認
人で隠れる事は、Apple A12 以降のデバイスでサポートされています。人で隠れる事を有効にする前に、ユーザのデバイスがそれをサポートしていることを確認してください。
guard ARWorldTrackingConfiguration.supportsFrameSemantics
(.personSegmentationWithDepth) else {
}
注意
あなたのデバイスが人で隠れる事をサポートしていない場合、サンプルは停止します。ただし、ユーザのデバイスが人で隠れる事をサポートしていない場合は、それなしで AR 体験を継続できます。
人で隠れることを有効に
ユーザのデバイスが人で隠れることをサポートしている場合は、公正のフレームの意味に personSegmentationWithDepth (personSegmentationWithDepth)オプションを追加して有効にします。
config.frameSemantics.insert(.personSegmentationWithDepth)
セッションの configuration (configuration)を変更するときはいつでも、セッションに戻って構成を変更してください。
arView.session.run(config)
personSegmentationWithDepth オプションは、人物が仮想オブジェクトよりもカメラに近い場合にのみ、人物が仮想オブジェクトを隠すことを指定します。
または、personSegmentation (personSegmentation) フレームの意味を使用すると、深度に関係なく、ARKit がカメラフィードで認識するすべての人で仮想コンテンツを常に隠すことができます。この手法は、たとえば、グリーンスクリーンのシナリオで役立ちます。
人で隠すことをを無効に
たとえば、シーンに仮想コンテンツが存在しない場合、またはデバイスが重大または危機的な thermalState (thermalState) に達した場合 (ProcessInfo.ThermalState (ProcessInfo.ThermalState) を参照)、パフォーマンス上の理由で人で隠すことを無効にすることを選択できます。人で隠すことを一時的に無効にするには、あなたのアプリの frameSemantics (frameSemantics) からそのオプションを削除します。
config.frameSemantics.remove(.personSegmentationWithDepth)
次に、セッションを再実行して構成を変更します。
arView.session.run(config)
以下も見よ
隠す
{}Effecting People Occlusion in Custom Renderers
(カスタムレンダリングで人が隠すことへの影響)
マットジェネレータを使用して、ARKit がカメラフィード内の人物を認識するあなたのアプリの仮想コンテンツを隠します。
{}Visualizing and Interacting with a Reconstructed Scene
(再構築されたシーンの視覚化と操作)
ポリゴンメッシュを使用して、実環境の形状を推定します。
class ARMatteGenerator
あなたのアプリの仮想コンテンツを人で隠すために使用するマットテクスチャを作成するオブジェクト。ARKit はカメラフィードでそれを認識します。