50 votes

Comment détecter les plans verticaux dans ARKit ?

Comment est-il possible de mettre en œuvre une détection de plan vertical (c'est-à-dire pour les murs) ?

let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO

66voto

Zack Points 1127

Modifier : Cela est désormais pris en charge à partir de ARKit 1.5 (iOS 11.3). Il suffit d'utiliser .vertical. J'ai laissé le message précédent ci-dessous à des fins historiques.


TL;DR

La détection de plan vertical n'est pas (encore) une fonctionnalité existante dans ARKit. Le .horizontal suggère que cette fonctionnalité pourrait être en cours d'élaboration et pourrait être ajoutée à l'avenir. S'il s'agissait simplement d'une valeur booléenne, cela indiquerait que c'est définitif.

Confirmation

Cette suspicion a été confirmée par une conversation que j'ai eue avec un ingénieur d'Apple à la WWDC17.

Explication

On pourrait argumenter que la création d'une implementation pour cela serait difficile car il y a infiniment plus d'orientations pour un plan vertical que pour un plan horizontal, mais comme l'a dit rodamn, ce n'est probablement pas le cas.

D'après le commentaire de rodamn : À son niveau le plus simple, un plan est défini par trois points coplanaires. Vous avez un candidat de surface une fois que des caractéristiques coplanaires suffisamment détectées le long d'une surface (verticale, horizontale, ou à n'importe quel angle arbitraire). C'est juste que la normale pour les horizontaux sera le long de l'axe haut/bas, tandis que les normales pour les verticaux seront parallèles au plan au sol. Le défi est que le placoplâtre simple tend à générer peu de caractéristiques visuelles, et que les murs simples peuvent souvent ne pas être détectés. Je soupçonne fortement que c'est pourquoi la fonction .vertical n'est pas encore sortie.

Cependant, il y a un contre-argument à cela. Voir les commentaires de rickster pour plus d'informations.

0 votes

Hey @Zack, est-ce que cet ingénieur t'a donné un indice sur quand cette fonctionnalité pourrait être ajoutée ? J'espère que ce n'est pas quelque chose qu'ils retardent jusqu'à iOS 12.

0 votes

Non @T.Steele, je n'ai pas eu d'indication, mais je ne pense pas qu'ils attendraient aussi longtemps pour le mettre en œuvre. Après tout, cela ne semble pas si difficile à mettre en place.

0 votes

Je pense que vous vouliez dire "n'aurait pas l'air si difficile", mais ce que vous avez écrit est probablement plus proche de la correction. Un plan horizontal ne peut avoir qu'une seule orientation possible, mais il existe une infinité de façons pour un plan d'être "vertical"...

6voto

Jan P. Points 2224

Le support de ceci arrive avec iOS 11.3:

static var vertical: ARWorldTrackingConfiguration.PlaneDetection

La session détecte les surfaces qui sont parallèles à la gravité (peu importe l'orientation).

https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection/2867271-vertical

5voto

shri Points 642

Apple a publié iOS 11.3 qui comprendra diverses mises à jour pour la RA, notamment ARKit 1.5. Dans cette mise à jour, ARKit inclut la capacité pour ARKit de reconnaître et placer des objets virtuels sur des surfaces verticales comme un mur ou une porte.

Le support pour la verticale est désormais pris en charge dans ARWorldTrackingConfiguration

let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configuration)

2voto

Mike M Points 932

Comme l'iPhone X est équipé d'une caméra de profondeur frontale, je soupçonne qu'une caméra arrière sera présente sur la prochaine version et peut-être que la fonctionnalité .vertical sera déléguée d'ici là.

1voto

Sunny Chow Points 110

J'ai fait cela avec Unity, mais j'ai besoin de faire mes mathématiques.

J'utilise un échantillonnage aléatoire consensuel pour détecter un plan vertical à partir du nuage de points retourné par ARkit. C'est comme avoir une boucle qui choisit aléatoirement 3 points pour créer un plan et compte les points qui correspondent, pour voir quelle tentative est la meilleure.

Cela fonctionne. Mais parce que ARkit ne peut pas retourner beaucoup de points lorsque le mur est d'une couleur unie. Donc, cela ne fonctionne pas dans de nombreuses situations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X