Optimiser les performances 3D

Culling

Godot effectuera automatiquement une 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 10x, ou 100x 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. Cependant, les objets inutiles continuent de réduire les performances.

Une façon de réduire potentiellement la quantité à rendre est de tirer profit de l'occlusion. À partir de la version 3.2.2, il n'y a plus de support intégré pour l'occlusion dans Godot, cependant, avec une conception soignée, vous pouvez encore obtenir de nombreux avantages.

Par exemple, dans notre scénario de la rue de la 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.

Il s'agit d'une version manuelle de ce que l'on appelle un 'potentially visible set'. C'est une technique très puissante qui permet d'accélérer le rendu. Vous pouvez également l'utiliser pour restreindre la physique ou l'IA à la zone locale, et accélérer ces éléments ainsi que le rendu.

Autres techniques d'occlusion

Il existe d'autres techniques d'occlusion telles que les portails, le PVS automatique et raster based occlusion culling. Certaines d'entre elles peuvent être disponibles par le biais d'addons, et pourraient être disponibles dans le noyau de Godot à l'avenir.

Objets transparents

Comme mentionné précédemment, 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 un Material séparé.

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 / 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 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 (0, 0, 0).