[Bf-blender-cvs] [fdddea676d4] master: Cleanup: DRW: Renaming of glsl utility macros

Clément Foucault noreply at git.blender.org
Fri May 10 12:25:34 CEST 2019


Commit: fdddea676d4fa40668ca82f8ccc5106437d113f2
Author: Clément Foucault
Date:   Thu May 9 15:31:54 2019 +0200
Branches: master
https://developer.blender.org/rBfdddea676d4fa40668ca82f8ccc5106437d113f2

Cleanup: DRW: Renaming of glsl utility macros

===================================================================

M	source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
M	source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
M	source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
M	source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
M	source/blender/draw/modes/shaders/common_view_lib.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
M	source/blender/draw/modes/shaders/edit_normals_vert.glsl
M	source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_tex_image.c

===================================================================

diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
index cddc8e87a1e..68e11f7414c 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
@@ -63,12 +63,12 @@ void main()
   viewNormal = mat3(ViewMatrix) * worldNormal;
 #else
   gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
-  viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
-  worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
+  worldPosition = point_object_to_world(pos);
+  viewPosition = point_world_to_view(worldPosition);
 
-  worldNormal = normalize(transform_normal_object_to_world(nor));
+  worldNormal = normalize(normal_object_to_world(nor));
   /* No need to normalize since this is just a rotation. */
-  viewNormal = transform_normal_world_to_view(worldNormal);
+  viewNormal = normal_world_to_view(worldNormal);
 #endif
 
   /* Used for planar reflections */
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
index f8850300dc4..baaa43d84b8 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -24,9 +24,9 @@ void main()
   viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
   worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
 
-  worldNormal = normalize(transform_normal_object_to_world(nor));
+  worldNormal = normalize(normal_object_to_world(nor));
   /* No need to normalize since this is just a rotation. */
-  viewNormal = transform_normal_world_to_view(worldNormal);
+  viewNormal = normal_world_to_view(worldNormal);
 #  ifdef USE_ATTR
   pass_attr(pos);
 #  endif
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index 1de6121bb5c..bb4c4fe4177 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@ -88,7 +88,7 @@ void main()
 #endif
 
 #ifdef NORMAL_VIEWPORT_PASS_ENABLED
-  normal_viewport = transform_normal_object_to_view(nor);
+  normal_viewport = normal_object_to_view(nor);
 #  ifndef HAIR_SHADER
   normal_viewport = normalize(normal_viewport);
 #  endif
diff --git a/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl b/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
index 365f2004e37..fb2735c196c 100644
--- a/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl
@@ -35,7 +35,7 @@ void main()
   /* TODO FIX: there is still a problem with this vector
    * when the bone is scaled or in persp mode. But it's
    * barelly visible at the outline corners. */
-  ssNor = normalize(transform_normal_world_to_view(normal_mat * snor).xy);
+  ssNor = normalize(normal_world_to_view(normal_mat * snor).xy);
 
   ssPos = proj(pPos);
 
diff --git a/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl b/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
index 4107aab03ff..df6a9ce2d76 100644
--- a/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
@@ -15,7 +15,7 @@ void main()
   /* This is slow and run per vertex, but it's still faster than
    * doing it per instance on CPU and sending it on via instance attribute. */
   mat3 normal_mat = transpose(inverse(mat3(InstanceModelMatrix)));
-  vec3 normal = normalize(transform_normal_world_to_view(normal_mat * nor));
+  vec3 normal = normalize(normal_world_to_view(normal_mat * nor));
 
   /* Do lighting at an angle to avoid flat shading on front facing bone. */
   const vec3 light = vec3(0.1, 0.1, 0.8);
diff --git a/source/blender/draw/modes/shaders/common_view_lib.glsl b/source/blender/draw/modes/shaders/common_view_lib.glsl
index 50d6760cafa..40c43856b43 100644
--- a/source/blender/draw/modes/shaders/common_view_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_view_lib.glsl
@@ -14,11 +14,34 @@ layout(std140) uniform viewBlock
   vec4 clipPlanes[2];
 };
 
-/* Transform shortcuts. */
-#define transform_normal_object_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
-#define transform_normal_world_to_object(nor) (transpose(mat3(ModelMatrix)) * nor)
-#define transform_normal_world_to_view(nor) (transpose(mat3(ViewMatrixInverse)) * nor)
-#define transform_normal_object_to_view(nor) \
-  (transpose(mat3(ViewMatrixInverse)) * (transpose(mat3(ModelMatrixInverse)) * nor))
-#define transform_point_view_to_object(point) \
-  ((ModelMatrixInverse * (ViewMatrixInverse * vec4(point, 1.0))).xyz)
+  /** Transform shortcuts. */
+  /* Rule of thumb: Try to reuse world positions and normals because converting though viewspace
+   * will always be decomposed in at least 2 matrix operation. */
+
+  /**
+   * Some clarification:
+   * Usually Normal matrix is transpose(inverse(ViewMatrix * ModelMatrix))
+   *
+   * But since it is slow to multiply matrices we decompose it. Decomposing
+   * inversion and transposition both invert the product order leaving us with
+   * the same original order:
+   * transpose(ViewMatrixInverse) * transpose(ModelMatrixInverse)
+   *
+   * Knowing that the view matrix is orthogonal, the transpose is also the inverse.
+   * Note: This is only valid because we are only using the mat3 of the ViewMatrixInverse.
+   * ViewMatrix * transpose(ModelMatrixInverse)
+   **/
+#define normal_object_to_view(nor) (mat3(ViewMatrix) * normal_object_to_world(nor))
+#define normal_object_to_world(nor) (transpose(mat3(ModelMatrixInverse)) * nor)
+#define normal_world_to_object(nor) (transpose(mat3(ModelMatrix)) * nor)
+#define normal_world_to_view(nor) (mat3(ViewMatrix) * nor)
+
+#define point_object_to_ndc(point) (ViewProjectionMatrix * (ModelMatrix * vec4(pt, 1.0)))
+#define point_object_to_view(point) ((ViewMatrix * (ModelMatrix * vec4(pt, 1.0))).xyz)
+#define point_object_to_world(point) ((ModelMatrix * vec4(point, 1.0)).xyz)
+#define point_view_to_ndc(point) (ProjectionMatrix * vec4(point, 1.0))
+#define point_view_to_object(point) ((ModelMatrixInverse * (ViewMatrixInverse * vec4(pt, 1.))).xyz)
+#define point_view_to_world(point) ((ViewMatrixInverse * vec4(point, 1.0)).xyz)
+#define point_world_to_ndc(point) (ViewProjectionMatrix * vec4(point, 1.0))
+#define point_world_to_object(point) ((ModelMatrixInverse * vec4(point, 1.0)).xyz)
+#define point_world_to_view(point) ((ViewMatrix * vec4(point, 1.0)).xyz)
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
index 5466e4b1950..d5befc02764 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
@@ -77,7 +77,7 @@ void main()
 #if !defined(FACE)
   /* Facing based color blend */
   vec4 vpos = ModelViewMatrix * vec4(pos, 1.0);
-  vec3 view_normal = normalize(transform_normal_object_to_view(vnor) + 1e-4);
+  vec3 view_normal = normalize(normal_object_to_view(vnor) + 1e-4);
   vec3 view_vec = (ProjectionMatrix[3][3] == 0.0) ? normalize(vpos.xyz) : vec3(0.0, 0.0, 1.0);
   float facing = dot(view_vec, view_normal);
   facing = 1.0 - abs(facing) * 0.2;
diff --git a/source/blender/draw/modes/shaders/edit_normals_vert.glsl b/source/blender/draw/modes/shaders/edit_normals_vert.glsl
index 59b8430dcc0..648577cc080 100644
--- a/source/blender/draw/modes/shaders/edit_normals_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_normals_vert.glsl
@@ -26,7 +26,7 @@ flat out vec4 v2;
 void main()
 {
   v1 = ModelViewProjectionMatrix * vec4(pos, 1.0);
-  vec3 n = normalize(transform_normal_object_to_view(nor));
+  vec3 n = normalize(normal_object_to_view(nor));
   v2 = v1 + ProjectionMatrix * vec4(n * normalSize, 0.0);
 #ifdef USE_WORLD_CLIP_PLANES
   world_clip_planes_calc_clip_distance((ModelMatrix * vec4(pos, 1.0)).xyz);
diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
index 0d5b4390402..dd64ff10a34 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
@@ -39,7 +39,7 @@ void main()
   vec4 wpos = ModelMatrix * vec4(pos, 1.0);
   gl_Position = projmat * (ViewMatrix * wpos);
 
-  vec3 wnor = normalize(transform_normal_object_to_world(nor));
+  vec3 wnor = normalize(normal_object_to_world(nor));
   facing_g = dot(wnor, ViewMatrixInverse[2].xyz);
   edgeSharpness_g = get_edge_sharpness(wd);
 
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 37e03be7be3..2f80bc95a0c 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2099,7 +2099,7 @@ void node_tex_coord(vec3 I,
                     out vec3 reflection)
 {
   generated = attr_orco;
-  normal = normalize(transform_normal_world_to_object(wN));
+  normal = normalize(normal_world_to_object(wN));
   uv = attr_uv;
   object = (obmatinv * (ViewMatrixInverse * vec4(I, 1.0))).xyz;
   camera = vec3(I.xy, -I.z);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.c b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
index 109690cf423..722434ce783 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_image.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
@@ -151,7 +151,7 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat,
       blend = GPU_uniform(&tex->projection_blend);
       gpu_image = GPU_image(ima, iuser, isdata);
 
-      /* equivalent to transform_normal_world_to_object */
+      /* equivalent to normal_world_to_object */
       GPU_link(mat, "normal_transform_transposed_m4v3", vnor, ob_mat, &norm);
       GPU_link(
           mat, gpu_node_name, *texco, norm, GPU_image(ima, iuser, i

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list