3 votes

RealityKit Comment créer des maillages personnalisés au moment de l'exécution ?

RealityKit a un tas de fonctionnalités utiles comme la synchronisation multiutilisateur intégrée sur un réseau pour supporter les mondes partagés, mais je ne peux pas trouver beaucoup de documentation concernant la création de maillage / objet au moment de l'exécution. RealityKit a quelques fonctions de génération de maillage de base (boîte, sphère, etc.) mais j'aimerais créer mes propres maillages procéduraux au moment de l'exécution (sommets et indices), et probablement les régénérer à chaque trame en mode de rendu immédiat.

Tout d'abord, existe-t-il un moyen de faire cela, ou RealityKit est-il trop fermé sans possibilité de faire beaucoup de rendu personnalisé ? Deuxièmement, y aurait-il une solution alternative qui pourrait me permettre d'utiliser une partie de la synchronisation de RealityKit ? Par exemple, cette partie est-elle vraiment une autre bibliothèque que je peux utiliser avec ARKit 3 ? Quel est son nom ? J'aimerais également pouvoir synchroniser des données arbitraires entre les appareils des utilisateurs, donc le système intégré serait également utile.

Je ne peux pas vraiment tester cela car je n'ai pas d'appareils qui peuvent supporter le logiciel bêta pour le moment. J'essaie de savoir si je pourrai faire ce que je veux pour mon ou mes programmes si je me procure le matériel nécessaire, mais la documentation est rare.

1voto

jlsiewert Points 2198

Pour autant que je sache RealityKit ne peut utiliser que des primitives ou usdz comme modèles. Bien que vous puissiez générer usdz en utilisant ModelIO sur le dispositif, mais ce n'est pas faisable pour votre cas d'utilisation.

La synchronisation est cependant intégrée dans ARKit bien que vous deviez faire un peu plus de travail quand vous n'utilisez pas RealityKit .

  1. Créer un MultipeerConnectivity session entre les appareils (c'est quelque chose que vous devez faire pour RealityKit également)
  2. Configurez votre ARSession et définissez isCollborationEnabled ce qui rend la sortie de votre session CollaborationData dans le session(_:didOutputCollaborationData:) le rappel du délégué.
  3. Envoyez ces données en utilisant votre MultipeerConnectivity session.
  4. Lorsque vous recevez des données d'autres utilisateurs, intégrez-les à votre session à l'aide de la fonction update(with:)

Pour envoyer des informations arbitraires entre utilisateurs, vous pouvez soit les envoyer via MultipeerConnectivity indépendamment de ARKit ou utiliser des ARAnchors Cette option est préférable lorsque vous traitez des données de position, par exemple lorsqu'un utilisateur a placé un objet à un endroit spécifique.
Au lieu d'ajouter des objets directement (en utilisant quelque chose comme scene.rootNode.addChildNode() en SceneKit vous créez une ARAnchor avec toutes les informations nécessaires pour ajouter votre modèle et l'ajouter à votre session. Ensuite, vous ajoutez l'objet dans la classe rendered(_:didAdd:forAnchor:) le rappel. Cela présente les avantages d'un meilleur suivi autour de votre objet (parce que vous avez ajouté une ancre à la position, indiquant à ARKit qu'il doit se souvenir de la position) et que vous n'avez pas besoin de faire quoi que ce soit de spécial pour les expériences multi-utilisateurs, car ARKit appelle le rendered(_:didAdd:forAnchor:) pour les ancres ajoutées manuellement et pour celles ajoutées automatiquement, par exemple lorsqu'il reçoit des données de collaboration.

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