Exemple de Salles et de Portails

Téléchargez ce projet tutoriel : Exemple Simple de Portails .

Introduction

Ce tutoriel vous initiera à la construction d'un système de salle "Hello World" avec deux salles, et un portail entre les deux.

Étape 1

../../../_images/tutorial_simple_1.png
  • Créer un nouveau projet.

  • Ajoutez un Spatial comme racine de la scène (sur la capture d'écran, il est nommé "Root").

  • Ajoutez ensuite un nœud RoomManager. Nous en aurons besoin plus tard pour gérer le système de salles.

  • Ensuite, nous devons commencer à définir nos salles. Nous créons toutes nos salles sous un autre Spatial que nous avons appelé 'RoomList'.

  • Ajoutez un nouveau nœud Room comme enfant de la RoomList.

  • Nous avons nommé la salle Kitchen (Cuisine).

  • Nous allons maintenant créer la géométrie de notre salle. Vous pouvez donner les noms que vous souhaitez à la géométrie.

  • Créez un MeshInstance pour le sol. Créez une boîte en ajoutant une ressource CubeMesh au MeshInstance. Changez sa taille et sa position pour former un sol.

  • Créez des MeshInstances pour les murs. Créez plus d'autres CubeMesh pour ça, puis changer leur taille et leur position. Assurez-vous de laisser une ouverture sur un côté. Vous devrez créer deux segments de mur pour le faire sur ce côté.

Étape 2

../../../_images/tutorial_simple_2.png
  • Maintenant, nous devons créer l'autre pièce.

  • Vous pouvez le faire simplement en dupliquant la première salle (sélectionnez le nœud Kitchen, faîtes un clic droit et choisissez Dupliquer).

  • Faîtes pivoter et positionnez la deuxième salle pour que les ouvertures soient alignées.

  • Renommez la deuxième salle en Lounge (Salon).

Étape 3

../../../_images/tutorial_simple_3.png
  • Ensuite, nous ajouterons un portail entre les deux salles.

  • Créez un nouveau Portal dans la cuisine.

  • Changer la taille et la position du portail en utilisant le nœud Transform dans l'inspecteur, pour qu'il s'insère correctement dans l'ouverture entre les deux salles.

  • Le plan du portail doit être orienté vers l'extérieur de la salle source, c'est-à-dire vers le salon. Cette direction est indiquée par la flèche dans le gadget de l'éditeur, et avec la couleur du gadget du portail.

Étape 4

../../../_images/tutorial_simple_4.png
  • Pour rendre les choses plus excitantes, nous voulons ajouter quelques boîtes supplémentaires aux salles.

  • Le fait de placer ces boîtes comme enfants ou petits-enfants des nœuds de salles indique explicitement au système dans quelle salle les objets doivent se trouver. Cependant, nous pouvons également créer ces objets en dehors des salles. Tant qu'ils sont dans une branche RoomList, le système essaiera automatiquement de les placer dans la bonne salle au moment de l'exécution.

  • Sur la capture d'écran, les boîtes ont été placées comme enfants d'un Spatial que j'ai appelé Freeform pour garder les choses bien rangées.

  • Les boîtes ont également un SpatialMaterial vert qui leur est attribué pour qu'elles se distinguent davantage du reste de la salle.

  • Créons égalemant une OmniLight pour qu'elle soit placée automatiquement dans l'une des pièces.

Étape 5

../../../_images/tutorial_simple_5.png
  • Vient ensuite une étape cruciale. Nous devons dire au RoomManager où sont les salles !

  • Sélectionnez le RoomManager et regardez la section Paths dans la fenêtre de l'inspecteur.

  • Vous devez assigner la propriété Room List pour qu'elle pointe vers le nœud RoomList que nous avons créé précédemment (qui est le parent de toutes les salles).

Étape 6

../../../_images/tutorial_simple_6.png
  • Assurez-vous d'avoir sauvegardé votre projet avant de passer à l'étape suivante. C'est toujours une bonne idée d'enregistrer et de faire une backup avant de convertir.

  • Sélectionnez le RoomManager, et vous verrez un bouton appelé Convertir les salles dans la barre d'outils en haut de la fenêtre de l'éditeur 3D. Appuyez sur ce bouton.

  • Si tout se passe bien le RoomManager aura créé les données pour l'exécution (le graphe de salles) pour effectuer l'occlusion culling pendant l'exécution.

  • Vous pouvez voir un log du processus de conversion dans la fenêtre de sortie. C'est utile pour trouver les problèmes.

  • Si vous déplacez maintenant la caméra de l'éditeur à l'intérieur des salles, vous devriez voir les modèles de la salle opposée être affectés par le culling en fonction de ce que vous pouvez voir à travers le portail.

Conclusion

Ceci conclut ce simple tutoriel. N'ayez pas peur d'expérimenter avec le nouveau système de salles que vous avez créé.

Quelques trucs à essayer

  • Créez différents types de géométrie. Les nœuds CSG, les systèmes de particules, et les Multimeshes sont pris en charge par le système de portail.

  • Essayez de créer une Caméra et de l'ajouter à la scène. Si vous lancez la scène, vous remarquerez que le culling du portail n'est pas actif. C'est parce que le graphe de salles doit être créé à chaque fois que vous chargez un niveau, en convertissant les salles. Plutôt que d'utiliser un bouton dans l'éditeur, dans les vrais jeux, vous appelez une fonction dans le RoomManager pour convertir le niveau, appelée rooms_convert(). Essayez-la avec un script, peut-être en l'exécutant à l'intérieur d'une fonction _ready().

  • La géométrie que vous avez créé jusqu'à présent est toujours STATIC (non mobile). Si vous regardez dans l'inspecteur des nœuds de géométrie, vous verrez qu'ils dérivent de CullInstance. Ici vous pouvez définir le Portal Mode pour les objets du système de portail. Cela détermine la façon dont le nœud est traité.

  • Si vous écrivez maintenant un script pour déplacer un de vos objets dans une salle et que vous le visualisez à travers une Caméra pendant que la scène s'exécute, vous pouvez remarquer que l'objet est affecté par le culling de manière incorrecte. C'est parce que les objets STATIC ne sont pas supposés bouger dans le système. Si vous changez plutôt l'objet en DYNAMIC, le culling devrait maintenant se mettre à jour correctement.

  • Il existe plusieurs portal_modes, ils sont décrits dans la documentation principale.

  • Essayez d'activer et de désactiver le portail au moment de l'exécution à partir d'un script. Vous pouvez appeler set_portal_active() pour ouvrir et fermer le portail.

  • Si vous sélectionnez le portail, vous devriez voir 4 poignées apparaître. Essayez de déplacer les points du portail avec la souris, et de voir comment ça affecte les objets qui sont affectés par le culling.

  • Si vous sélectionnez une salle et que vous cliquez sur le bouton Générer des points dans la barre d'outils, il stockera les points de l'enveloppe de la salle dans l'inspecteur de la salle. Vous pouvez maintenant les modifier avec les poignées du gadget.