Différences entre GLES2 et GLES3

Cette page explore les différences entre GLES2 et GLES3 dues à leur conception et qui ne sont pas le résultat de bugs. Il peut exister des différences non intentionnelles, mais elles doivent être signalées comme des bugs.

Note

"GLES2" et "GLES3" sont les noms utilisés dans Godot pour les deux backends de rendu basés sur OpenGL. En termes d'API graphiques, le backend GLES2 correspond à OpenGL 2.1 sur ordinateur de bureau, OpenGL ES 2.0 sur mobile et WebGL 1.0 sur le web. Le backend GLES3 est correspond à OpenGL 3.3 sur ordinateur de bureau, OpenGL ES 3.0 sur mobile et WebGL 2.0 sur le web.

Particules

GLES2 ne peut pas utiliser les nœuds Particles ou Particles2D car ils nécessitent des fonctionnalités GPU avancées. Utilisez plutôt CPUParticles ou CPUParticles2D, qui fournit une interface similaire à un ParticlesMaterial.

Astuce

Particles et Particles2D peuvent être converties en leur nœud équivalent CPU avec l'option "Convert to CPUParticles" dans l'éditeur.

Mip-maps SCREEN_TEXTURE

Dans GLES2, SCREEN_TEXTURE (accessible via un ShaderMaterial) n'a pas de mip-maps calculées. Ainsi, lors d'un accès à un autre LOD, la texture n'apparaîtra pas floue.

DEPTH_TEXTURE

Bien que GLES2 supporte DEPTH_TEXTURE dans les shaders, il peut ne pas fonctionner sur certains vieux hardware (en particulier les mobiles).

Espace de couleurs

GLES2 et GLES3 sont dans des espaces de couleur différents. Cela signifie que les couleurs apparaîtront légèrement différentes entre eux, en particulier lorsque l'éclairage est utilisé.

Si votre jeu doit utiliser à la fois GLES2 et GLES3, vous pouvez utiliser une vérification avec l'instruction if et voir si la sortie est en sRGB, en utilisant OUTPUT_IS_SRGB. OUTPUT_IS_SRGB est true dans GLES2 et false dans GLES3.

HDR

GLES2 n'est pas capable d'utiliser les fonctions de rendu de High Dynamic Range (HDR). Si le HDR est défini pour votre projet, ou pour une fenêtre donnée, Godot utilisera toujours le Low Dynamic Range (LDR) qui limite les valeurs de la fenêtre à la plage 0-1.

Fonctionnalités SpatialMaterial

Dans GLES2, les fonctionnalités de rendu avancées suivantes de SpatialMaterial sont manquantes :

  • Réfraction
  • Diffusion sous la surface
  • Anisotropie
  • Vernis transparent
  • Cartographie de la profondeur

Lorsque vous utilisez SpatialMaterials, ils n'apparaissent même pas dans l'éditeur.

Dans les ShaderMaterials personnalisés, vous pouvez définir des valeurs pour ces fonctionnalités mais elles seront non fonctionnelles. Par exemple, vous pourrez toujours définir le SSS intégré (qui ajoute normalement la diffusion sous la surface) dans votre shader, mais rien ne se passera.

Fonctionnalités de l’environnement

Dans GLES2, les fonctionnalités suivantes dans le Environnement manquent :

  • Exposition automatique
  • Tonemapping
  • Screen space reflections
  • Occlusion de l'espace ambiant de l'écran

Cela signifie que dans les environnements GLES2, vous ne pouvez que régler :

  • Sky(ciel) (y compris le sky(ciel) de procédure)
  • Lumière ambiante
  • Brouillard
  • Profondeur de champ
  • Glow (aussi appelée bloom)
  • Ajustement

GIProbes

GIProbes ne fonctionne pas dans GLES2. Utilisez plutôt Baked Lightmaps. Pour une description du fonctionnement des baked lightmaps, voir le tutoriel Baked Lightmaps.

Ombres de contact

La propriété shadow_contact de Lights n'est pas supportée dans GLES2 et ne fait donc rien.

Performance de la lumière

Dans GLES2, les performances évoluent mal avec plusieurs lumières, car chaque lumière est traitée dans une passe de rendu distincte (contrairement à GLES3 qui le fait en une seule passe). Essayez de limiter les scènes à un minimum de lumières afin d'obtenir les meilleures performances.

Compression de texture

Sur les mobiles, GLES2 nécessite une compression de texture ETC, tandis que GLES3 nécessite ETC2. ETC2 est activé par défaut, donc si vous exportez vers mobile en utilisant GLES2, assurez-vous de définir le paramètre de projet rendering/vram_compression/import_etc et ensuite réimportez les textures.

Avertissement

Comme le CTE ne prend pas en charge la transparence, vous devez réimporter les textures qui contiennent un canal alpha pour utiliser le mode de compression Uncompressed, Lossy ou Lossless (au lieu de Video RAM). Cela peut être fait dans le dock d'importation après les avoir sélectionnées dans le dock du système de fichiers.

Mélange de formes

Le mélange de formes(Blend shapes) n'est pas pris en charge dans le GLES2.

Langue de shading

GLES3 offre de nombreuses fonctions intégrées que GLES2 n'offre pas. Voici une liste des fonctions qui ne sont pas disponibles ou qui ont un support limité dans GLES2.

Pour une liste complète des fonctions GLSL intégrées, voir le document Shading Language doc.

Fonction  
vec_type modf ( vec_type x, out vec_type i )  
vec_int_type floatBitsToInt ( vec_type x )  
vec_uint_type floatBitsToUint ( vec_type x )  
vec_type intBitsToFloat ( vec_int_type x )  
vec_type uintBitsToFloat ( vec_uint_type x )  
ivec2 textureSize ( sampler2D_type s, int lod ) Voir la solution de contournement ci-dessous
ivec2 textureSize ( samplerCube s, int lod ) Voir la solution de contournement ci-dessous
vec4_type texture ( sampler_type s, vec_type uv [, float bias] ) bias non disponibles dans le shader de vertex
vec4_type textureProj ( sampler_type s, vec_type uv [, float bias] )  
vec4_type textureLod ( sampler_type s, vec_type uv, float lod ) Uniquement disponible dans le shader de vertex sur certains hardware
vec4_type textureProjLod ( sampler_type s, vec_type uv, float lod )  
vec4_type textureGrad ( sampler_type s, vec_type uv, vec_type dPdx, vec_type dPdy)  
vec_type dFdx ( vec_type p )  
vec_type dFdy ( vec_type p )  
vec_type fwidth ( vec_type p )  

Note

Les fonctions qui ne sont pas dans le GLES2 ont été ajoutées avec la bibliothèque standard de shaders de Godots. Ces fonctions peuvent être moins performantes dans GLES2 par rapport à GLES3.

Solution de contournement pour textureSize()

GLES2 ne supporte pas textureSize(). Vous pouvez obtenir la taille d'une texture à l'ancienne en passant une variable uniform avec la taille de la texture vous-même.

// In the shader:
uniform sampler2D textureName;
uniform vec2 textureName_size;
# In GDScript:
material_name.set_shader_param("textureName", my_texture)
material_name.set_shader_param("textureName_size", my_texture_size)

Variables intégrées et modes de rendu

Godot fournit également de nombreuses variables intégrées et modes de rendu. Certains ne sont pas pris en charge dans GLES2. Vous trouverez ci-dessous une liste des variables intégrées et des modes de rendu qui, lorsqu'ils sont écrits, n'auront aucun effet ou pourraient même causer des problèmes lors de l'utilisation du backend GLES2.

Mode de rendu / variable
ensure_correct_normals
INSTANCE_ID
DEPTH
ANISOTROPY
ANISOTROPY_FLOW
SSS_STRENGTH