Optimiser les performances 3D

Culling

Godot effectuera automatiquement un frustrum culling de la vue afin d'éviter de rendre des objets qui se trouvent en dehors du viewport. Cela fonctionne bien pour les jeux qui se déroulent dans une petite zone, mais les choses peuvent rapidement devenir problématiques dans les niveaux plus large.

Occlusion culling

En vous promenant dans une ville par exemple, vous ne pourrez peut-être voir que quelques bâtiments dans la rue où vous vous trouvez, ainsi que le ciel et quelques oiseaux qui volent au-dessus de vous. En ce qui concerne un moteur de rendu naïf, vous pouvez cependant voir toute la ville. Il ne se contentera pas de rendre les bâtiments devant vous, il rendra la rue derrière, avec les gens dans cette rue, les bâtiments derrière. Vous vous retrouvez rapidement dans des situations où vous essayez de rendre 10×, ou 100× plus que ce qui est visible.

Les choses ne sont pas aussi mauvaises qu'elles le paraissent, car le tampon Z permet généralement au GPU de ne calculer les ombres complètement que pour les objets qui se trouvent à l'avant. C'est ce qu'on appelle la depth prepass et elle est activée par défaut dans Godot lors de l'utilisation du moteur de rendu GLES3. Cependant, les objets inutiles continuent de réduire les performances.

Une façon de réduire potentiellement la quantité à rendre est de tirer parti de l'occlusion.

Par exemple, dans notre scénario de la rue d'une ville, vous pouvez vous rendre compte à l'avance que vous ne pouvez voir que deux autres rues, B et C, à partir de la rue A. Les rues D à Z sont cachées. Pour tirer parti de l'occlusion, il suffit de tester lorsque le spectateur se trouve dans la rue A (peut-être en utilisant les Areas de Godot), puis de cacher les autres rues.

Cet exemple est une version manuelle de ce que l'on appelle un ensemble potentiellement visible. Il s'agit d'une technique très puissante pour accélérer le rendu. Vous pouvez également l'utiliser pour restreindre la physique ou l'IA à la zone locale, et les accélérer ainsi que le rendu.

Rendu à l'aide de portail

Cependant, il existe un moyen beaucoup plus simple de tirer parti de l'occlusion. Godot dispose d'un système de rendu avancé pour les portails, qui peut effectuer une élimination des occlusions à partir des caméras et des lumières. Voir Salles et Portails.

Il ne s'agit pas d'un système entièrement automatique et il nécessite une certaine configuration manuelle. Cependant, il offre potentiellement une augmentation significative des performances.

Note

In some cases, you can adapt your level design to add more occlusion opportunities. For example, you can add more walls to prevent the player from seeing too far away, which would decrease performance due to the lost opportunities for occlusion culling.

Autres techniques d'occlusion

En plus du système de portail et des méthodes manuelles, il existe diverses autres techniques d'occlusion telles raster-based occlusion culling. Certaines de ces techniques peuvent être disponibles par le biais d'add-ons ou peuvent être disponibles dans le noyau de Godot à l'avenir.

Objets transparents

Godot trie les objets par Material et par Shader pour améliorer les performances. Toutefois, cela ne peut pas être fait sur des objets transparents. Les objets transparents sont rendus de l'arrière vers l'avant pour se fondre avec ce qui se trouve derrière. Par conséquent, essayez de réduire au minimum les objets transparents. Si un objet a une petite section avec transparence, essayez de faire de cette section une surface séparée avec son propre Material.

Pour plus d'informations, voir la documentation GPU optimizations.

Niveau de détail (LOD)

Dans certaines situations, en particulier à distance, il peut être judicieux de remplacer une géométrie complexe par des versions plus simples. L'utilisateur final ne verra probablement pas beaucoup de différence. Envisagez de regarder un grand nombre d'arbres à distance. Il existe plusieurs stratégies pour remplacer les modèles à distance variable. Vous pouvez utiliser des modèles à plus faible polygones, ou utiliser la transparence pour simuler une géométrie plus complexe.

Billboards(panneaux d'affichage) et imposteurs

La version la plus simple de l'utilisation de la transparence mettre en place de la LOD est celle des panneaux d'affichage (billboards). Par exemple, vous pouvez utiliser un seul quad transparent pour représenter un arbre à distance. Ceci peut donner un rendu bon marché, à moins, bien sûr, qu'il y ait beaucoup d'arbres en face les uns des autres. Dans ce cas, la transparence peut commencer à taper dans le taux de remplissage (pour plus d'informations sur le taux de remplissage, voir doc_gpu_optimisation).

Une alternative consiste à rendre non pas un seul arbre, mais plusieurs arbres ensemble en tant que groupe. Cela peut être particulièrement efficace si vous pouvez voir une zone mais ne pouvez pas l'approcher physiquement dans un jeu.

Vous pouvez créer des imposteurs en pré-rendant des vues d'un objet sous différents angles. Vous pouvez même aller plus loin et re-rendre périodiquement une vue d'un objet sur une texture pour l'utiliser comme un imposteur. À distance, vous devez déplacer le spectateur sur une distance considérable pour que l'angle de vue change de manière significative. Cela peut être complexe à mettre en œuvre, mais peut en valoir la peine selon le type de projet que vous réalisez.

Utiliser l'instanciation (MultiMesh)

Si plusieurs objets identiques doivent être dessinés au même endroit ou à proximité, essayez d'utiliser MultiMesh. MultiMesh permet de dessiner des dizaines de milliers d'objets à très faible coût de performance, ce qui le rend idéal pour les troupeaux, l'herbe, les particules et tout ce qui comporte des milliers d'objets identiques.

Voir aussi la documentation Using MultiMesh.

Préparation de l’éclairage

L'éclairage des objets est l'une des opérations de rendu les plus coûteuses. L'éclairage en temps réel, les ombres (surtout les lumières multiples) et GI sont particulièrement coûteux. Ils peuvent être tout simplement trop élevés pour les appareils mobiles de faible puissance.

Envisagez d'utiliser le pré-calcul des lumières, en particulier pour les téléphones portables. Cela peut donner des très beaux résultats, mais présente l'inconvénient de ne pas être dynamique. Parfois, c'est un compromis qui vaut la peine d'être fait.

En général, si plusieurs lumières doivent affecter une scène, il est préférable d'utiliser Baked lightmaps. Le pré-calcul peut également améliorer la qualité de la scène en ajoutant des rebonds de lumière indirecte.

Animation et skinning

L'animation et en particulier l'animation des vertex comme le skinning et le morphing, peut être très coûteuse sur certaines plateformes. Il peut être nécessaire de réduire considérablement le nombre de polygones pour les modèles animés ou de limiter leur nombre à l'écran à un moment donné.

Grands mondes

Si vous créez de grands mondes, il y a des considérations différentes de celles que vous connaissez peut-être avec les jeux plus petits.

Les grands mondes peuvent devoir être construits dans des tuiles qui peuvent être chargées à la demande lorsque vous vous déplacez dans le monde. Cela peut éviter que l'utilisation de la mémoire ne devienne incontrôlable et limiter le traitement nécessaire à la zone locale.

Il peut y avoir des glitches de rendu et physiques dus à une erreur de virgule flottante dans les grands mondes. Vous pouvez utiliser des techniques telles que l'orientation du monde autour du joueur (plutôt que l'inverse), ou le décalage périodique de l'origine pour garder les choses centrées autour Vector3(0, 0, 0).