diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-10-24 15:49:00 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-10-27 23:49:15 +0300 |
commit | 66d8f82b832b58cba3273c0a4196fae6db0e1efd (patch) | |
tree | 682a3aba8fbd23ccd72a4e4f2a02fb36ad0a0d01 /source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl | |
parent | 1c0c63ce5b3914be2d0828260e5ac777a7596d36 (diff) |
Eevee: Overhaul the volumetric system.
The system now uses several 3D textures in order to decouple every steps of the volumetric rendering.
See https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite for more details.
On the technical side, instead of using a compute shader to populate the 3D textures we use layered rendering with a geometry shader to render 1 fullscreen triangle per 3D texture slice.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl new file mode 100644 index 00000000000..a99acd41fbd --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl @@ -0,0 +1,27 @@ + +out vec4 vPos; + +void main() +{ + /* Generate Triangle : less memory fetches from a VBO */ + int v_id = gl_VertexID % 3; /* Vertex Id */ + int t_id = gl_VertexID / 3; /* Triangle Id */ + + /* Crappy diagram + * ex 1 + * | \ + * | \ + * 1 | \ + * | \ + * | \ + * 0 | \ + * | \ + * | \ + * -1 0 --------------- 2 + * -1 0 1 ex + **/ + vPos.x = float(v_id / 2) * 4.0 - 1.0; /* int divisor round down */ + vPos.y = float(v_id % 2) * 4.0 - 1.0; + vPos.z = float(t_id); + vPos.w = 1.0; +} |