[Bf-blender-cvs] [091f2b5ec88] soc-2020-fluid-tools: Fluid: Added an option for color mapping fluid grids without any interpolation
Sriharsha Kotcharlakot
noreply at git.blender.org
Mon Jun 8 15:32:54 CEST 2020
Commit: 091f2b5ec8852a19ea9bdf97ecc32c2d1aa04f4a
Author: Sriharsha Kotcharlakot
Date: Mon Jun 8 19:02:07 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB091f2b5ec8852a19ea9bdf97ecc32c2d1aa04f4a
Fluid: Added an option for color mapping fluid grids without any interpolation
===================================================================
M source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
M source/blender/draw/engines/workbench/workbench_private.h
M source/blender/draw/engines/workbench/workbench_shader.c
M source/blender/draw/engines/workbench/workbench_volume.c
M source/blender/makesdna/DNA_fluid_types.h
M source/blender/makesrna/intern/rna_fluid.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 0c2b7850f94..4f847fbe246 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -95,10 +95,20 @@ vec4 sample_tricubic(sampler3D ima, vec3 co)
return color;
}
+vec4 sample_raw(sampler3D ima, vec3 co)
+{
+ co -= 0.5;
+ vec3 dim = vec3(textureSize(ima, 0).xyz);
+ co = co - mod(co, 1.0 / dim) + 0.5 / dim + 0.5;
+ return texture(ima, co);
+}
+
#ifdef USE_TRICUBIC
# define sample_volume_texture sample_tricubic
-#else
+#elif defined(USE_TRILINEAR)
# define sample_volume_texture sample_trilinear
+#else
+# define sample_volume_texture sample_raw
#endif
void volume_properties(vec3 ls_pos, out vec3 scattering, out float extinction)
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index 20b6d368ac0..1eaa5aaa2f2 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -413,7 +413,7 @@ GPUShader *workbench_shader_outline_get(void);
GPUShader *workbench_shader_antialiasing_accumulation_get(void);
GPUShader *workbench_shader_antialiasing_get(int stage);
-GPUShader *workbench_shader_volume_get(bool slice, bool coba, bool cubic, bool smoke);
+GPUShader *workbench_shader_volume_get(bool slice, bool coba, char cubic, bool smoke);
void workbench_shader_depth_of_field_get(GPUShader **prepare_sh,
GPUShader **downsample_sh,
diff --git a/source/blender/draw/engines/workbench/workbench_shader.c b/source/blender/draw/engines/workbench/workbench_shader.c
index 99366779b22..ec04a4eb7d2 100644
--- a/source/blender/draw/engines/workbench/workbench_shader.c
+++ b/source/blender/draw/engines/workbench/workbench_shader.c
@@ -107,7 +107,7 @@ static struct {
struct GPUShader *aa_accum_sh;
struct GPUShader *smaa_sh[3];
- struct GPUShader *volume_sh[2][2][2][2];
+ struct GPUShader *volume_sh[2][2][3][2];
struct DRWShaderLibrary *lib;
} e_data = {{{{NULL}}}};
@@ -441,7 +441,7 @@ GPUShader *workbench_shader_antialiasing_get(int stage)
return e_data.smaa_sh[stage];
}
-GPUShader *workbench_shader_volume_get(bool slice, bool coba, bool cubic, bool smoke)
+GPUShader *workbench_shader_volume_get(bool slice, bool coba, char cubic, bool smoke)
{
GPUShader **shader = &e_data.volume_sh[slice][coba][cubic][smoke];
@@ -454,8 +454,13 @@ GPUShader *workbench_shader_volume_get(bool slice, bool coba, bool cubic, bool s
if (coba) {
BLI_dynstr_append(ds, "#define USE_COBA\n");
}
- if (cubic) {
- BLI_dynstr_append(ds, "#define USE_TRICUBIC\n");
+ switch (cubic) {
+ case 0:
+ BLI_dynstr_append(ds, "#define USE_TRILINEAR\n");
+ break;
+ case 1:
+ BLI_dynstr_append(ds, "#define USE_TRICUBIC\n");
+ break;
}
if (smoke) {
BLI_dynstr_append(ds, "#define VOLUME_SMOKE\n");
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index 6ed29ee5f16..af72e001e12 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -95,7 +95,7 @@ static void workbench_volume_modifier_cache_populate(WORKBENCH_Data *vedata,
const bool use_slice = (mds->slice_method == FLUID_DOMAIN_SLICE_AXIS_ALIGNED &&
mds->axis_slice_method == AXIS_SLICE_SINGLE);
- const bool cubic_interp = (mds->interp_method == VOLUME_INTERP_CUBIC);
+ const char cubic_interp = mds->interp_method;
GPUShader *sh = workbench_shader_volume_get(use_slice, mds->use_coba, cubic_interp, true);
if (use_slice) {
diff --git a/source/blender/makesdna/DNA_fluid_types.h b/source/blender/makesdna/DNA_fluid_types.h
index ff4c7105492..659b1b9f04c 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -90,6 +90,7 @@ enum {
enum {
VOLUME_INTERP_LINEAR = 0,
VOLUME_INTERP_CUBIC = 1,
+ VOLUME_INTERP_RAW = 2,
};
enum {
diff --git a/source/blender/makesrna/intern/rna_fluid.c b/source/blender/makesrna/intern/rna_fluid.c
index c010cf8c5cd..fa0527bce15 100644
--- a/source/blender/makesrna/intern/rna_fluid.c
+++ b/source/blender/makesrna/intern/rna_fluid.c
@@ -1146,6 +1146,7 @@ static void rna_def_fluid_domain_settings(BlenderRNA *brna)
0,
"Cubic",
"Smoothed high quality interpolation, but slower"},
+ {VOLUME_INTERP_RAW, "RAW", 0, "Raw", "No interpolation"},
{0, NULL, 0, NULL, NULL},
};
More information about the Bf-blender-cvs
mailing list