diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-10-27 17:20:33 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-10-27 23:49:15 +0300 |
commit | 4f7665c84410e9e25360b0d80ce073c54242e5d4 (patch) | |
tree | 58b248d3fd41d1312e6f7bfd455cb583f251137b /source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl | |
parent | 18ba7e26ad445981fb2750ec4bef1273f11d1554 (diff) |
Eevee: Volumetrics: Add Volume object support.
This is quite basic as it only support boundbing boxes.
But the material can refine the volume shape in anyway the user like.
To overcome this limitation, a voxelisation should be done on the mesh (generating a SDF maybe?) and tested against every volumetric cell.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl index f944184058d..208e8165689 100644 --- a/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl +++ b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl @@ -1,11 +1,36 @@ +#ifdef MESH_SHADER +/* TODO tight slices */ layout(triangles) in; layout(triangle_strip, max_vertices=3) out; +#else /* World */ +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; +#endif in vec4 vPos[]; flat out int slice; +#ifdef MESH_SHADER +/* TODO tight slices */ +void main() { + gl_Layer = slice = int(vPos[0].z); + + gl_Position = vPos[0].xyww; + EmitVertex(); + + gl_Position = vPos[1].xyww; + EmitVertex(); + + gl_Position = vPos[2].xyww; + EmitVertex(); + + EndPrimitive(); +} + +#else /* World */ + /* This is just a pass-through geometry shader that send the geometry * to the layer corresponding to it's depth. */ @@ -22,4 +47,6 @@ void main() { EmitVertex(); EndPrimitive(); -}
\ No newline at end of file +} + +#endif |