ARKit cache des objects derrière les murs

Comment puis-je utiliser les plans horizontaux et verticaux suivis par ARKit pour cacher des objects derrière des murs / derrière des objects réels? Actuellement, les objects 3D ajoutés peuvent être vus à travers les murs lorsque vous quittez une pièce et / ou devant des objects qu'ils devraient être derrière. Alors est-il possible d'utiliser datatables que ARKit me donne pour fournir une expérience AR plus naturelle sans que les objects n'apparaissent à travers les murs?

    Vous avez deux problèmes ici.

    Comment créer une geometry d'occlusion pour ARKit / SceneKit?

    Si vous définissez un atsortingbut colorBufferWriteMask d'un matériau colorBufferWriteMask sur une valeur vide ( [] dans Swift), les objects utilisant ce matériau n'apparaîtront pas dans la vue, mais ils écriront toujours dans le tampon z pendant le rendu, ce qui affecte le rendu de d'autres objects. En effet, vous aurez un "trou" en forme de votre object, à travers lequel l'arrière-plan montre (le stream de la camera, dans le cas de ARSCNView ), mais qui peut encore obscurcir d'autres objects SceneKit.

    Vous devrez également vous assurer qu'un rendu occlus est devant tous les autres nœuds qu'il est censé masquer. Vous pouvez le faire en utilisant la hiérarchie des nœuds (je ne me souviens pas si les nœuds parents sont rendus avant leurs enfants ou l'inverse, mais c'est assez facile à tester). Les nœuds qui sont des pairs dans la hiérarchie n'ont pas d'ordre déterministe, mais vous pouvez forcer un ordre indépendamment de la hiérarchie avec la propriété renderingOrder . Cette propriété est définie par défaut sur zéro, donc la valeur -1 sera rendue avant tout. (Ou pour un contrôle plus fin, définissez le paramètre renderingOrder pour plusieurs nœuds sur une séquence de valeurs.)

    L'exemple de projet de code sur le site de développement ARKit le fait – il a une option pour rendre les plans détectés occlure les objects virtuels. (Il y a beaucoup d'autres codes dans ce projet, donc ça peut prendre un peu de time pour le find. Regardez dans la class Plane , IIRC.)

    Comment détecter les murs / etc pour savoir où placer la geometry d'occlusion?

    Désolé, celui-ci ARKit ne peut pas aider avec beaucoup. Il détecte uniquement les plans horizontaux. Et un nuage de points random qui a quelque chose à voir avec les caractéristiques de la scène.

    Vous pouvez essayer d'inférer les positions des murs en fonction de l'endroit où la détection de plan trouve un étage ou requestr à l'user d'étiqueter certains murs à l'aide de la fonction de détection des points de fonctionnalité ou d'alimenter l'image de la camera. ) qui peut vous aider à identifier les murs. Dans l'état actuel des choses, ARKit ne fournit vraiment qu'une aide simple pour réaliser des expériences AR (à une échelle) à l'échelle de la pièce – plus il est possible, mais cela requestra plus de travail de votre part.