Commit: 801a2fdc6fd18b3bb825d15211ac2544a6d48794
Author: Sriharsha Kotcharlakot
Date: Mon Aug 3 10:12:36 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB801a2fdc6fd18b3bb825d15211ac2544a6d48794
Fluid: Added support for MAC Grid visualization
===================================================================
M release/scripts/startup/bl_ui/properties_physics_fluid.py
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_velocity_vert.glsl
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 f71b6ed9bbf..488fd6578a7 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -1345,7 +1345,8 @@ class
PHYSICS_PT_viewport_display_debug(PhysicButtonsPanel, Panel):
if not domain.use_guide and domain.vector_grid_type ==
'GUIDE_VELOCITY':
note = layout.split()
note.label(icon='INFO', text="Enable Guides first! Defaulting to
Fluid Velocity.")
- col.prop(domain, "vector_scale_with_magnitude")
+ if domain.vector_display_type != "MAC":
+ col.prop(domain, "vector_scale_with_magnitude")
col.prop(domain, "vector_scale")
class PHYSICS_PT_viewport_display_advanced(PhysicButtonsPanel, Panel):
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c
b/source/blender/draw/engines/overlay/overlay_extra.c
index f7619d59409..fc850d81f4e 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -1429,7 +1429,14 @@ static void
OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers *cb,
if (draw_velocity) {
const bool use_needle = (fds->vector_draw_type == VECTOR_DRAW_NEEDLE);
- int line_count = (use_needle) ? 6 : 1;
+ const bool use_mac = (fds->vector_draw_type == VECTOR_DRAW_MAC);
+ int line_count = 1;
+ if (use_needle) {
+ line_count = 6;
+ }
+ else if (use_mac) {
+ line_count = 3;
+ }
line_count *= fds->res[0] * fds->res[1] * fds->res[2];
if (fds->axis_slice_method == AXIS_SLICE_SINGLE) {
@@ -1438,7 +1445,7 @@ static void OVERLAY_volume_extra(OVERLAY_ExtraCallBuffers
*cb,
GPU_create_smoke_velocity(fmd);
- GPUShader *sh = OVERLAY_shader_volume_velocity(use_needle);
+ GPUShader *sh = OVERLAY_shader_volume_velocity(use_needle, use_mac);
DRWShadingGroup *grp = DRW_shgroup_create(sh, data->psl->extra_ps[0]);
DRW_shgroup_uniform_texture(grp, "velocityX", fds->tex_velocity_x);
DRW_shgroup_uniform_texture(grp, "velocityY", fds->tex_velocity_y);
diff --git a/source/blender/draw/engines/overlay/overlay_private.h
b/source/blender/draw/engines/overlay/overlay_private.h
index f6b88a2bf26..b8aee570f5b 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -622,7 +622,7 @@ GPUShader *OVERLAY_shader_paint_wire(void);
GPUShader *OVERLAY_shader_particle_dot(void);
GPUShader *OVERLAY_shader_particle_shape(void);
GPUShader *OVERLAY_shader_sculpt_mask(void);
-GPUShader *OVERLAY_shader_volume_velocity(bool use_needle);
+GPUShader *OVERLAY_shader_volume_velocity(bool use_needle, bool use_mac);
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);
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c
b/source/blender/draw/engines/overlay/overlay_shader.c
index 077173c7157..5119e7d171a 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -196,6 +196,7 @@ typedef struct OVERLAY_Shaders {
GPUShader *sculpt_mask;
GPUShader *uniform_color;
GPUShader *volume_velocity_needle_sh;
+ GPUShader *volume_velocity_mac_sh;
GPUShader *volume_velocity_sh;
GPUShader *volume_gridlines_sh;
GPUShader *volume_gridlines_flags_sh;
@@ -1373,7 +1374,7 @@ struct GPUShader *OVERLAY_shader_uniform_color(void)
return sh_data->uniform_color;
}
-struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle)
+struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle, bool use_mac)
{
OVERLAY_Shaders *sh_data = &e_data.sh_data[0];
if (use_needle && !sh_data->volume_velocity_needle_sh) {
@@ -1385,6 +1386,15 @@ struct GPUShader *OVERLAY_shader_volume_velocity(bool
use_needle)
"#define blender_srgb_to_framebuffer_space(a) a\n"
"#define USE_NEEDLE\n");
}
+ else if (use_mac && !sh_data->volume_velocity_mac_sh) {
+ sh_data->volume_velocity_mac_sh = DRW_shader_create_with_lib(
+ datatoc_volume_velocity_vert_glsl,
+ NULL,
+ datatoc_gpu_shader_3D_smooth_color_frag_glsl,
+ datatoc_common_view_lib_glsl,
+ "#define blender_srgb_to_framebuffer_space(a) a\n"
+ "#define USE_MAC\n");
+ }
else if (!sh_data->volume_velocity_sh) {
sh_data->volume_velocity_sh = DRW_shader_create_with_lib(
datatoc_volume_velocity_vert_glsl,
@@ -1393,7 +1403,14 @@ struct GPUShader *OVERLAY_shader_volume_velocity(bool
use_needle)
datatoc_common_view_lib_glsl,
"#define blender_srgb_to_framebuffer_space(a) a\n");
}
- return (use_needle) ? sh_data->volume_velocity_needle_sh :
sh_data->volume_velocity_sh;
+ if (use_needle) {
+ return sh_data->volume_velocity_needle_sh;
+ }
+ if (use_mac) {
+ return sh_data->volume_velocity_mac_sh;
+ }
+
+ return sh_data->volume_velocity_sh;
}
struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags, bool
color_range)
diff --git
a/source/blender/draw/engines/overlay/shaders/volume_velocity_vert.glsl
b/source/blender/draw/engines/overlay/shaders/volume_velocity_vert.glsl
index 4cfd2ca500e..da48eb9d7f2 100644
--- a/source/blender/draw/engines/overlay/shaders/volume_velocity_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/volume_velocity_vert.glsl
@@ -14,7 +14,11 @@ uniform vec3 domainOriginOffset;
/* FluidDomainSettings.res_min */
uniform ivec3 adaptiveCellOffset;
+#ifdef USE_MAC
+out vec4 finalColor;
+#else
flat out vec4 finalColor;
+#endif
const vec3 corners[4] = vec3[4](vec3(0.0, 0.2, -0.5),
vec3(-0.2 * 0.866, -0.2 * 0.5, -0.5),
@@ -69,6 +73,8 @@ void main()
{
#ifdef USE_NEEDLE
int cell = gl_VertexID / 12;
+#elif defined(USE_MAC)
+ int cell = gl_VertexID / 6;
#else
int cell = gl_VertexID / 2;
#endif
@@ -103,6 +109,38 @@ void main()
velocity.y = texelFetch(velocityY, cell_co, 0).r;
velocity.z = texelFetch(velocityZ, cell_co, 0).r;
+#ifdef USE_MAC
+ vec3 color;
+
+ switch (gl_VertexID % 6) {
+ case 0: /* tail of X component */
+ pos.x += -0.5 * cellSize.x;
+ color = vec3(1.0, 0.0, 0.0); /* red */
+ break;
+ case 1: /* head of X component */
+ pos.x += (-0.5 + velocity.x * displaySize) * cellSize.x;
+ color = vec3(1.0, 1.0, 0.0); /* yellow */
+ break;
+ case 2: /* tail of Y component */
+ pos.y += -0.5 * cellSize.y;
+ color = vec3(0.0, 1.0, 0.0); /* green */
+ break;
+ case 3: /* head of Y component */
+ pos.y += (-0.5 + velocity.y * displaySize) * cellSize.y;
+ color = vec3(1.0, 1.0, 0.0); /* yellow */
+ break;
+ case 4: /* tail of Z component */
+ pos.z += -0.5 * cellSize.z;
+ color = vec3(0.0, 0.0, 1.0); /* blue */
+ break;
+ case 5: /* head of Z component */
+ pos.z += (-0.5 + velocity.z * displaySize) * cellSize.z;
+ color = vec3(1.0, 1.0, 0.0); /* yellow */
+ break;
+ }
+
+ finalColor = vec4(color, 1.0);
+#else
finalColor = vec4(weight_to_color(length(velocity)), 1.0);
float vector_length = 1.0;
@@ -116,13 +154,14 @@ void main()
mat3 rot_mat = rotation_from_vector(velocity);
-#ifdef USE_NEEDLE
+# ifdef USE_NEEDLE
vec3 rotated_pos = rot_mat * corners[indices[gl_VertexID % 12]];
pos += rotated_pos * vector_length * displaySize * cellSize;
-#else
+# else
vec3 rotated_pos = rot_mat * vec3(0.0, 0.0, 1.0);
pos += ((gl_VertexID % 2) == 1) ? rotated_pos * vector_length * displaySize
* cellSize :
vec3(0.0);
+# endif
#endif
vec3 world_pos = point_object_to_world(pos);
diff --git a/source/blender/makesdna/DNA_fluid_types.h
b/source/blender/makesdna/DNA_fluid_types.h
index 0fba71cce6c..f9ffd8efe29 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -91,6 +91,7 @@ enum {
enum {
VECTOR_DRAW_NEEDLE = 0,
VECTOR_DRAW_STREAMLINE = 1,
+ VECTOR_DRAW_MAC = 2,
};
enum {
diff --git a/source/blender/makesrna/intern/rna_fluid.c
b/source/blender/makesrna/intern/rna_fluid.c
index f2a68b30535..ef51a4270b1 100644
--- a/source/blender/makesrna/intern/rna_fluid.c
+++ b/source/blender/makesrna/intern/rna_fluid.c
@@ -1343,6 +1343,7 @@ static void rna_def_fluid_domain_settings(BlenderRNA
*brna)
static const EnumPropertyItem vector_draw_items[] = {
{VECTOR_DRAW_NEEDLE, "NEEDLE", 0, "Needle", "Display vectors as
needles"},
{VECTOR_DRAW_STREAMLINE, "STREAMLINE", 0, "Streamlines", "Display
vectors as streamlines"},
+ {VECTOR_DRAW_MAC, "MAC", 0, "MAC Grid", "Display vector field as MAC
grid"},
{0, NULL, 0, NULL, NULL},
};
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs