Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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.

You can define the shape of a PhysicsBody3D by adding one or more CollisionShape3Ds as child nodes. Note that you must add a Shape3D resource to collision shape nodes in the Inspector dock.

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

Convex collision shapes are a compromise between primitive collision shapes and concave collision shapes. They can represent shapes of any complexity, but with an important caveat. As their name implies, an individual shape can only represent a convex shape. For instance, a pyramid is convex, but a hollow box is concave. To define a concave object with a single collision shape, you need to use a concave collision shape.

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.

You can generate one or several convex collision shapes from the editor by selecting a MeshInstance3D and using the Mesh menu at the top of the 3D viewport. The editor exposes two generation modes:

  • 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

Concave collision shapes, also called trimesh collision shapes, can take any form, from a few triangles to thousands of triangles. Concave shapes are the slowest option but are also the most accurate in Godot. You can only use concave shapes within StaticBodies. They will not work with CharacterBodies or RigidBodies unless the RigidBody's mode is 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.

You can generate a concave collision shape from the editor by selecting a MeshInstance3D and using the Mesh menu at the top of the 3D viewport. The editor exposes two 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.