diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-05-05 21:51:16 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-05-05 22:04:21 +0300 |
commit | 817cf2a317388b8bfc29ddf27a49b0628eb8e1ab (patch) | |
tree | ba91e9fbe5ed957d05634de1f0df514d2b4d91ad /source/blender/draw/modes/shaders | |
parent | b2188d631a81972f38548a333757eb21ddd784b0 (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.glsl | 15 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/armature_envelope_frag.glsl | 15 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/armature_envelope_solid_frag.glsl | 16 | ||||
-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.glsl | 9 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/armature_shape_solid_vert.glsl | 37 | ||||
-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; } |