[Bf-blender-cvs] [2507d219711] soc-2020-fluid-tools: Fluid: Added range highlighting options for gridlines
Sriharsha Kotcharlakot
noreply at git.blender.org
Fri Jul 10 14:23:55 CEST 2020
Commit: 2507d2197114d8944d0fd9aae75a98d86397333e
Author: Sriharsha Kotcharlakot
Date: Fri Jul 10 17:37:22 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB2507d2197114d8944d0fd9aae75a98d86397333e
Fluid: Added range highlighting options for gridlines
===================================================================
M release/scripts/startup/bl_ui/properties_physics_fluid.py
M source/blender/blenkernel/intern/fluid.c
M source/blender/draw/engines/overlay/overlay_extra.c
M source/blender/draw/engines/overlay/overlay_private.h
M source/blender/draw/engines/overlay/overlay_shader.c
M source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
M source/blender/gpu/GPU_draw.h
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 1fa27566f6d..1070b0976d9 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -1361,6 +1361,18 @@ class PHYSICS_PT_viewport_display_advanced(PhysicButtonsPanel, Panel):
col = layout.column()
col.prop(domain, "gridlines_color_field", text="Color Gridlines")
+ if (domain.gridlines_color_field == 'RANGE'):
+ if (domain.use_color_ramp and domain.coba_field != "FLAGS"):
+ col.prop(domain, "gridlines_lower_bound")
+ col.prop(domain, "gridlines_upper_bound")
+ col.prop(domain, "gridlines_range_color")
+ else:
+ note = layout.split()
+ if (not domain.use_color_ramp):
+ note.label(icon='INFO', text="Enable Color Mapping to use range highlighting!")
+ else:
+ note.label(icon='INFO', text="Range highlighting for flags is not available!")
+
classes = (
FLUID_PT_presets,
PHYSICS_PT_fluid,
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index bf2cdc11843..b8accf6b0c6 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -4996,6 +4996,12 @@ void BKE_fluid_modifier_create_type_data(struct FluidModifierData *fmd)
fmd->domain->use_coba = false;
fmd->domain->coba_field = FLUID_DOMAIN_FIELD_DENSITY;
fmd->domain->gridlines_color_field = 0;
+ fmd->domain->gridlines_lower_bound = 0.0f;
+ fmd->domain->gridlines_upper_bound = 1.0f;
+ fmd->domain->gridlines_range_color[0] = 1.0f;
+ fmd->domain->gridlines_range_color[1] = 0.0f;
+ fmd->domain->gridlines_range_color[2] = 0.0f;
+ fmd->domain->gridlines_range_color[3] = 1.0f;
/* -- Deprecated / unsed options (below)-- */
@@ -5239,6 +5245,12 @@ void BKE_fluid_modifier_copy(const struct FluidModifierData *fmd,
tfds->coba_field = fds->coba_field;
tfds->grid_scale = fds->grid_scale;
tfds->gridlines_color_field = fds->gridlines_color_field;
+ tfds->gridlines_lower_bound = fds->gridlines_lower_bound;
+ tfds->gridlines_upper_bound = fds->gridlines_upper_bound;
+ tfds->gridlines_range_color[0] = fds->gridlines_range_color[0];
+ tfds->gridlines_range_color[1] = fds->gridlines_range_color[1];
+ tfds->gridlines_range_color[2] = fds->gridlines_range_color[2];
+ tfds->gridlines_range_color[3] = fds->gridlines_range_color[3];
/* -- Deprecated / unsed options (below)-- */
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index b15ea7fc587..77c7d4e0b6d 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1371,7 +1371,10 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
(fds->interp_method == VOLUME_INTERP_RAW ||
fds->coba_field == FLUID_DOMAIN_FIELD_FLAGS));
- const bool color_with_flags = (fds->gridlines_color_field == FLUID_DOMAIN_FIELD_FLAGS);
+ const bool color_with_flags = (fds->gridlines_color_field == FLUID_GRIDLINE_COLOR_TYPE_FLAGS);
+
+ const bool color_range = (fds->gridlines_color_field == FLUID_GRIDLINE_COLOR_TYPE_RANGE &&
+ fds->use_coba && fds->coba_field != FLUID_DOMAIN_FIELD_FLAGS);
/* Small cube showing voxel size. */
{
@@ -1431,7 +1434,7 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
if (show_gridlines) {
int line_count = 4 * fds->res[0] * fds->res[1] * fds->res[2] / fds->res[slice_axis];
- GPUShader *sh = OVERLAY_shader_volume_gridlines(color_with_flags);
+ GPUShader *sh = OVERLAY_shader_volume_gridlines(color_with_flags, color_range);
DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[0]);
DRW_shgroup_uniform_ivec3_copy(grp, "volumeSize", fds->res);
DRW_shgroup_uniform_float_copy(grp, "slicePosition", fds->slice_depth);
@@ -1439,10 +1442,20 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
DRW_shgroup_uniform_vec3_copy(grp, "domainOriginOffset", fds->p0);
DRW_shgroup_uniform_ivec3_copy(grp, "adaptiveCellOffset", fds->res_min);
DRW_shgroup_uniform_int_copy(grp, "sliceAxis", slice_axis);
+
if (color_with_flags) {
GPU_create_fluid_flags(fmd);
DRW_shgroup_uniform_texture(grp, "flagTexture", fds->tex_flags);
}
+
+ if (color_range) {
+ GPU_create_fluid_range_field(fmd);
+ DRW_shgroup_uniform_texture(grp, "fieldTexture", fds->tex_range_field);
+ DRW_shgroup_uniform_float_copy(grp, "lowerBound", fds->gridlines_lower_bound);
+ DRW_shgroup_uniform_float_copy(grp, "upperBound", fds->gridlines_upper_bound);
+ DRW_shgroup_uniform_vec4_copy(grp, "rangeColor", fds->gridlines_range_color);
+ }
+
DRW_shgroup_call_procedural_lines(grp, ob, line_count);
}
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index c0d124f43b7..722f6b840ae 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -623,7 +623,7 @@ GPUShader *OVERLAY_shader_particle_shape(void);
GPUShader *OVERLAY_shader_pointcloud_dot(void);
GPUShader *OVERLAY_shader_sculpt_mask(void);
GPUShader *OVERLAY_shader_volume_velocity(bool use_needle);
-GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags);
+GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags, bool color_range);
GPUShader *OVERLAY_shader_wireframe(bool custom_bias);
GPUShader *OVERLAY_shader_wireframe_select(void);
GPUShader *OVERLAY_shader_xray_fade(void);
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 034a3124d33..5a4bb367f81 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -199,6 +199,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *volume_velocity_sh;
GPUShader *volume_gridlines_sh;
GPUShader *volume_gridlines_flags_sh;
+ GPUShader *volume_gridlines_range_sh;
GPUShader *wireframe_select;
GPUShader *wireframe[2];
GPUShader *xray_fade;
@@ -1387,7 +1388,7 @@ struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle)
return (use_needle) ? sh_data->volume_velocity_needle_sh : sh_data->volume_velocity_sh;
}
-struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags)
+struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags, bool color_range)
{
OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
if (!sh_data->volume_gridlines_flags_sh && color_with_flags) {
@@ -1399,6 +1400,15 @@ struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags)
"#define blender_srgb_to_framebuffer_space(a) a\n"
"#define SHOW_FLAGS\n");
}
+ else if (!sh_data->volume_gridlines_range_sh && color_range) {
+ sh_data->volume_gridlines_range_sh = DRW_shader_create_with_lib(
+ datatoc_volume_gridlines_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ "#define blender_srgb_to_framebuffer_space(a) a\n"
+ "#define SHOW_RANGE\n");
+ }
else if (!sh_data->volume_gridlines_sh) {
sh_data->volume_gridlines_sh = DRW_shader_create_with_lib(
datatoc_volume_gridlines_vert_glsl,
@@ -1407,7 +1417,15 @@ struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags)
datatoc_common_view_lib_glsl,
"#define blender_srgb_to_framebuffer_space(a) a\n");
}
- return (color_with_flags) ? sh_data->volume_gridlines_flags_sh : sh_data->volume_gridlines_sh;
+
+ if (color_with_flags) {
+ return sh_data->volume_gridlines_flags_sh;
+ }
+ if (color_range) {
+ return sh_data->volume_gridlines_range_sh;
+ }
+
+ return sh_data->volume_gridlines_sh;
}
GPUShader *OVERLAY_shader_wireframe_select(void)
diff --git a/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl b/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
index e6e41bc29a8..ae4d684d5b3 100644
--- a/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
@@ -14,6 +14,13 @@ uniform ivec3 adaptiveCellOffset;
uniform usampler3D flagTexture;
#endif
+#ifdef SHOW_RANGE
+uniform sampler3D fieldTexture;
+uniform float lowerBound = 0.0;
+uniform float upperBound = 0.0;
+uniform vec4 rangeColor;
+#endif
+
flat out vec4 finalColor;
const vec3 corners[4] = vec3[4](vec3(-0.5, 0.5, 0.0),
@@ -90,6 +97,13 @@ void main()
finalColor = flag_to_color(flag);
#endif
+#ifdef SHOW_RANGE
+ float value = texelFetch(fieldTexture, cell_co + ivec3(cell_offset), 0).r;
+ if (value >= lowerBound && value <= upperBound) {
+ finalColor = rangeColor;
+ }
+#endif
+
vec3 pos = domainOriginOffset + cellSize * (vec3(cell_co + adaptiveCellOffset) + cell_offset);
vec3 rotated_pos = rot_mat * corners[indices[gl_VertexID % 8]];
pos += rotated_pos * cellSize;
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
index c6782a0d579..78f194556ae 100644
--- a/source/blender/gpu/GPU_draw.h
+++ b/source/blender/gpu/GPU_draw.h
@@ -85,6 +85,7 @@ void GPU_create_smoke(struct FluidModifierData *fmd, int highres);
void GPU_create_smoke_coba_field(struct FluidModifierData *fmd);
void GPU_create_smoke_velocity(struct FluidModifierData *fmd);
void GPU_create_fluid_flags(struct FluidModifierData *fmd);
+void GPU_create_fluid_range_field(struct FluidModifierData *fmd);
/* Delayed free of OpenGL buffers by main thread */
void GPU_free_unused_buffers(void);
diff --git a/source/blender/gpu/intern/gpu_draw_smoke.c b/source/blender/gpu/intern/gpu_draw_smoke.c
index 15d0497dd33..4e5756db9d2 100644
--- a/source/blender/gpu/intern/gpu_dra
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list