Édition des Salles et Portails

Exemple de SceneTree

En rassemblant toutes ces idées, voici un exemple d'arbre de scènes :

../../../_images/example_scenetree.png
  • Nous avons utilisé un RoomGroup pour désigner une zone extérieure.

  • Les MeshInstances à l'intérieur des Rooms sont soit STATIC, soit DYNAMIC.

  • Nous avons créé un Spatial (J'ai décidé de l'appeler 'Freeform', mais vous pouvez utiliser n'importe quel nom) sous lequel placer les objets STATIC et DYNAMIC qui seront placés automatiquement dans les salles (Freeform est à l'intérieur de RoomList, mais pas à l'intérieur d'une salle.)

  • Le joueur et les monstres sont sur des branches EN DEHORS de la RoomList.

  • Les modèles du joueur et des monstres ont le mode portail ROAMING afin qu'ils puissent être dans n'importe quelle salle.

  • La caméra est en dehors de la RoomList.

Création de systèmes de salles dans Blender (ou un autre outil de modélisation)

Bien que vous puissiez créer votre système de salles entièrement dans l'éditeur, vous pouvez également construire les salles et les portails depuis votre outil de modélisation. Il y a un petit hic : les outils de modélisation comme Blender n'ont pas connaissance des nœuds Room, RoomGroup et Portal. Afin de contourner ce problème nous utilisons des conventions de nommage. La première fois que Godot rencontrera ces nœuds spécialement nommés, il les convertira en Rooms, RoomGroups et Portals.

Convention Postfix

  • -room devient une Room.

  • -roomgroup devient un RoomGroup.

  • -portal devient un Portal.

  • -bound devient un lien manuel.

Les Rooms et les RoomGroups doivent être créés comme Empties dans Blender. Tous les maillages (mesh) enfants de l'Empty -room seront donc placés dans la Room pendant la conversion dans Godot.

Par exemple :

  • kitchen-room - crée une Room appelée "kitchen".

  • outside-roomgroup - crée un RoomGroup appelé "outside".

  • kitchen-portal - crée un Portal menant à la Room "kitchen".

Portals

Les Portals sont différents des Rooms. Dans les Portals, nous devons spécifier la géométrie du Portal dans notre outil de modélisation, en plus du nom. Pour ce faire, votre "futur portail" doit être créé en tant que Mesh.

Les modèles de portails ont quelques restrictions pour fonctionner correctement. Ils doivent être convexes, et les points des polygones doivent être dans le même plan. La précision du plan n'a pas besoin d'être exacte, Godot calculera automatiquement une moyenne pour la direction du plan du portail. Une fois converti en nœud Portal<class_Portal, la magnétisation au plan du portail est appliquée, et les sommets sont spécifiés (et modifiables) en tant que coordonnées 2D dans l'inspecteur, plutôt que des points 3D.

Le nommage du portail est plutôt important. Vous pouvez soit nommer le portail -portal, dans ce cas Godot tentera de lier automatiquement le Portal, ou alors vous pouvez utiliser le nom de la Room que vous souhaitez lier au Portal comme préfixe.

Wildcard

Dans la plupart des cas, cela peut être fait en utilisant un nom comme kitchen-portal. Cependant, il y a un problème. Blender et Godot ne gèrent pas bien le fait d'avoir plusieurs objets avec le même nom. Que se passera-t-il quand nous voudrons avoir plusieurs Portals qui mènent à la cuisine ?

Vous pouvez contourner ce problème en utilisant un caractère générique, *. Quand Godot lit ce caractère, il ignore tout ce qui est placé après dans le nom.

Cela signifie que nous pouvons utiliser les noms de portail suivants :

  • kitchen*1-portal - crée un Portal qui mène à la "kitchen".

  • kitchen*2-portal - crée également un Portal qui mène à la "kitchen".

  • kitchen*tout_ce_que_vous_voulez_ici-portal - fonctionne également.

Les caractères génériques fonctionnent sur tous les nœuds qui utilisent ces conventions de nommage.

Limites manuelles

Les limites manuelles sont un moyen de définir explicitement l'enveloppe convexe pour une salle, et sont utilisées si elles sont présentes comme enfants d'une salle dans l'arbre de scènes. Mis à part le postfixe, le nommage n'a pas d'importance. Elles doivent être des maillages (par exemple MeshInstance dans Godot). Gardez à l'esprit qu'elles seront converties en enveloppes convexes pendant le processus de conversion, elles n'ont donc pas besoin d'être parfaites.

Astuce

Une fois utilisées pendant la conversion, elles seront converties avec le Portal Mode IGNORE et ne seront pas affichées. Vous pouvez également utiliser le bouton Générer des points dans l'éditeur pour les convertir en un semble de points stockés dans la salle, et supprimer le MeshInstance -bound original.

Édition du point du portail

Les portails sont définis par une combinaison du transform du nœud Portal, et par un ensemble de points qui forment les coins.

Le portail par défaut a 4 coins comme montré dans l'inspecteur :

../../../_images/portal_point_editing.png

Vous pouvez modifier ces points dans le gadget ou l'inspecteur pour qu'ils correspondent mieux à l'ouverture de votre niveau de jeu. C'est généralement mieux de garder le nombre de points aussi bas que possible pour l'efficacité du système. Par exemple, il vaut mieux prendre le risque de rendre un peu trop d'objets plutôt que de dépenser du temps à faire le culling sur les objets pour 20 côtés différents.

Modification des points de la salle

Vous avez également la possibilité de modifier manuellement les points utilisés pour définir l'enveloppe convexe d'une salle. Ces points ne sont pas présents par défaut. Vous pouvez les créer en appuyant sur le bouton Générer des points dans la barre d'outils de l'éditeur quand une salle est sélectionnée. Cela transfèrera la liaison automatique de la géométrie (ou modèle -bound manuel) dans l'inspecteur. Une fois que les points sont dans l'inspecteur, ils seront utilisés et remplaçeront toute autre méthode. Si vous souhaitez annuler l'édition manuelle, supprimez tous les points de la salle.

../../../_images/room_point_editing.png

Modifier les points manuellement peut être utile dans certaines situations, notamment quand la liaison automatique ne donne pas vraiment le résultat que vous voulez. C'est généralement une bonne idée d'utiliser beaucoup de Simplification dans l'inspecteur pour la Room avant de générer les points. Sachez cependant que, par défaut, la valeur de Simplification sera héritée du RoomManager.

RoomManager (Gestionnaire de salles)

Show Debug (Afficher le débogage)

Cette propriété peut être utilisée pour contrôler la quantité de logging, spécialement pour les logs de conversion de salles. Le débogage sera toujours défini à false sur les projets exportés.

Debug Sprawl (Débogage d'étalement)

Ce mode n'affichera que les modèles qui s'étendent à travers des portails depuis la salle de la caméra actuelle. Les grands éléments statiques qui traversent des portails sont généralement ceux que vous vouler étendre. Des exmples typiques peuvent être des zones de modèles de terrain, des grands modèles de sol ou de plafond. Vous ne voulez généralement pas que les cadres de porte s'étendent à la salle adjacente - c'est à ça que sert de régler correctement Portal Margin.

Merge Meshes (Fusionner les maillages)

Pour limiter les drawcalls, le système offre la possibilité de fusionner automatiquement les modèles STATIC similaires à l'intérieur d'une salle (aussi connu comme static batching). Cela peut améliorer les performances dans de nombreux cas. La précision de culling est réduite, mais comme une salle est une unité assez logique pour le culling, ce compromis joue généralement en votre faveur.

Plane Simplification (Simplification du plan)

Dans certains cas, les enveloppes convexes générées automatiquement pour les salles peuvent contenir un grand nombre de plans, particulièrement si vous utilisez des surfaces courbées. Ce n'est pas idéal car cela ralentit le système. Cette option permet de simplifier les enveloppes. Le degré de simplification peut être choisi par l'utilisateur, entre 0 (pas de simplification) et 1 (simplification maximale). Vous pouvez surcharger cette valeur dans des salles individuelles.

Portals

Portail actif

Les portails peuvent être activés et désactivés pendant l'exécution. C'est particulièrement utile si vous avez des portes que vous pouvez ouvrir et fermer.

Two Way (Bidirectionnel)

Les portails peuvent être soit bidirectionnels, soit unidirectionnels. Les portails bidirectionnels par défaut sont plus rapides à mettre en place dans la plupart des cas, mais les portails unidirectionnels peuvent être utiles dans certains cas. Par exemple, vous pouvez utiliser des portails unidirectionnels pour créer des fenêtres à partir desquelles on peut voir l'extérieur, mais pas l'intérieur. Cela peut améliorer les performances lorsque vous regardez des bâtiments depuis l'extérieur.

Systèmes de particules

Sachez que lors du placement de systèmes de particules STATIC, l'AABB après conversion peut avoir une taille nulle. Cela signifie que le système de particules peut être affecté par le culling trop tôt. Pour éviter cela, vous pouvez définir le portal mode du système de particules à DYNAMIC, ou alors, ajouter un Extra Cull Margin au système de particules dans l'inspecteur de Geometry.

Multimeshes (Multi-maillages)

Notez que les multi-maillages seront affectés par le culling comme un groupe, plutôt qu'individuellement. Vous devez donc essayer de les garder localisés dans la même zone, dans la mesure du possible.