[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