Diferencias entre GLES2 y GLES3

Esta página documenta las diferencias entre GLES2 y GLES3 que son por diseño y no son el resultado de errores. Puede haber diferencias que no sean intencionales, pero deben reportarse como errores.

Nota

"GLES2" y "GLES3" son los nombres utilizados en Godot para los dos motores de representación basados en OpenGL. En términos de API gráficas, el motor "GLES2" se mapea a OpenGL 2.1 en escritorio, OpenGL ES 2.0 en dispositivos móviles y WebGL 1.0 en la web. El motor "GLES3" se mapea a OpenGL 3.3 en escritorio, OpenGL ES 3.0 en dispositivos móviles y WebGL 2.0 en la web.

Partículas

El motor "GLES2" no puede utilizar los nodos Particles o Particles2D ya que requieren características avanzadas de la GPU. En su lugar, utiliza los nodos CPUParticles o CPUParticles2D, que proporcionan una interfaz similar a un ParticlesMaterial.

Truco

Las partículas y partículas 2D se pueden convertir a su equivalente en CPU utilizando la opción "Convertir a CPUParticles" en el editor.

Mip-maps de SCREEN_TEXTURE

En GLES2, SCREEN_TEXTURE (accedido a través de un ShaderMaterial) no tiene mip-maps calculados. Por lo tanto, al acceder a diferentes niveles de detalle (LOD), la textura no aparecerá borrosa.

DEPTH_TEXTURE

Aunque GLES2 admite DEPTH_TEXTURE en los shaders, es posible que no funcione en algunos dispositivos antiguos, especialmente en dispositivos móviles.

Espacio de color

GLES2 y GLES3 utilizan espacios de color diferentes. Esto significa que los colores se verán ligeramente diferentes entre ellos, especialmente cuando se utiliza iluminación.

Si tu juego va a utilizar tanto GLES2 como GLES3, puedes usar una declaración if para comprobar si la salida está en sRGB, utilizando OUTPUT_IS_SRGB. OUTPUT_IS_SRGB es true en GLES2 y false en GLES3.

HDR

GLES2 no es capaz de utilizar las características de renderizado de Alto Rango Dinámico (HDR). Si se establece HDR para tu proyecto o para un viewport específico, Godot seguirá utilizando el Rango Dinámico Bajo (LDR) que limita los valores del viewport al rango 0-1.

La propiedad Debanding del Viewport y la configuración de proyecto asociada tampoco tendrán efecto cuando HDR esté deshabilitado. Esto significa que el debanding no se puede utilizar en GLES2.

Características de SpatialMaterial

En GLES2, faltan las siguientes características avanzadas de renderizado en el SpatialMaterial:

  • Refracción

  • dispersión de subsuperficie

  • Anisotrópico

  • Clearcoat

  • Mapa de profundidad

Cuando se utilizan SpatialMaterials, ni siquiera aparecerán en el editor.

En ShaderMaterials personalizados, puedes establecer valores para estas características, pero no funcionarán. Por ejemplo, aún podrás configurar el valor SSS (que normalmente añade dispersión subsuperficial) en tu shader, pero no sucederá nada.

Características de Environment

En GLES2, no se están disponibles las siguientes características de Environment:

  • Auto exposición

  • Tonemapping

  • Reflejos en espacio de pantalla

  • Oclusión ambiental en espacio de pantalla

Eso significa que en entornos GLES2 solo puedes configurar:

  • Sky (incluyendo el cielo procedural)

  • Luz ambiental

  • Niebla

  • Profundidad de campo

  • Glow (también conocido como bloom)

  • Adaptación

GIProbes (Sondas de Iluminación Global)

GIProbes no funcionan en entornos GLES2. En su lugar, utiliza Baked Lightmaps. Para obtener una descripción de cómo funcionan los lightmaps horneados, consulta el tutorial de Baked Lightmaps.

Sombras de contacto

La propiedad shadow_contact de las Luces no es compatible con GLES2 y, por lo tanto, no tiene ningún efecto.

Rendimiento de luces

Así es, eso es correcto. La propiedad shadow_contact de las luces en Godot no es compatible con el backend GLES2 y, por lo tanto, no tiene ningún efecto cuando se utiliza en ese entorno de renderizado.

Compresión de texturas

En dispositivos móviles, GLES2 requiere compresión de texturas ETC (ETC1), mientras que GLES3 requiere ETC2. ETC2 está habilitado de forma predeterminada, así que si exportas a dispositivos móviles usando GLES2, asegúrate de configurar la opción de proyecto rendering/vram_compression/import_etc y luego reimporta las texturas.

Advertencia

Dado que ETC no admite transparencia, debes volver a importar las texturas que contienen un canal alfa para utilizar el modo de compresión Sin Compresión, Con Pérdida o Sin Pérdida (en lugar de Video RAM). Esto se puede hacer en el panel de Importación después de seleccionar las texturas en el panel del Sistema de Archivos.

Mezcla de formas

En GLES2, las formas de mezcla (blend shapes) se implementan en la CPU en lugar de la GPU. En consecuencia, es posible que no tengan un rendimiento tan óptimo como las formas de mezcla en GLES3. Para evitar problemas de rendimiento al utilizar formas de mezcla en GLES2, intenta minimizar la cantidad de formas de mezcla que se actualizan en cada cuadro (frame).

Lenguaje de shading

GLES3 proporciona muchas funciones integradas que GLES2 no tiene. A continuación, se muestra una lista de funciones que no están disponibles o tienen un soporte limitado en GLES2.

Para una lista completa de las funciones GLSL integradas, por favor lee la referencia en Shading Language .

Función

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 )

Ver la solución alternativa a continuación

ivec2 textureSize ( samplerCube s, int lod )

Ver la solución alternativa a continuación

vec4_type texture ( sampler_type s, vec_type uv [, float bias] )

bias no está disponible en el shader de vértices

vec4_type textureProj ( sampler_type s, vec_type uv [, float bias] )

vec4_type textureLod ( sampler_type s, vec_type uv, float lod )

Solo está disponible en el shader de vértices en algunos dispositivos

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 )

Nota

Las funciones que no están presentes en GLSL de GLES2 fueron agregadas con la biblioteca estándar de shaders propia de Godot. Estas funciones pueden tener un rendimiento inferior en GLES2 en comparación con GLES3.

Solución alternativa para textureSize()

GLES2 no admite textureSize(). Puedes obtener el tamaño de una textura de la forma tradicional pasando tú mismo el tamaño de la textura como una variable uniforme.

// 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 integradas y modos de renderizado

Godot también proporciona muchas variables y modos de renderizado integrados. Algunos de ellos no pueden ser admitidos en GLES2. A continuación, se muestra una lista de variables y modos de renderizado integrados que, cuando se escriben, no tendrán efecto o incluso podrían causar problemas al usar el backend de GLES2.

Variable / Modo de renderizado

ensure_correct_normals

INSTANCE_ID

DEPTH

ANISOTROPY

ANISOTROPY_FLOW

SSS_STRENGTH