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>2018-05-05 21:51:16 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-05-05 22:04:21 +0300
commit817cf2a317388b8bfc29ddf27a49b0628eb8e1ab (patch)
treeba91e9fbe5ed957d05634de1f0df514d2b4d91ad /source/blender/draw/modes/shaders
parentb2188d631a81972f38548a333757eb21ddd784b0 (diff)
Armature: Rename bone shaders and add 2 colors smooth blending.
This will enable us to do more nice stuff in future commits. This commit is a temporary commit, it will compile but will crash if trying to display any armature. Next commit does work.
Diffstat (limited to 'source/blender/draw/modes/shaders')
-rw-r--r--source/blender/draw/modes/shaders/armature_envelope_distance_frag.glsl15
-rw-r--r--source/blender/draw/modes/shaders/armature_envelope_frag.glsl15
-rw-r--r--source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl16
-rw-r--r--source/blender/draw/modes/shaders/armature_envelope_solid_vert.glsl (renamed from source/blender/draw/modes/shaders/armature_envelope_vert.glsl)9
-rw-r--r--source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl9
-rw-r--r--source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl37
-rw-r--r--source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl (renamed from source/blender/draw/modes/shaders/armature_sphere_frag.glsl)12
-rw-r--r--source/blender/draw/modes/shaders/armature_sphere_solid_vert.glsl (renamed from source/blender/draw/modes/shaders/armature_sphere_vert.glsl)9
8 files changed, 98 insertions, 24 deletions
diff --git a/source/blender/draw/modes/shaders/armature_envelope_distance_frag.glsl b/source/blender/draw/modes/shaders/armature_envelope_distance_frag.glsl
new file mode 100644
index 00000000000..cecc5447c7c
--- /dev/null
+++ b/source/blender/draw/modes/shaders/armature_envelope_distance_frag.glsl
@@ -0,0 +1,15 @@
+
+flat in vec3 finalStateColor; /* UNUSED */
+flat in vec3 finalBoneColor; /* UNUSED */
+in vec3 normalView;
+
+out vec4 fragColor;
+
+uniform vec4 color = vec4(1.0, 1.0, 1.0, 0.2);
+
+void main()
+{
+ float n = normalize(normalView).z;
+ n = 1.0 - clamp(-n, 0.0, 1.0);
+ fragColor = color * n;
+}
diff --git a/source/blender/draw/modes/shaders/armature_envelope_frag.glsl b/source/blender/draw/modes/shaders/armature_envelope_frag.glsl
deleted file mode 100644
index 468a04d64f0..00000000000
--- a/source/blender/draw/modes/shaders/armature_envelope_frag.glsl
+++ /dev/null
@@ -1,15 +0,0 @@
-
-flat in vec4 finalColor;
-in vec3 normalView;
-
-out vec4 fragColor;
-
-void main()
-{
- float n = normalize(normalView).z;
- n = gl_FrontFacing ? n : -n;
- n = clamp(n, 0.0, 1.0);
- n = gl_FrontFacing ? n : 1.0 - n;
- fragColor = finalColor;
- fragColor.rgb *= n;
-}
diff --git a/source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl b/source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl
new file mode 100644
index 00000000000..3e6ad48700e
--- /dev/null
+++ b/source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl
@@ -0,0 +1,16 @@
+
+flat in vec3 finalStateColor;
+flat in vec3 finalBoneColor;
+in vec3 normalView;
+
+out vec4 fragColor;
+
+void main()
+{
+ /* Smooth lighting factor. */
+ const float s = 0.2; /* [0.0-0.5] range */
+ float n = normalize(normalView).z;
+ float fac = clamp((n * (1.0 - s)) + s, 0.0, 1.0);
+ fragColor.rgb = mix(finalStateColor, finalBoneColor, fac);
+ fragColor.a = 1.0;
+}
diff --git a/source/blender/draw/modes/shaders/armature_envelope_vert.glsl b/source/blender/draw/modes/shaders/armature_envelope_solid_vert.glsl
index f4d7a32ce07..83ae720e70a 100644
--- a/source/blender/draw/modes/shaders/armature_envelope_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_envelope_solid_vert.glsl
@@ -10,10 +10,12 @@ in vec3 pos;
/* Assumed to be in world coordinate already. */
in vec4 headSphere;
in vec4 tailSphere;
-in vec4 color;
in vec3 xAxis;
+in vec3 stateColor;
+in vec3 boneColor;
-flat out vec4 finalColor;
+flat out vec3 finalStateColor;
+flat out vec3 finalBoneColor;
out vec3 normalView;
void main()
@@ -48,5 +50,6 @@ void main()
gl_Position = ViewProjectionMatrix * vec4(sp, 1.0);
- finalColor = color;
+ finalStateColor = stateColor;
+ finalBoneColor = boneColor;
}
diff --git a/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl b/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
new file mode 100644
index 00000000000..aa455a85cf0
--- /dev/null
+++ b/source/blender/draw/modes/shaders/armature_shape_solid_frag.glsl
@@ -0,0 +1,9 @@
+
+flat in vec4 finalColor;
+
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor;
+}
diff --git a/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl b/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
new file mode 100644
index 00000000000..701fc9c38ab
--- /dev/null
+++ b/source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl
@@ -0,0 +1,37 @@
+
+uniform mat3 NormalMatrix;
+uniform mat4 ViewMatrixInverse;
+uniform mat4 ViewProjectionMatrix;
+
+uniform mat4 ViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform vec2 viewportSize;
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos;
+in vec3 nor;
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec3 boneColor;
+in vec3 stateColor;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ mat3 NormalMatrix = transpose(inverse(mat3(ViewMatrix * InstanceModelMatrix)));
+ vec3 normal = normalize(NormalMatrix * nor);
+
+ /* Do lighting at an angle to avoid flat shading on front facing bone. */
+ const vec3 light = vec3(0.1, 0.1, 0.8);
+ float n = dot(normal, light);
+
+ /* Smooth lighting factor. */
+ const float s = 0.2; /* [0.0-0.5] range */
+ float fac = clamp((n * (1.0 - s)) + s, 0.0, 1.0);
+ finalColor.rgb = mix(stateColor, boneColor, fac);
+ finalColor.a = 1.0;
+
+ gl_Position = ViewProjectionMatrix * (InstanceModelMatrix * vec4(pos, 1.0));
+}
diff --git a/source/blender/draw/modes/shaders/armature_sphere_frag.glsl b/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
index 66d40e92bce..a431a048282 100644
--- a/source/blender/draw/modes/shaders/armature_sphere_frag.glsl
+++ b/source/blender/draw/modes/shaders/armature_sphere_solid_frag.glsl
@@ -4,7 +4,8 @@
uniform mat4 ViewMatrixInverse;
uniform mat4 ProjectionMatrix;
-flat in vec3 solidColor;
+flat in vec3 finalStateColor;
+flat in vec3 finalBoneColor;
flat in mat4 sphereMatrix;
in vec3 viewPosition;
@@ -61,13 +62,18 @@ void main()
vec3 p = ray_dir * t + ray_ori; /* Point on sphere */
vec3 n = normalize(p); /* Normal is just the point in sphere space, normalized. */
vec3 l = normalize(sphereMatrix[2].xyz); /* Just the view Z axis in the sphere space. */
- float col = clamp(dot(n, l), 0.0, 1.0);
+
+
+ /* Smooth lighting factor. */
+ const float s = 0.2; /* [0.0-0.5] range */
+ float fac = clamp((dot(n, l) * (1.0 - s)) + s, 0.0, 1.0);
+ fragColor.rgb = mix(finalStateColor, finalBoneColor, fac);
/* 2x2 dither pattern to smooth the lighting. */
float dither = (0.5 + dot(vec2(ivec2(gl_FragCoord.xy) & ivec2(1)), vec2(1.0, 2.0))) * 0.25;
dither *= (1.0 / 255.0); /* Assume 8bit per color buffer. */
- fragColor = vec4(col * solidColor + dither, 1.0);
+ fragColor = vec4(fragColor.rgb + dither, 1.0);
t /= ray_len;
gl_FragDepth = get_depth_from_view_z(ray_dir_view.z * t + ray_ori_view.z);
diff --git a/source/blender/draw/modes/shaders/armature_sphere_vert.glsl b/source/blender/draw/modes/shaders/armature_sphere_solid_vert.glsl
index fdd27de0eb1..1e06047054e 100644
--- a/source/blender/draw/modes/shaders/armature_sphere_vert.glsl
+++ b/source/blender/draw/modes/shaders/armature_sphere_solid_vert.glsl
@@ -7,9 +7,11 @@ in vec2 pos;
/* ---- Per instance Attribs ---- */
in mat4 InstanceModelMatrix;
-in vec3 color;
+in vec3 stateColor;
+in vec3 boneColor;
-flat out vec3 solidColor;
+flat out vec3 finalStateColor;
+flat out vec3 finalBoneColor;
flat out mat4 sphereMatrix;
out vec3 viewPosition;
@@ -75,5 +77,6 @@ void main()
gl_Position = ProjectionMatrix * V;
viewPosition = V.xyz;
- solidColor = color;
+ finalStateColor = stateColor;
+ finalBoneColor = boneColor;
}