Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2017-10-27 17:20:33 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-10-27 23:49:15 +0300
commit4f7665c84410e9e25360b0d80ce073c54242e5d4 (patch)
tree58b248d3fd41d1312e6f7bfd455cb583f251137b /source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl
parent18ba7e26ad445981fb2750ec4bef1273f11d1554 (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.glsl29
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