ARKit esconde los objects detrás de las panetworkinges

¿Cómo puedo usar los planos horizontales y verticales seguidos por ARKit para ocultar objects detrás de panetworkinges / detrás de objects reales? Actualmente, los objects agregados en 3D se pueden ver a través de las panetworkinges cuando sales de una habitación y / o frente a los objects que deberían estar detrás. Entonces, ¿es posible usar los datos que ARK me ofrece para proporcionar una experiencia AR más natural sin que los objects aparezcan a través de las panetworkinges?

Tienes dos problemas aquí.

¿Cómo crear geometry de oclusión para ARKit / SceneKit?

Si configura el colorBufferWriteMask de un material colorBufferWriteMask en un valor vacío ( [] en Swift), cualquier object que use ese material no aparecerá en la vista, pero aún escribirán en el buffer z durante la representación, lo que afecta la representación de otros objects En efecto, obtendrá un "agujero" en forma de su object, a través del cual se muestra el background (la alimentación de la camera, en el caso de ARSCNView ), pero que puede ocultar otros objects de SceneKit.

También deberá asegurarse de que ocluye un renderizado ocluido antes que cualquier otro nodo que supuestamente oscurece. Puede hacer esto utilizando la jerarquía de nodos (no puedo recordar de antemano si los nodos principales se muestran antes que sus hijos o al revés, pero es bastante fácil de probar). Los nodos que son pares en la jerarquía no tienen un order determinista, pero puede forzar un order independientemente de la jerarquía con la propiedad renderingOrder . Esa propiedad tiene un valor pnetworkingeterminado a cero, por lo que configurarlo en -1 se mostrará antes de todo. (O para un control más preciso, configure el order de renderingOrder s para varios nodos en una secuencia de valores).

El proyecto de código de ejemplo en el sitio de desarrollador de ARKit lo hace: tiene una opción para hacer que los planos detectados ocluir objects virtuales. (Hay un montón de otro código en ese proyecto, por lo que puede tomar algún trabajo encontrarlo. Mira en la class Plane , IIRC.)

¿Cómo detectar panetworkinges / etc para que sepa dónde colocar la geometry de oclusión?

Lo siento, este ARKit no puede ayudar mucho. Detecta solo planos horizontales. Y una nube de puntos de aspecto aleatorio que tiene algo que ver con las características de la escena.

Es posible que pueda intentar inferir las posiciones de las panetworkinges en function de dónde la detección de plano encuentra un piso, o hacer que el usuario etiquete algunas panetworkinges con la detección de impactos contra puntos de características o alimente la image de la camera con algún otro software (¿quizás un model ML? ) que puede ayudarlo a identificar muros. Tal como está, fuera de la caja ARKit solo proporciona una ayuda fácil para hacer (una) experiencia en AR a escala de habitación, es posible hacer más, pero se necesitará más trabajo en su final.