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 |
---|
|
|
|
|
|
|