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

Reply via email to