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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2020-03-16 16:42:56 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2020-03-18 13:23:05 +0300
commit7537cad5761e4778da7aed02410c5811114c24e5 (patch)
tree94b0187257e08ecaeaad5cef9eaaa4ec49aa04fd /source/blender/draw/engines
parent1162ba206dd7792414d3ae716877ba1383de8dab (diff)
Volumes: add render settings for volume datablock
* Space: volume density and step size in object or world space * Step Size: override automatic step size * Clipping: values below this are ignored for tighter volume bounds The last two are Cycles only currently. Ref T73201
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/eevee/eevee_volumes.c4
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl7
-rw-r--r--source/blender/draw/engines/workbench/workbench_volume.c3
3 files changed, 13 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
index 0e82ac237c0..e0008558135 100644
--- a/source/blender/draw/engines/eevee/eevee_volumes.c
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -451,6 +451,10 @@ static bool eevee_volume_object_grids_init(Object *ob, ListBase *gpu_grids, DRWS
DRW_shgroup_uniform_vec3_copy(grp, "volumeOrcoLoc", (float[3]){0.5f, 0.5f, 0.5f});
DRW_shgroup_uniform_vec3_copy(grp, "volumeOrcoSize", (float[3]){0.5f, 0.5f, 0.5f});
+ /* Set density scale. */
+ const float density_scale = BKE_volume_density_scale(volume, ob->obmat);
+ DRW_shgroup_uniform_float_copy(grp, "volumeDensityScale", density_scale);
+
/* Bind volume grid textures. */
LISTBASE_FOREACH (GPUMaterialVolumeGrid *, gpu_grid, gpu_grids) {
VolumeGrid *volume_grid = BKE_volume_grid_find(volume, gpu_grid->name);
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
index f5e92cd7495..312fc07054a 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
@@ -8,6 +8,7 @@
uniform vec3 volumeOrcoLoc;
uniform vec3 volumeOrcoSize;
uniform mat4 volumeObjectToTexture;
+uniform float volumeDensityScale = 1.0;
#endif
flat in int slice;
@@ -52,6 +53,12 @@ void main()
Closure cl = nodetree_exec();
#endif
+#ifdef MESH_SHADER
+ cl.scatter *= volumeDensityScale;
+ cl.absorption *= volumeDensityScale;
+ cl.emission *= volumeDensityScale;
+#endif
+
volumeScattering = vec4(cl.scatter, 1.0);
volumeExtinction = vec4(cl.absorption + cl.scatter, 1.0);
volumeEmissive = vec4(cl.emission, 1.0);
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index 1eccc99d9e9..b9ea61fd013 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -229,7 +229,8 @@ static void workbench_volume_object_cache_populate(WORKBENCH_Data *vedata,
step_length = len_v3(slice_ct);
/* Compute density scale. */
- const float density_scale = volume->display.density;
+ const float density_scale = volume->display.density *
+ BKE_volume_density_scale(volume, ob->obmat);
/* Set uniforms. */
DRWShadingGroup *grp = DRW_shgroup_create(sh, vedata->psl->volume_ps);