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...
Limitations du rendu 3D
Introduction
En raison de l'importance qu'ils accordent aux performances, les moteurs de rendu en temps réel présentent de nombreuses limites. Le moteur de rendu de Godot ne fait pas exception à la règle. Pour fonctionner efficacement avec ces limitations, vous devez les comprendre.
Limites de taille des textures
Sur les ordinateurs de bureau et les ordinateurs portables, les textures supérieures à 8192×8192 peuvent ne pas être prises en charge sur les anciens appareils. Vous pouvez vérifier les limitations de votre GPU cible sur GPUinfo.org.
Les GPU mobiles sont généralement limités à des textures 4096 × 4096. De plus, certains GPU mobiles ne prennent pas en charge la répétition de textures de taille différente de la puissance de deux. Par conséquent, si vous souhaitez que votre texture s'affiche correctement sur toutes les plates-formes, vous devez éviter d'utiliser des textures supérieures à 4096 × 4096 et utiliser une puissance de deux de tailles si la texture doit se répéter.
To limit the size of a specific texture that may be too large to render, you can
set the Process > Size Limit import option to a value greater than 0.
This will reduce the texture's dimensions on import (preserving aspect ratio)
without affecting the source file.
Bandes de couleur
When using the Forward+ or Mobile rendering methods, Godot's 3D engine renders internally in HDR. However, the rendering output will typically be written to a lower precision buffer. This can result in visible banding, especially when using untextured materials. For performance reasons, color precision is also lower when using the Mobile rendering method compared to Forward+.
When using the Compatibility rendering method, internal HDR rendering is not used and the color precision is the lowest of all rendering methods. This also applies to 2D rendering, where banding may be visible when using smooth gradient textures.
There are two main ways to alleviate banding:
If using the Forward+ or Forward Mobile rendering methods, enable Use Debanding in Project Settings > Rendering > Anti Aliasing. This applies a fullscreen debanding shader as a post-processing effect and is very cheap.
Alternatively, bake some noise into your textures. This is mainly effective in 2D, e.g. for vignetting effects. In 3D, you can also use a custom debanding shader to be applied on your materials. This technique works even if your project is rendered with low color precision, which means it will work when using the Mobile and Compatibility rendering methods.
Color banding comparison (contrast increased for more visibility)
Voir aussi
See Banding in Games: A Noisy Rant (PDF) for more details about banding and ways to combat it.
Précision du tampon de profondeur
To sort objects in 3D space, rendering engines rely on a depth buffer (also called Z-buffer). This buffer has a finite precision: 32-bit on desktop platforms, 24-bit on mobile platforms (for performance reasons). If two different objects end up on the same buffer value, then Z-fighting will occur. This will materialize as textures flickering back and forth as the camera moves or rotates.
Pour rendre le tampon de profondeur plus précis sur la zone rendue, vous devez augmenter la propriété Near du nœud Camera. Attention toutefois : si vous la réglez trop haut, les joueurs pourront voir à travers la géométrie proche. Vous devez également réduire la propriété Far du nœud Camera à la valeur la plus basse autorisée pour votre cas d'utilisation, mais gardez à l'esprit qu'elle n'aura pas un impact aussi important sur la précision que la propriété Near.
Si vous n'avez besoin d'une grande précision que lorsque le joueur peut voir au loin, vous pouvez la modifier dynamiquement en fonction des conditions de jeu. Par exemple, si le joueur entre dans un avion, la propriété Near peut être temporairement augmentée pour éviter les combats en Z au loin. Elle peut ensuite être diminuée une fois que le joueur a quitté l'avion.
Selon la scène et les conditions de visualisation, vous pouvez également déplacer les objets combattant en Z plus loin sans que la différence soit visible pour le joueur.
Z-fighting comparison (before and after tweaking the scene by offsetting the Label3D away from the floor)
Tri par transparence
Dans Godot, les matériaux transparents sont dessinés après les matériaux opaques. Les objets transparents sont triés de l'arrière vers l'avant, avant d'être dessinés en fonction de la position du Node3D, et non de la position du sommet dans le plan du monde. De ce fait, les objets qui se chevauchent peuvent souvent être triés dans le désordre. Pour corriger les objets mal triés, modifiez la propriété Render Priority du matériau ou le Sorting Offset du nœud. La Render Priority obligera les matériaux spécifiques à apparaître devant ou derrière d'autres matériaux transparents, alors que le Sorting Offset va déplacer des objets devant ou derrière durant le tri. Malgré tout, cela n'est pas toujours suffisant.
Transparent objects are not rendered to the normal-roughness buffer, as they are drawn after opaque geometry. As a result, features that rely on the normal-roughness buffer will not affect transparent materials.
Certains moteurs de rendu proposent des techniques de transparence indépendantes de l'ordre pour pallier ce problème, mais cela est coûteux pour le GPU. Godot ne fournit pas cette fonctionnalité actuellement. Il y a encore plusieurs façons d'éviter ce problème :
Ne faites des matériaux transparents que si vous en avez besoin. Si un matériau a seulement une petite partie transparente, envisagez de le diviser en plusieurs matériaux séparés. Cela permettra à la partie opaque de projeter des ombres et d'améliorer les performances.
Si votre texture a principalement des zones entièrement opaques et entièrement transparentes, vous pouvez utiliser des tests alpha au lieu de mélange alpha. Ce mode de transparence est plus rapide pour rendre et ne souffre pas de problèmes de transparence. Activez Transparence > Transparence à ciseaux alpha dans StandardMaterial3D, et ajuster Transparence > alpha Scissor Threshold en conséquence si nécessaire. Notez que MSAA fera pas d'antialiasing les bords de la texture à moins que l'antialiasing alpha ne soit activé dans les propriétés du matériau. Cependant, FXAA, TAA et supersampling pourront antialias les bords de la texture, peu importe si l'antialiasing alpha est activé sur le matériau.
Si vous devez rendre les zones semi-transparentes d'une texture, le découpage alpha ne conviendra pas. À la place, changer la propriété Transparence > Transparence du StandardMaterial3D sur Pré-passe de profondeur peut parfois fonctionner (avec un coût de performances). Vous pouvez aussi essayer le mode Alpha Hash.
If you want a material to fade with distance, use the StandardMaterial3D distance fade mode Pixel Dither or Object Dither instead of Pixel Alpha. This will make the material opaque, which also speeds up rendering.
Transparency sorting comparison (alpha-blended materials on the left, alpha scissor materials on the right)