[Bf-blender-cvs] [b23c68a9373] blender2.8: Workbench: Improve volume render by removing noise using temporal AA

Clément Foucault noreply at git.blender.org
Wed Nov 7 00:19:52 CET 2018


Commit: b23c68a93730ee77d69cfacc305a01206b9d86cb
Author: Clément Foucault
Date:   Wed Nov 7 00:17:36 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBb23c68a93730ee77d69cfacc305a01206b9d86cb

Workbench: Improve volume render by removing noise using temporal AA

===================================================================

M	source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
M	source/blender/draw/engines/workbench/workbench_volume.c

===================================================================

diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
index d2a4c49f7de..023ebb8e111 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -14,6 +14,7 @@ uniform sampler1D flameColorTexture;
 uniform sampler1D transferTexture;
 
 uniform int samplesLen = 256;
+uniform float noiseOfs = 0.0f;
 uniform float stepLength; /* Step length in local space. */
 uniform float densityScale; /* Simple Opacity multiplicator. */
 uniform vec4 viewvecs[3];
@@ -115,7 +116,7 @@ vec4 volume_integration(
 	float final_transmittance = 1.0;
 
 	ivec2 tx = ivec2(gl_FragCoord.xy) % 4;
-	float noise = dither_mat[tx.x][tx.y];
+	float noise = fract(dither_mat[tx.x][tx.y] + noiseOfs);
 
 	float ray_len = noise * ray_inc;
 	for (int i = 0; i < samplesLen && ray_len < ray_max; ++i, ray_len += ray_inc) {
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index 38ad5c9bfba..0f6b3e5954a 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -27,6 +27,8 @@
 
 #include "BKE_modifier.h"
 
+#include "BLI_rand.h"
+
 #include "DNA_modifier_types.h"
 #include "DNA_object_force_types.h"
 #include "DNA_smoke_types.h"
@@ -91,6 +93,7 @@ void workbench_volume_cache_populate(WORKBENCH_Data *vedata, Scene *scene, Objec
 	SmokeModifierData *smd = (SmokeModifierData *)md;
 	SmokeDomainSettings *sds = smd->domain;
 	WORKBENCH_PrivateData *wpd = vedata->stl->g_data;
+	WORKBENCH_EffectInfo *effect_info = vedata->stl->effects;
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 	DRWShadingGroup *grp = NULL;
 
@@ -133,6 +136,8 @@ void workbench_volume_cache_populate(WORKBENCH_Data *vedata, Scene *scene, Objec
 		DRW_shgroup_uniform_int_copy(grp, "sliceAxis", axis);
 	}
 	else {
+		double noise_ofs;
+		BLI_halton_1D(3, 0.0, effect_info->jitter_index, &noise_ofs);
 		int max_slices = max_iii(sds->res[0], sds->res[1], sds->res[2]) * sds->slice_per_voxel;
 
 		GPUShader *sh = (sds->use_coba) ? e_data.volume_coba_sh : e_data.volume_sh;
@@ -143,6 +148,7 @@ void workbench_volume_cache_populate(WORKBENCH_Data *vedata, Scene *scene, Objec
 		 * is NOT unit length in object space so the required number of subdivisions
 		 * is tricky to get. */
 		DRW_shgroup_uniform_float_copy(grp, "stepLength", 8.0f / max_slices);
+		DRW_shgroup_uniform_float_copy(grp, "noiseOfs", noise_ofs);
 	}
 
 	if (sds->use_coba) {



More information about the Bf-blender-cvs mailing list