[Bf-blender-cvs] [2d5454d18a9] soc-2020-fluid-tools: Fluid: Added an option for grid scaling in Color Mapping.

Sriharsha Kotcharlakot noreply at git.blender.org
Thu Jun 11 15:26:04 CEST 2020


Commit: 2d5454d18a9be96ac02c96bf7531fe84a739941f
Author: Sriharsha Kotcharlakot
Date:   Thu Jun 11 18:55:32 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB2d5454d18a9be96ac02c96bf7531fe84a739941f

Fluid: Added an option for grid scaling in Color Mapping.

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

M	release/scripts/startup/bl_ui/properties_physics_fluid.py
M	source/blender/blenkernel/intern/fluid.c
M	source/blender/blenlib/intern/math_color.c
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/gpu/intern/gpu_draw_smoke.c
M	source/blender/makesdna/DNA_fluid_types.h
M	source/blender/makesrna/intern/rna_fluid.c

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

diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index 76c52c80a34..f0d59e3a898 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -1297,6 +1297,8 @@ class PHYSICS_PT_viewport_display_color(PhysicButtonsPanel, Panel):
         else:
             col.prop(domain, "coba_field_liquid")
 
+        col.prop(domain, "coba_field_scale")
+
         col.use_property_split = False
 
         if (domain.domain_type == "GAS" or (not domain.coba_field_liquid == "PHI")):
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index d2ea5dba3d0..a3194605e57 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -4968,6 +4968,7 @@ void BKE_fluid_modifier_create_type_data(struct FluidModifierData *mmd)
     mmd->domain->slice_depth = 0.5f;
     mmd->domain->display_thickness = 1.0f;
     mmd->domain->coba = NULL;
+    mmd->domain->grid_scale = 1.0f;
     mmd->domain->vector_scale = 1.0f;
     mmd->domain->vector_draw_type = VECTOR_DRAW_NEEDLE;
     mmd->domain->vector_draw_grid_type = VECTOR_DRAW_GRID_FLUID_VELOCITY;
@@ -5213,6 +5214,7 @@ void BKE_fluid_modifier_copy(const struct FluidModifierData *mmd,
     tmds->vector_draw_grid_type = mds->vector_draw_grid_type;
     tmds->use_coba = mds->use_coba;
     tmds->coba_field = mds->coba_field;
+    tmds->grid_scale = mds->grid_scale;
 
     /* -- Deprecated / unsed options (below)-- */
 
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index 5a317cda613..06333e1f961 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -722,7 +722,7 @@ void phi_to_rgb(float *r_table, int width, float min, float max)
 
     float rgb[3];
 
-    value = (value * 0.2 < 1.0f) ? value * 0.2f : 1.0f;
+    value = (value < 1.0f) ? value : 1.0f;
     value = (value >= -1.0f) ? value : -1.0f;
 
     if (value >= 0.0f) {
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 312cad611e3..f1893faf669 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -17,6 +17,7 @@ uniform int samplesLen = 256;
 uniform float noiseOfs = 0.0;
 uniform float stepLength;   /* Step length in local space. */
 uniform float densityScale; /* Simple Opacity multiplicator. */
+uniform float gridScale;    /* Multiplicator for grid scaling. */
 uniform vec3 activeColor;
 
 uniform float slicePosition;
@@ -115,6 +116,12 @@ void volume_properties(vec3 ls_pos, out vec3 scattering, out float extinction)
   vec3 co = ls_pos * 0.5 + 0.5;
 #ifdef USE_COBA
   float val = sample_volume_texture(densityTexture, co).r;
+#  ifdef SHOW_PHI
+  /* Scaling the value holding 0.5 as neutral. */
+  val = 0.5 + (val - 0.5) * gridScale;
+#  else
+  val *= gridScale;
+#  endif
   vec4 tval = texture(transferTexture, val) * densityScale;
   tval.rgb = pow(tval.rgb, vec3(2.2));
   scattering = tval.rgb * 1500.0;
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index edb2046568c..63f613b93dd 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -420,7 +420,8 @@ 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, InterpType cubic, bool smoke);
+GPUShader *workbench_shader_volume_get(
+    bool slice, bool coba, InterpType cubic, bool smoke, bool show_phi);
 
 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 43749f2688a..3eac723a858 100644
--- a/source/blender/draw/engines/workbench/workbench_shader.c
+++ b/source/blender/draw/engines/workbench/workbench_shader.c
@@ -441,7 +441,8 @@ GPUShader *workbench_shader_antialiasing_get(int stage)
   return e_data.smaa_sh[stage];
 }
 
-GPUShader *workbench_shader_volume_get(bool slice, bool coba, InterpType cubic, bool smoke)
+GPUShader *workbench_shader_volume_get(
+    bool slice, bool coba, InterpType cubic, bool smoke, bool show_phi)
 {
   GPUShader **shader = &e_data.volume_sh[slice][coba][cubic][smoke];
 
@@ -465,6 +466,9 @@ GPUShader *workbench_shader_volume_get(bool slice, bool coba, InterpType cubic,
     if (smoke) {
       BLI_dynstr_append(ds, "#define VOLUME_SMOKE\n");
     }
+    if (show_phi) {
+      BLI_dynstr_append(ds, "#define SHOW_PHI\n");
+    }
 
     char *defines = BLI_dynstr_get_cstring(ds);
     BLI_dynstr_free(ds);
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index 089a4df213f..3fc0c5243be 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -96,7 +96,9 @@ 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 InterpType cubic_interp = (InterpType)mds->interp_method;
-  GPUShader *sh = workbench_shader_volume_get(use_slice, mds->use_coba, cubic_interp, true);
+  const bool show_phi = (mds->coba_field == FLUID_DOMAIN_FIELD_PHI);
+  GPUShader *sh = workbench_shader_volume_get(
+      use_slice, mds->use_coba, cubic_interp, true, show_phi);
 
   if (use_slice) {
     float invviewmat[4][4];
@@ -139,6 +141,7 @@ static void workbench_volume_modifier_cache_populate(WORKBENCH_Data *vedata,
   if (mds->use_coba) {
     DRW_shgroup_uniform_texture(grp, "densityTexture", mds->tex_field);
     DRW_shgroup_uniform_texture(grp, "transferTexture", mds->tex_coba);
+    DRW_shgroup_uniform_float_copy(grp, "gridScale", mds->grid_scale);
   }
   else {
     static float white[3] = {1.0f, 1.0f, 1.0f};
@@ -201,7 +204,7 @@ static void workbench_volume_object_cache_populate(WORKBENCH_Data *vedata,
   wpd->volumes_do = true;
 
   /* Create shader. */
-  GPUShader *sh = workbench_shader_volume_get(false, false, false, false);
+  GPUShader *sh = workbench_shader_volume_get(false, false, false, false, false);
 
   /* Compute color. */
   float color[3];
diff --git a/source/blender/gpu/intern/gpu_draw_smoke.c b/source/blender/gpu/intern/gpu_draw_smoke.c
index f218ff3283b..3b22ad93e99 100644
--- a/source/blender/gpu/intern/gpu_draw_smoke.c
+++ b/source/blender/gpu/intern/gpu_draw_smoke.c
@@ -105,8 +105,8 @@ static void create_color_ramp(const struct ColorBand *coba, float *data)
 
 static void create_phi_spectrum_texture(float *data)
 {
-#  define MAX_PHI_VALUE 7.0f
-#  define MIN_PHI_VALUE -7.0f
+#  define MAX_PHI_VALUE 1.0f
+#  define MIN_PHI_VALUE -1.0f
 
   float *spec_pixels = MEM_mallocN(TFUNC_WIDTH * 4 * 16 * 16 * sizeof(float), "spec_pixels");
 
diff --git a/source/blender/makesdna/DNA_fluid_types.h b/source/blender/makesdna/DNA_fluid_types.h
index 659b1b9f04c..21074c9e95f 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -592,13 +592,14 @@ typedef struct FluidDomainSettings {
   float slice_depth;
   float display_thickness;
   struct ColorBand *coba;
+  float grid_scale;
   float vector_scale;
   char vector_draw_type;
   char vector_draw_grid_type;
   char use_coba;
   char coba_field; /* Simulation field used for the color mapping. */
   char interp_method;
-  char _pad9[7]; /* Unused. */
+  char _pad9[3]; /* Unused. */
 
   /* -- Deprecated / unsed options (below). -- */
 
diff --git a/source/blender/makesrna/intern/rna_fluid.c b/source/blender/makesrna/intern/rna_fluid.c
index fa0527bce15..a29c08c1853 100644
--- a/source/blender/makesrna/intern/rna_fluid.c
+++ b/source/blender/makesrna/intern/rna_fluid.c
@@ -2333,6 +2333,14 @@ static void rna_def_fluid_domain_settings(BlenderRNA *brna)
   RNA_def_property_ui_text(prop, "Field", "Simulation field to color map");
   RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
 
+  prop = RNA_def_property(srna, "coba_field_scale", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "grid_scale");
+  RNA_def_property_range(prop, 0.001, 100000.0);
+  RNA_def_property_ui_range(prop, 0.001, 1000.0, 0.1, 3);
+  RNA_def_property_ui_text(
+      prop, "Scale", "Multiplier for scaling the selected field to color map");
+  RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
+
   prop = RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL);
   RNA_def_property_pointer_sdna(prop, NULL, "coba");
   RNA_def_property_struct_type(prop, "ColorRamp");



More information about the Bf-blender-cvs mailing list