CSG

CSG est l'abréviation de Constructive Solid Geometry, et est un outil permettant de combiner des formes de base ou des maillages personnalisés pour créer des formes plus complexes. Dans les logiciels de modélisation 3D, le CSG est surtout connu sous le nom d' "opérateurs booléens".

Le prototypage de niveau est l'une des principales utilisations du CSG dans Godot. Cette technique permet aux utilisateurs de créer des versions simples des formes les plus courantes en combinant des primitives. Les environnements intérieurs peuvent être créés en utilisant des primitives inversées.

Note

Les nœuds du CSG dans Godot sont principalement destinés au prototypage. Il n'y a pas de support intégré pour le mappage UV ou l'édition de polygones 3D (bien que des polygones 2D extrudés puissent être utilisés avec le nœud CSGPolygon).

Si vous cherchez un outil de conception de niveau facile à utiliser pour un projet, vous pouvez utiliser Qodot à la place. Il vous permet de concevoir des niveaux en utilisant TrenchBroom et de les importer dans Godot.

../../_images/csg.gif

Introduction aux nœuds CSG

Comme les autres fonctionnalités de Godot, CSG est supporté sous forme de nœuds. Ce sont les nœuds CSG :

../../_images/csg_nodes.png ../../_images/csg_mesh.png

Fonctionnalités des outils CSG

Chaque nœud CSG supporte 3 types d'opérations booléennes :

  • Union : La géométrie des deux primitives est fusionnée, la géométrie croisée est supprimée.
  • Intersection : Seule la géométrie d'intersection est conservée, le reste est supprimé.
  • Subtraction : La deuxième forme est soustraite de la première, laissant une bosse avec sa forme.
../../_images/csg_operation_menu.png ../../_images/csg_operation.png

CSGPolygon

Le nœud CSGPolygon extrude le long d'un Polygone dessiné en 2D (en coordonnées X, Y) de la manière suivante :

  • Depth : Extrusion d'une quantité donnée.
  • Spin : Extrudée en tournant autour de son origine.
  • Path : Extrudé le long d'un nœud de chemin. Cette opération est communément appelée lofting.
../../_images/csg_poly_mode.png ../../_images/csg_poly.png

Note

Le mode Path doit être muni d'un nœud Chemin pour fonctionner. Dans le nœud Path, tracez le chemin et le polygone dans CSGPolygon sera extrudé le long du chemin donné.

Maillages personnalisés

N'importe quel mesh peut être utilisé pour CSGMesh ; le mesh peut être modélisé dans d'autres logiciels et importé dans Godot. Plusieurs matériaux sont pris en charge. Il y a quelques restrictions pour la géométrie :

  • Il doit-être fermer,
  • il ne doit pas s'auto-intersecter,
  • il ne doit pas contenir de faces internes,
  • chaque bord ne doit être relié qu'à deux autres faces.
../../_images/csg_custom_mesh.png

CSGCombiner

Le nœud CSGCombiner est une forme vide utilisée pour l'organisation. Il ne combinera que les nœuds enfants.

Ordre de traitement

Chaque nœud CSG traitera d'abord ses nœuds enfants et leurs opérations : union, intersection ou soustraction, dans l'ordre arborescence, et les appliquera à lui-même les unes après les autres.

Note

Dans un souci de performance, assurez-vous que la géométrie CSG reste relativement simple, car les mailles complexes peuvent prendre un certain temps à traiter. Si vous ajoutez des objets ensembles (tels qu'une table et d'autres objets trouvés régulièrement dans une pièce), créez-les comme des arbres CSG séparés. Forcer trop d'objets dans un même arbre finira par affecter les performances. N'utilisez des opérations binaires que là où vous en avez réellement besoin.

Prototypage d'un niveau

Nous allons prototyper une pièce pour pratiquer l'utilisation des outils du CSG.

Astuce

Travailler en projection Orthogonal donne une meilleure vue en combinant les formes CSG.

Notre niveau contiendra ces objets :

  • une pièce,
  • un lit,
  • une lampe,
  • un bureau,
  • une bibliothèque.

Créez une scène avec un nœud spatial comme nœud racine.

Astuce

L'éclairage par défaut de l'environnement n'offre pas un ombrage précis sous certains angles. Modifiez le mode d'affichage à l'aide de Display Overdraw dans le menu de la fenêtre 3D, ou ajoutez un nœud DirectionalLight pour vous aider à voir clairement.

../../_images/csg_overdraw.png

Créez une CSGBox et nommez-la room, activez Invert Faces et modifiez les dimensions de votre pièce.

../../_images/csg_room.png ../../_images/csg_room_invert.png

Ensuite, créez un CSGCombiner et nommez-le desk.

Un bureau a une surface et 4 pieds :

  • Créez 1 nœud enfant CSGBox en mode Union pour la surface et ajustez les dimensions.
  • Créez 4 nœuds enfants CSGBox en mode Union pour les jambes et ajustez les dimensions.

Ajustez leur emplacement pour ressembler à un bureau.

../../_images/csg_desk.png

Note

Les nœuds CSG à l'intérieur d'un CSGCombiner ne traiteront leur fonctionnement qu'à l'intérieur du combiner. Par conséquent, les CSGCombiners sont utilisés pour organiser les nœuds CSG.

Créez un CSGCombiner et nommez-le "lit".

Notre lit se compose de 3 parties : le lit, le matelas et un oreiller. Créez une CSGBox et ajustez sa dimension pour le lit. Créez une autre CSGBox et ajustez sa dimension pour le matelas.

../../_images/csg_bed_mat.png

Nous allons créer un autre CSGCombiner appelé pillow comme enfant de bed. L'arbre de scène devrait ressembler à ceci :

../../_images/csg_bed_tree.png

Nous allons combiner 3 nœuds CSGSphere en mode Union pour former un oreiller. Mettre à l'échelle l'axe Y des sphères et activer Smooth Faces.

../../_images/csg_pillow_smooth.png

Sélectionnez le nœud pillow et passez en mode Subtraction ; les sphères combinées perceront un trou dans le matelas.

../../_images/csg_pillow_hole.png

Essayez de reparenter le nœud pillow au nœud racine Spatial ; le trou disparaîtra.

Note

Il s’agit d’illustrer l’effet de l’ordre de traitement du CSG. Étant donné que le nœud racine n’est pas un nœud CSG, les nœuds CSGCombiner sont la fin des opérations ; Cela montre l’utilisation de CSGCombiner pour organiser la scène CSG.

Défaire le re-parent après avoir observé l'effet. Le lit que vous avez construit devrait ressembler à ceci :

../../_images/csg_bed.png

Créez un CSGCombiner et nommez-le lamp.

Une lampe se compose de 3 parties : le pied, le poteau et l'abat-jour. Créez un CSGCylinder, activez l'option Cone et faites-en le socle. Créez un autre cylindre CSGC et ajustez les dimensions pour l'utiliser comme poteau.

../../_images/csg_lamp_pole_stand.png

Nous utiliserons un CSGPolygon pour l'abat-jour. Utilisez le mode Spin pour le CSGPolygon et dessinez un trapezoid en Front View (pavé numérique 1) ; cette forme s'extrude autour de l'origine et forme l'abat-jour.

../../_images/csg_lamp_spin.png ../../_images/csg_lamp_polygon.png ../../_images/csg_lamp_extrude.png

Ajustez l'emplacement des 3 pièces pour qu'il ressemble à une lampe.

../../_images/csg_lamp.png

Créez un CSGCombiner et nommez-le bookshelf.

Nous utiliserons 3 nœuds CSGBox pour la bibliothèque. Créez une CSGBox et ajustez ses dimensions ; ce sera la taille de la bibliothèque.

../../_images/csg_shelf_big.png

Dupliquez la CSGBox et raccourcissez les dimensions de chaque axe et changez le mode en Subtraction.

../../_images/csg_shelf_subtract.png ../../_images/csg_shelf_subtract_menu.png

Vous avez presque construit une étagère. Créez une CSGBox supplémentaire pour diviser l'étagère en deux niveaux.

../../_images/csg_shelf.png

Positionner les meubles dans la chambre comme vous le souhaitez et votre scène de rassembler à cela :

../../_images/csg_room_result.png

Vous avez réussi à prototyper un niveau de pièce avec les outils CSG de Godot. Les outils CSG peuvent être utilisés pour concevoir toutes sortes de niveaux, comme un labyrinthe ou une ville ; explorez ses limites lorsque vous concevez votre jeu.

Utilisation de prototypes de textures

Godot's Spatial Material supporte le triplanar mapping (carting triplanaire), qui peut être utilisé pour appliquer automatiquement une texture à des objets arbitraires sans distorsion. C'est pratique lorsque l'on utilise CSG car Godot ne supporte pas encore l'édition de cartes UV sur les noeuds CSG. Le mapping triplanaire est relativement lent, ce qui limite généralement son utilisation aux surfaces organiques comme le terrain. Néanmoins, lors du prototypage, elle peut être utilisée pour appliquer rapidement des textures à des niveaux basés sur le CSG.

Note

Si vous avez besoin de textures pour le prototypage, Kenney a fait un ensemble de textures prototypes sous licence CC0.

Il y a deux façons d'appliquer un matériau à un nœud CSG :

  • En l'appliquant à un nœud du CSGCombiner en tant qu'annulation de matériau (Géométrie > Annulation de matériau dans l'inspecteur). Cela affectera automatiquement ses enfants, mais rendra impossible la modification de la matière chez les enfants individuels.
  • Appliquer un matériau à des nœuds individuels (Matériau dans l'inspecteur). De cette façon, chaque nœud CSG peut avoir sa propre apparence. Les nœuds CSG soustractifs appliqueront leur matériau aux nœuds qu'ils "creusent".

Pour appliquer le mapping triplanaire à un nœud CSG, sélectionnez-le, allez dans l'inspecteur, cliquez sur le texte [empty] à côté de Material Override (ou Material pour les nœuds CSG individuels). Choisissez Nouveau Matériau Spatial. Cliquez sur l'icône du matériau nouvellement créé pour le modifier. Dépliez la section Albédo et chargez une texture dans la propriété Texture. Maintenant, dépliez la section Uv1 et cochez Triplanar. Vous pouvez changer le décalage et l'échelle de la texture sur chaque axe en jouant avec les propriétés Scale et Offset juste au-dessus. Des valeurs plus élevées dans la propriété Scale feront que la texture se répétera plus souvent.

Astuce

Vous pouvez copier un SpatialMaterial pour le réutiliser à travers vos nœuds CSG. Pour ce faire, cliquez sur la flèche déroulante située à côté d'une propriété du matériel dans l'inspecteur et choisissez Copier. Pour le coller, sélectionnez le nœud sur lequel vous souhaitez appliquer le matériau, cliquez sur la flèche déroulante située à côté de sa propriété matérielle, puis choisissez Coller.