Отличия между GLES3 и GLES3

Эта страница описывает различия между GLES2 и GLES3 по дизайну а не в результате ошибок. Существует и много непреднамеренных различий, но о них нужно сообщить как об ошибках.


«GLES2» и «GLES3» это имена используемые в Godot для двух базирующихся на OpenGL движка отрисовки. В терминологии графических API, движок GLES2 представляет OpenGL 2.1 на десктопе, OpenGL ES 2.0 на мобильных платформах и WebGL 1.0 в вэбе. Движок GLES3 - это OpenGL 3.3 на десктопе, OpenGL ES 3.0 на мобильных платформах и WebGL 2.0 в вэбе.


GLES2 cannot use the Particles or Particles2D nodes as they require advanced GPU features. Instead, use CPUParticles or CPUParticles2D, which provides a similar interface to a ParticlesMaterial.


Particles и Particles2D могут быть сконвертированы в эквивалент на CPU через опцию «Convert to CPUParticles» в редакторе.


В GLES2, SCREEN_TEXTURE (доступно через ShaderMaterial) не содержит вычисленных мип-карт. Так что при доступе к другому LOD, текстура не будет выглядеть сглаженной.


While GLES2 supports DEPTH_TEXTURE in shaders, it may not work on some old hardware (especially mobile).

Цветовое пространство

GLES2 and GLES3 are in different color spaces. This means that colors will appear slightly different between them especially when lighting is used.

If your game is going to use both GLES2 and GLES3, you can use an if statement check and see if the output is in sRGB, using OUTPUT_IS_SRGB. OUTPUT_IS_SRGB is true in GLES2 and false in GLES3.


GLES is not capable of using High Dynamic Range (HDR) rendering features. If HDR is set for your project, or for a given viewport, Godot will still user Low Dynamic Range (LDR) which limits viewport values to the 0-1 range.

Возможности SpatialMaterial

В GLES2, следующие продвинутые возможности отрисовки отсутствуют в SpatialMaterial:

  • Refraction
  • Subsurface scattering
  • Anisotropy
  • Clearcoat
  • Отображение глубины

When using SpatialMaterials they will not even appear in the editor.

In custom ShaderMaterials, you can set values for these features but they will be non-functional. For example, you will still be able to set the SSS built-in (which normally adds subsurface scattering) in your shader, but nothing will happen.

Environment features

In GLES2, the following features in the Environment are missing:

  • Авто экспозиция
  • Тонирование
  • Отражения в экранном пространстве
  • Screen space ambient occlusion
  • Глубина резкости
  • Сияние (также известное как блюм)
  • Регулировка параметров цвета

Это означает что в среде GLES2 вы можете установить только:

  • Небо (включая процедурное небо)
  • Окружающий свет
  • Fog


GIProbes do not work in GLES2. Instead use Baked Lightmaps. For a description of how baked lightmaps work see the Baked Lightmaps tutorial.

Contact shadows

The shadow_contact property of Lights is not supported in GLES2 and so does nothing.

Light performance

In GLES2, performance scales poorly with several lights, as each light is processed in a separate render pass (in opposition to GLES3 which is all done in a single pass). Try to limit scenes to as few lights as possible in order to achieve greatest performance.

Texture compression

On mobile, GLES2 requires ETC texture compression, while GLES3 requires ETC2. ETC2 is enabled by default, so if exporting to mobile using GLES2 make sure to set the project setting rendering/vram_compression/import_etc and then reimport textures.

Blend shapes

Blend shapes are not supported in GLES2.

Язык шейдеров

GLES3 provides many built-in functions that GLES2 does not. Below is a list of functions that are not available or are have limited support in GLES2.

For a complete list of built-in GLSL functions see the Shading Language doc.

Function Note
vec_type sinh ( vec_type )  
vec_type cosh ( vec_type )  
vec_type tanh ( vec_type )  
vec_type asinh ( vec_type )  
vec_type acosh ( vec_type )  
vec_type atanh ( vec_type )  
vec_type round ( vec_type )  
vec_type roundEven ( vec_type )  
vec_type trunc ( vec_type )  
vec_type modf ( vec_type x, out vec_type i )  
vec_bool_type isnan ( vec_type )  
vec_bool_type isinf ( vec_type )  
vec_int_type floatBitsToInt ( vec_type )  
vec_uint_type floatBitsToUint ( vec_type )  
vec_type intBitsToFloat ( vec_int_type )  
vec_type uintBitsToFloat ( vec_uint_type )  
mat_type outerProduct ( vec_type, vec_type )  
mat_type transpose ( mat_type )  
float determinant ( mat_type )  
mat_type inverse ( mat_type )  
ivec2 textureSize ( sampler2D_type s, int lod )  
ivec2 textureSize ( samplerCube s, int lod )  
vec4_type texture ( sampler2D_type s, vec2 uv [, float bias] ) bias not available in vertex shader
vec4_type texture ( samplerCube s, vec3 uv [, float bias] ) bias not available in vertex shader
vec4_type textureProj ( sampler2D_type s, vec3 uv [, float bias] ) bias not available in vertex shader
vec4_type textureProj ( sampler2D_type s, vec4 uv [, float bias] ) bias not available in vertex shader
vec4_type textureLod ( sampler2D_type s, vec2 uv, float lod ) Only available in vertex shader on some hardware
vec4_type textureLod ( samplerCube s, vec3 uv, float lod ) Only available in vertex shader on some hardware
vec4_type textureProjLod ( sampler2D_type s, vec3 uv, float lod ) Only available in vertex shader
vec4_type textureProjLod ( sampler2D_type s, vec4 uv, float lod ) Only available in vertex shader
vec4_type texelFetch ( sampler2D_type s, ivec2 uv, int lod )  
vec_type dFdx ( vec_type )  
vec_type dFdy ( vec_type )  
vec_type fwidth ( vec_type )  

Godot also provides many built-in variables and render modes. Some cannot be supported in GLES2. Below is a list of built-in variables and render modes that, when written to, will have no effect or could even cause issues when using the GLES2 backend.

Variable / Render Mode