[Bf-blender-cvs] [58da6432d65] soc-2020-fluid-tools: Fluid: Added an option for coloring fluid gridlines with flags.
Sriharsha Kotcharlakot
noreply at git.blender.org
Sun Jul 5 17:09:27 CEST 2020
Commit: 58da6432d651a358ed7104455acef47b26fb902c
Author: Sriharsha Kotcharlakot
Date: Sun Jul 5 20:38:56 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB58da6432d651a358ed7104455acef47b26fb902c
Fluid: Added an option for coloring fluid gridlines with flags.
===================================================================
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 aa97e595a13..1fa27566f6d 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -1343,6 +1343,23 @@ class PHYSICS_PT_viewport_display_debug(PhysicButtonsPanel, Panel):
note.label(icon='INFO', text="Enable Guides first! Defaulting to Fluid Velocity.")
col.prop(domain, "vector_scale")
+class PHYSICS_PT_viewport_display_advanced(PhysicButtonsPanel, Panel):
+ bl_label = "Advanced"
+ bl_parent_id = 'PHYSICS_PT_viewport_display'
+ bl_options = {'DEFAULT_CLOSED'}
+
+ @classmethod
+ def poll(cls, context):
+ return (PhysicButtonsPanel.poll_fluid_domain(context) and context.fluid.domain_settings.show_gridlines)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ domain = context.fluid.domain_settings
+
+ col = layout.column()
+ col.prop(domain, "gridlines_color_field", text="Color Gridlines")
classes = (
FLUID_PT_presets,
@@ -1369,6 +1386,7 @@ classes = (
PHYSICS_PT_viewport_display,
PHYSICS_PT_viewport_display_color,
PHYSICS_PT_viewport_display_debug,
+ PHYSICS_PT_viewport_display_advanced,
)
diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index 9d15538569c..bf2cdc11843 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -4995,6 +4995,7 @@ void BKE_fluid_modifier_create_type_data(struct FluidModifierData *fmd)
fmd->domain->vector_draw_grid_type = VECTOR_DRAW_GRID_FLUID_VELOCITY;
fmd->domain->use_coba = false;
fmd->domain->coba_field = FLUID_DOMAIN_FIELD_DENSITY;
+ fmd->domain->gridlines_color_field = 0;
/* -- Deprecated / unsed options (below)-- */
@@ -5237,6 +5238,7 @@ void BKE_fluid_modifier_copy(const struct FluidModifierData *fmd,
tfds->use_coba = fds->use_coba;
tfds->coba_field = fds->coba_field;
tfds->grid_scale = fds->grid_scale;
+ tfds->gridlines_color_field = fds->gridlines_color_field;
/* -- 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 b3bb8beb0e2..b15ea7fc587 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1371,6 +1371,8 @@ 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);
+
/* Small cube showing voxel size. */
{
float min[3];
@@ -1424,14 +1426,12 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
DRW_shgroup_uniform_ivec3_copy(grp, "adaptiveCellOffset", fds->res_min);
DRW_shgroup_uniform_int_copy(grp, "sliceAxis", slice_axis);
DRW_shgroup_call_procedural_lines(grp, ob, line_count);
-
- BLI_addtail(&data->stl->pd->smoke_domains, BLI_genericNodeN(fmd));
}
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();
+ GPUShader *sh = OVERLAY_shader_volume_gridlines(color_with_flags);
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,8 +1439,16 @@ 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);
+ }
DRW_shgroup_call_procedural_lines(grp, ob, line_count);
}
+
+ if (draw_velocity || show_gridlines) {
+ BLI_addtail(&data->stl->pd->smoke_domains, BLI_genericNodeN(fmd));
+ }
}
static void OVERLAY_volume_free_smoke_textures(OVERLAY_Data *data)
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index ddbe505bbf6..c0d124f43b7 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(void);
+GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags);
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 6879f5dde96..034a3124d33 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -198,6 +198,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *volume_velocity_needle_sh;
GPUShader *volume_velocity_sh;
GPUShader *volume_gridlines_sh;
+ GPUShader *volume_gridlines_flags_sh;
GPUShader *wireframe_select;
GPUShader *wireframe[2];
GPUShader *xray_fade;
@@ -1386,10 +1387,19 @@ 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(void)
+struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags)
{
OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
- if (!sh_data->volume_gridlines_sh) {
+ if (!sh_data->volume_gridlines_flags_sh && color_with_flags) {
+ sh_data->volume_gridlines_flags_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_FLAGS\n");
+ }
+ else if (!sh_data->volume_gridlines_sh) {
sh_data->volume_gridlines_sh = DRW_shader_create_with_lib(
datatoc_volume_gridlines_vert_glsl,
NULL,
@@ -1397,7 +1407,7 @@ struct GPUShader *OVERLAY_shader_volume_gridlines(void)
datatoc_common_view_lib_glsl,
"#define blender_srgb_to_framebuffer_space(a) a\n");
}
- return sh_data->volume_gridlines_sh;
+ return (color_with_flags) ? sh_data->volume_gridlines_flags_sh : 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 dcf147cf029..e6e41bc29a8 100644
--- a/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/volume_gridlines_vert.glsl
@@ -10,6 +10,10 @@ uniform vec3 domainOriginOffset;
/* FluidDomainSettings.res_min */
uniform ivec3 adaptiveCellOffset;
+#ifdef SHOW_FLAGS
+uniform usampler3D flagTexture;
+#endif
+
flat out vec4 finalColor;
const vec3 corners[4] = vec3[4](vec3(-0.5, 0.5, 0.0),
@@ -19,6 +23,32 @@ const vec3 corners[4] = vec3[4](vec3(-0.5, 0.5, 0.0),
const int indices[8] = int[8](0, 1, 1, 2, 2, 3, 3, 0);
+vec4 flag_to_color(uint flag)
+{
+ /* Color mapping for flags */
+ vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
+ /* Cell types: 1 is Fluid, 2 is Obstacle, 4 is Empty, 8 is Inflow, 16 is Outflow */
+ if (bool(flag & uint(1))) {
+ color.rgb += vec3(0.0, 0.0, 0.75); /* blue */
+ }
+ if (bool(flag & uint(2))) {
+ color.rgb += vec3(0.4, 0.4, 0.4); /* gray */
+ }
+ if (bool(flag & uint(4))) {
+ color.rgb += vec3(0.25, 0.0, 0.2); /* dark purple */
+ }
+ if (bool(flag & uint(8))) {
+ color.rgb += vec3(0.0, 0.5, 0.0); /* dark green */
+ }
+ if (bool(flag & uint(16))) {
+ color.rgb += vec3(0.9, 0.3, 0.0); /* orange */
+ }
+ if (color.rgb == vec3(0.0)) {
+ color.rgb += vec3(0.5, 0.0, 0.0); /* medium red */
+ }
+ return color;
+}
+
void main()
{
int cell = gl_VertexID / 8;
@@ -48,18 +78,22 @@ void main()
rot_mat[2].z = 1.0;
}
- vec3 cell_co;
- cell_co.x = float(cell % cell_div.x);
- cell_co.y = float((cell / cell_div.x) % cell_div.y);
- cell_co.z = float(cell / (cell_div.x * cell_div.y));
- cell_co += cell_offset;
+ ivec3 cell_co;
+ cell_co.x = cell % cell_div.x;
+ cell_co.y = (cell / cell_div.x) % cell_div.y;
+ cell_co.z = cell / (cell_div.x * cell_div.y);
+
+ finalColor = vec4(0.0, 0.0, 0.0, 1.0);
- vec3 pos = domainOriginOffset + cellSize * (cell_co + vec3(adaptiveCellOffset));
+#ifdef SHOW_FLAGS
+ uint flag = texelFetch(flagTexture, cell_co + ivec3(cell_offset), 0).r;
+ finalColor = flag_to_color(flag);
+#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;
- finalColor = vec4(0.0, 0.0, 0.0, 1.0);
-
vec3 world_pos = point_object_to_world(pos);
gl_Position = point_world_to_ndc(world_pos);
}
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
index b364bd0ef95..c6782a0d579 100644
--- a/source/blender/gpu/GPU_draw.h
+++ b/source/blender/gpu/GPU_draw.h
@@ -84,6 +84,7 @@ void GPU_free_smoke_velocity(struct FluidModifierData *fmd);
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
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list