Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-09 16:31:54 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-10 13:14:41 +0300
commitfdddea676d4fa40668ca82f8ccc5106437d113f2 (patch)
tree2413100e26a03fad62c7e1b7f824916596149052
parent196dbc0f314e466d1a1a1d9ac93238553fdfe66e (diff)
Cleanup: DRW: Renaming of glsl utility macros
-rw-r--r--source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl8
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_vert.glsl4
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/armature_shape_outline_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/common_view_lib.glsl39
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_normals_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl2
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_image.c2
11 files changed, 45 insertions, 22 deletions
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, isdata), &col1, &col2, &col3);