From 58add6a6d116df4f7261d59ee71837bd6fdad257 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Sat, 2 Mar 2019 15:23:59 -0800 Subject: [PATCH] added more information to gles2 gles3 --- tutorials/misc/gles2_gles3_differences.rst | 71 +++++++++++++++------- 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/tutorials/misc/gles2_gles3_differences.rst b/tutorials/misc/gles2_gles3_differences.rst index a4f08d644..d8e5c1363 100644 --- a/tutorials/misc/gles2_gles3_differences.rst +++ b/tutorials/misc/gles2_gles3_differences.rst @@ -16,7 +16,7 @@ Particles GLES2 cannot use the :ref:`Particles ` or :ref:`Particles2D ` nodes as they require advanced GPU features. Instead, use :ref:`CPUParticles ` or -`:ref:`CPUParticles2D `, which provides a similar interface to a +:ref:`CPUParticles2D `, which provides a similar interface to a :ref:`ParticlesMaterial `. .. tip:: Particles and Particles2D can be converted to their CPU equivalent node with the "Convert to @@ -28,30 +28,27 @@ SCREEN_TEXTURE mip-maps In GLES2, ``SCREEN_TEXTURE`` (accessed via a :ref:`ShaderMaterial `) does not have computed mip-maps. So when accessing at a different LOD, the texture will not appear blurry. +DEPTH_TEXTURE +------------- + +While GLES2 supports ``DEPTH_TEXTURE`` in shaders, it may not work on some old hardware (especially mobile). + Color space ----------- -Shading in GLES3 takes place in linear color space while in GLES2 it takes place in sRGB space. -While this is a very important distinction for graphics programmers, for everyone else it means -that, in GLES3 shaders, you need to convert to sRGB before outputting your final color or else -your colors will appear washed out and over-bright. +GLES2 and GLES3 are in different color spaces. This means that colors will appear slightly +different between them especially when lighting is used. -You do so with the following line of code at the end of the fragment shader: +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. -.. code-block:: glsl +HDR +--- - ALBEDO = mix(pow((ALBEDO + vec3(0.055)) * (1.0 / (1.0 + 0.055)), vec3(2.4)), ALBEDO * (1.0 / 12.92), lessThan(ALBEDO, vec3(0.04045))); - -GLES2 does not need this. If your game is going to use both GLES2 and GLES3, wrap it in an ``if`` -statement checking to see if the output is in sRGB, using ``OUTPUT_IS_SRGB``. - -.. code-block:: glsl - - if (!OUTPUT_IS_SRGB) { - ALBEDO = mix(pow((ALBEDO + vec3(0.055)) * (1.0 / (1.0 + 0.055)), vec3(2.4)), ALBEDO * (1.0 / 12.92), lessThan(ALBEDO, vec3(0.04045))); - } - -``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 features ------------------------ @@ -64,8 +61,10 @@ In GLES2, the following advanced rendering features in the :ref:`SpatialMaterial - Clearcoat - Depth mapping -The option to use them may appear in custom :ref:`ShaderMaterials `, however, they -will be non-functional. For example, you will still be able to set ``SSS`` (which normally adds +When using SpatialMaterials they will not even appear in the editor. + +In custom :ref:`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 @@ -86,3 +85,33 @@ That means that in GLES2 environments you can only set: - Sky (including procedural sky) - Ambient light - Fog + +GIProbes +-------- + +:ref:`GIProbes ` do not work in GLES2. Instead use :ref:`Baked Lightmaps `. +For a description of how baked lightmaps work see the :ref:`Baked Lightmaps tutorial `. + +Contact shadows +--------------- + +The ``shadow_contact`` property of :ref:`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.