[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