Nœuds Occluder

En plus de l'occlusion via Salles et Portails, Godot a également la capacité de fournir une occlusion de base en utilisant de simples nœuds géométriques Occluder. Il s'agit de formes géométriques qui sont affichées dans l'éditeur à l'aide de gizmos, mais qui sont invisibles au moment de l'exécution.

Tout objet qui est entièrement occulté par la forme (derrière ou dans certains cas à l'intérieur) sera éliminé au moment de l'exécution. Ils sont conçus pour être simples à utiliser et peu coûteux à l'exécution, mais le compromis est qu'ils peuvent ne pas être aussi efficaces que Salles et Portails. Néanmoins, ils peuvent améliorer considérablement les performances dans certaines situations.

Note

It is important to understand that geometric occluders work by testing the axis aligned bounding box (AABB) of the occludee against the occluder. The AABB must be fully occluded to be culled. The consequence of this is that smaller objects are more likely to be effectively culled than larger objects, and larger occluders tend to be much more effective than smaller ones.

Un avantage majeur des nœuds Occluder est qu'ils sont entièrement dynamiques. Par exemple, si vous placez un nœud Occluder en tant qu'enfant d'un vaisseau spatial, il se déplacera lorsque vous déplacerez l'objet parent.

La raison pour laquelle les nœuds Occluder sont si peu coûteux en termes de performance est que le moteur choisit dynamiquement les Occluders les plus pertinents au moment de l'exécution, en fonction du point de vue actuel de la caméra. Cela signifie que vous pouvez souvent avoir des centaines d'Occluders présents dans la scène. Seuls les plus pertinents seront actifs à un moment donné.

Le nœud Occluder lui-même est un support pour une ressource OccluderShape, qui détermine la fonctionnalité. Pour commencer, ajoutez un nœud Occluder à votre arbre de scène.

Astuce

Vous verrez un triangle d'avertissement jaune qui vous indique que vous devez définir une OccluderShape à partir de l'inspecteur avant que le Occluder devienne fonctionnel.

OccluderShapeSphere

La sphère est l'un des occludeurs les plus simples et les plus rapides, et elle est facile à configurer et à positionner. L'inconvénient est que la sphère n'a de sens que dans certains niveaux de jeu, et qu'elle est plus adaptée au terrain ou à la géométrie organique de l'arrière-plan.

Une fois que vous avez ajouté un OccluderNode et choisi d'ajouter un nouveau OccluderShapeSphere dans l'inspecteur, cliquez sur l'OccluderShapeSphere dans l'inspecteur pour faire apparaître les paramètres.

../../_images/occluder_shape_sphere_inspector.png

Contrairement à de nombreux nœuds, l' OccluderShapeSphere peut stocker plusieurs sphères dans le même objet. Cela est plus efficace pour le moteur et permet de garder votre SceneTree plus clair. Vous n'êtes pas obligé de stocker toutes vos sphères dans un seul Occluder car cela pourrait devenir délicat à gérer, mais il est parfaitement raisonnable d'ajouter une dizaine de sphères ou plus. Elles sont très bon marché, et souvent, plus vous en placez, meilleure sera la correspondance avec votre géométrie.

Pour pouvoir stocker plusieurs sphères, elles sont stockées dans un Array. Si vous cliquez sur l'Array dans l'inspecteur, vous pouvez augmenter la taille du Array pour en ajouter une.

../../_images/occluder_shape_sphere_terrain.png

La sphère apparaîtra comme un petit objet sphérique rose dans la fenêtre de l'éditeur. Il y a deux poignées sur chaque sphère. La poignée du milieu, plus grande, vous permet de déplacer la sphère dans l'espace local de l'Occluder, et la petite poignée vous permet d'ajuster le rayon.

Bien que vous puissiez modifier la position de la sphère à l'aide de la transformation du nœud Occluder dans l'inspecteur, cela déplace l'ensemble du tableau de sphères. Lorsque vous voulez utiliser plusieurs sphères dans un seul occluteur, les poignées font ce travail. Afin de permettre le positionnement en 3D, le gizmo ne déplacera la position 3D que dans les deux axes principaux en fonction du point de vue dans l'éditeur. Il est plus facile de s'y retrouver en l'essayant qu'en l'expliquant.

Astuce

Il y a une autre fonction pratique dans l'éditeur lorsque vous utilisez plusieurs sphères. Si vous cliquez sur le bouton Center Node de la barre d'outils, il recalculera les positions locales des sphères par rapport à la moyenne de l’ensemble du nœud, et changera la transformation du nœud Occluder. Il s'agit d'une fonction pratique pour faciliter leur placement.

Au moment de l'exécution, les sphères peuvent être activées ou désactivées, ce qui modifie la visibilité du nœud Occluder, et le Nœud peut être déplacé, mis à l'échelle, tourné, etc.

Un cas d'utilisation courant des sphères d'occlusion consiste à fournir une occlusion sur un terrain montagneux ou vallonné. En plaçant des sphères à l'intérieur des montagnes, vous pouvez empêcher le rendu des arbres, des plantes, des bâtiments et des objets derrière les montagnes. Avec un peu de créativité, elles peuvent également être utilisées pour les objets en mouvement, tels que les grands vaisseaux spatiaux, les planètes, etc.

OccluderShapePolygon

The polygon is a generalist occluder. It can be made to work well in almost all situations, and can quickly provide a degree of occlusion culling to most scenes.

As with all geometric occluders, the key to success is to make them large. They do not have to match rendered geometry, and in many cases they will work better if you extend them past rendered geometry to make them as big as possible (without blocking legitimate lines of sight). The reason why they need to be large is that in general, they will only cull objects whose AABB is completely hidden by the polygon. For large objects to be culled, you will need large occluders.

Note

Like all occluders, polygons can overlap, and in many cases they will work better if you overlap them (they are more likely to cull objects on boundaries).

Editing and details

Occluder polygons are edited as a list of points which define a convex polygon, on a single plane. In order to confine the polygon to a single plane, the points are defined in 2D space rather than 3D. The orientation, position and scale of the polygon is taken instead from the transform of the Occluder Node.

../../_images/occluder_shape_polygon_inspector.png

If you create an Occluder and add to it a OccluderShapePolygon resource, by default it will create 4 starting points forming a rectangle. If you move the position and rotation of the Occluder Node you will see how the rectangle follows the node. When the Occluder is selected in the editor, handles will appear for each of the points. You can actually click and drag these handles, to match your polygon to the environment of your scene.

../../_images/occluder_shape_polygon.png

Vous n'êtes pas restreint à 4 points, vous pouvez ajouter et retirer des points dans l'Inspecteur, mais il est à noter que :

  • L'éditeur va automatiquement nettoyer vos points pour former un polygone convexe. Si vous glissez un point dans une position qui formerait un polygone concave, cela sera ignoré.

  • In general, the less edges (and thus points), the faster the polygon will work at runtime. A polygon with 6 edges will have to make twice the calculations of a polygon with 3 edges. In most cases 4 is a good number.

../../_images/occluder_shape_polygon2.png

Trous

Real world game levels don't always have large continuous areas that should be occluded. Often walls will have a door or windows, caves will have an entrance, etc. In some cases we have to make do by placing several OccluderShapePolygons around such an opening, but Occluder polygons have one more trick up their sleeve - they can have "holes".

In the inspector you will notice that as well as a set of points for the polygon, the polygon has a set of points for a single "hole". If you add 3 or 4 to your polygon, you will see they appear in the editor as smaller handles. You can drag these around just like the polygon handles, to form a convex hole.

../../_images/occluder_shape_polygon_hole.png

The hole can be totally within the polygon (such as a window), abutting the edge (like a door) or crossing the edge of the polygon completely, to make the occluder concave. The way the hole works is that the culling follows a simple rule:

  • If the object to be culled is totally hidden by the polygon, it then looks to see whether it can be seen through the hole. If the object touches the hole, it is not culled, but if hidden by the polygon and not seen through the hole it is culled.

Note

Placer des trous est souvent plus pratique, et fonctionne mieux et plus rapidement à l'exécution, que créer de nombreux OccluderShapePolygons plus petits.

Limites du Trou

La principale limitation des trous est qu'il ne peut en avoir qu'un seul par polygone. Si vous vous trouvez dans une situation qui a besoin de deux trous ou plus, vous avez un choix :

  • Combine the area of the two holes into one bigger hole (if they are close together).

  • Utilisez deux OccluderPolygons ou plus.

Astuce

Souvenez-vous que si vous utilisez plus qu'un polygone, ils peuvent se superposer, et vous devriez utiliser ceci à votre avantage.

How many Occluder polys are needed?

This very much depends on your scene, but generally you can start getting a good benefit from 3 or 4 well placed polygons. After that it is totally up to you how much time you want to spend. Placing occluders is a bit of an art form, and you will get better at it and learn new tricks the more you work with them.

Quelques mises en garde :

  • Construisez vos niveaux afin de prendre avantage de l'occlusion.

C'est un des secrets des pros. Un bon level design n'est pas juste à propos de ce que demande le gameplay, il devrait aussi être construit avec l'occlusion en tête.

  • When in a building with multiple floors, try placing an occluder polygon between each floor, with a hole for where the staircase transitions between them. This can potentially cull out entire floors and greatly improve performance.

  • N'ayez pas peur d'étendre vos polygones d'occlusion au delà des côtés de la géométrie visible afin d'éliminer plus d'objets - par exemple, loin dans le sol ou dans le ciel.

Utiliser des polygones de façon dynamique

Comme tout les obturateurs géométriques, les polygones ne sont pas confinés à une géométrie statique (qui ne bouge pas). Vous pouvez les placer sur des objets mobiles. Vous pouvez même changer la position relative des points en temps réel.

Directives relatives au contenu :

  • Il y a un léger coût à faire bouger des polygones, leurs points devant être transformés par le CPU à chaque fois que leur transformation change.

Cela ne doit pas beaucoup vous inquiéter, les CPUs étant raisonnablement rapides pour transformer des points et, généralement, les polygones ont beaucoup moins de points que la géométrie rendue.

  • Changing the transform of the polygon Node (e.g. by moving the parent object) is cheaper than changing the points themselves. Use the former rather than the latter wherever possible.