Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Formes de collision (3D)
Ce guide explique :
Les types de formes de collision disponibles en 3D dans Godot.
Utilisation d'un maillage convexe ou concave comme forme de collision.
Considérations de performance concernant les collisions 3D.
Godot fournit de nombreux types de formes de collision, avec différents compromis de performance et de précision.
Vous pouvez définir la forme d'un PhysicsBody3D en ajoutant un ou plusieurs CollisionShape3Ds comme nœuds enfants directs. Les nœuds enfants indirects (i.e. enfants de nœuds enfants) seront ignorés et non utilisés en tant que formes de collision. Notez que vous devez ajouter une resource Shape3D aux nœuds forme de collision dans le dock Inspecteur.
Note
Lorsque vous ajoutez plusieurs formes de collision à un seul PhysicsBody, vous n'avez pas à vous soucier de leur chevauchement. Elles ne se "heurteront" pas les unes les autres.
Formes primitives de collision
Godot fournit les types de formes de collision primitives suivants :
Vous pouvez représenter la collision de la plupart des petits objets en utilisant une ou plusieurs formes primitives. Cependant, pour les objets plus complexes, comme un grand navire ou un niveau entier, vous pouvez avoir besoin de formes convexes ou concaves à la place. Plus d'informations à ce sujet ci-dessous.
We recommend favoring primitive shapes for dynamic objects such as RigidBodies and CharacterBodies as their behavior is the most reliable. They often provide better performance as well.
Formes de collision convexes
Les formes de collision convexes sont un compromis entre les formes de collision primitives et les formes de collision concaves. Elles peuvent représenter des formes de n'importe quelle complexité, mais avec une mise en garde importante. Comme leur nom l'indique, une forme individuelle ne peut représenter qu'une forme convexe. Par exemple, une pyramide est convexe, mais une boîte creuse est concave. Pour définir un objet concave avec une forme de collision unique, vous devez utiliser une forme de collision concave.
Selon la complexité de l'objet, vous pouvez obtenir de meilleures performances en utilisant plusieurs formes convexes au lieu d'une forme de collision concave. Godot vous permet d'utiliser la décomposition convexe pour générer des formes convexes qui correspondent approximativement à un objet creux. Notez que cet avantage de performance ne s'applique plus après un certain nombre de formes convexes. Pour les objets volumineux et complexes tels qu'un niveau entier, nous recommandons d'utiliser des formes concaves à la place.
Vous pouvez générer une ou plusieurs formes de collision convexes à partir de l'éditeur en sélectionnant un MeshInstance3D et en utilisant le menu Mesh en haut de la vue 3D. L'éditeur expose deux modes de génération :
Create Single Convex Collision Sibling utilise l'algorithme Quickhull. Il crée un nœud CollisionShape avec une forme de collision convexe générée automatiquement. Comme il ne génère qu'une seule forme, il offre de bonnes performances et est idéal pour les petits objets.
Create Multiple Convex Collision Siblings utilise l'algorithme V-HACD. Il crée plusieurs nœuds CollisionShape, chacun ayant une forme convexe. Comme il génère des formes multiples, il est plus précis pour les objets concaves au prix de la performance. Pour les objets de complexité moyenne, il sera probablement plus rapide que l'utilisation d'une seule forme de collision concave.
Formes de collision concaves ou trimesh
Les formes de collision concaves, aussi appelées formes de collision trimesh, peuvent prendre n'importe quelle forme, de quelques triangles à des milliers de triangles. Les formes concaves sont l'option la plus lente mais sont aussi la plus précise dans Godot. Vous ne pouvez utiliser des formes concaves que dans les StaticBodies. Elles ne fonctionneront pas avec les KinematicBodies ou les RigidBodies, sauf si le mode de ces derniers est Static.
Note
Même si les formes concaves offrent la collision la plus précise, les rapports de contact peuvent être moins précis que ceux des formes primitives.
Lorsqu'on n'utilise pas les GridMaps pour la conception des niveaux, les formes concaves sont la meilleure approche pour la collision d'un niveau. Cela dit, si votre niveau comporte de petits détails, vous voudrez peut-être les exclure de la collision pour des raisons de performances et de sensations de jeu. Pour ce faire, vous pouvez construire un maillage de collision simplifié dans un modeleur 3D et demander à Godot de générer automatiquement une forme de collision pour celui-ci. Plus d'informations à ce sujet ci-dessous
Notez que contrairement aux formes primitives et convexes, une forme de collision concave n'a pas de "volume" réel. Vous pouvez placer des objets aussi bien à l'extérieur de la forme que à l'intérieur.
Vous pouvez générer une forme de collision concave à partir de l'éditeur en sélectionnant un MeshInstance3D et en utilisant le menu Mesh en haut de la vue 3D. L'éditeur présente deux options :
Create Trimesh Static Body est une option pratique. Elle crée un StaticBody contenant une forme concave correspondant à la géométrie du maillage.
Create Trimesh Collision Sibling crée un nœud CollisionShape avec une forme concave correspondant à la géométrie du maillage.
Voir aussi
See Importation de scènes 3D for information on how to export models for Godot and automatically generate collision shapes on import.
Mises en garde relatives aux performances
You aren't limited to a single collision shape per PhysicsBody. Still, we recommend keeping the number of shapes as low as possible to improve performance, especially for dynamic objects like RigidBodies and CharacterBodies. On top of that, avoid translating, rotating, or scaling CollisionShapes to benefit from the physics engine's internal optimizations.
Lorsque l'on utilise une forme de collision unique non transformée dans un StaticBody, l'algorithme broad phase du moteur peut éliminer les PhysicsBodies inactifs. La narrow phase ne devra alors prendre en compte que les formes des corps actifs. Si un StaticBody a de nombreuses formes de collision, la broad phase échouera. La narrow phase, qui est plus lente, doit alors effectuer un contrôle de collision avec chaque forme.
Si vous rencontrez des problèmes de performance, vous devrez peut-être faire des compromis en termes de précision. La plupart des jeux n'ont pas une précision de collision de 100 %. Ils trouvent des moyens créatifs de la cacher ou de la rendre inaperçue pendant le gameplay normal.