diff --git a/data/shaders/stencilbuffer/outline.frag b/data/shaders/stencilbuffer/outline.frag new file mode 100644 index 00000000..eeb56cc3 --- /dev/null +++ b/data/shaders/stencilbuffer/outline.frag @@ -0,0 +1,8 @@ +#version 450 + +layout (location = 0) out vec4 outFragColor; + +void main() +{ + outFragColor = vec4(vec3(1.0), 1.0); +} \ No newline at end of file diff --git a/data/shaders/stencilbuffer/outline.frag.spv b/data/shaders/stencilbuffer/outline.frag.spv new file mode 100644 index 00000000..98ea4746 Binary files /dev/null and b/data/shaders/stencilbuffer/outline.frag.spv differ diff --git a/data/shaders/stencilbuffer/outline.vert b/data/shaders/stencilbuffer/outline.vert new file mode 100644 index 00000000..ea6fc171 --- /dev/null +++ b/data/shaders/stencilbuffer/outline.vert @@ -0,0 +1,24 @@ +#version 450 + +layout (location = 0) in vec4 inPos; +layout (location = 2) in vec3 inNormal; + +layout (binding = 0) uniform UBO +{ + mat4 projection; + mat4 model; + vec4 lightPos; + float outlineWidth; +} ubo; + +out gl_PerVertex +{ + vec4 gl_Position; +}; + +void main() +{ + // Extrude along normal + vec4 pos = vec4(inPos.xyz + inNormal * ubo.outlineWidth, inPos.w); + gl_Position = ubo.projection * ubo.model * pos; +} diff --git a/data/shaders/stencilbuffer/outline.vert.spv b/data/shaders/stencilbuffer/outline.vert.spv new file mode 100644 index 00000000..197bbab3 Binary files /dev/null and b/data/shaders/stencilbuffer/outline.vert.spv differ diff --git a/data/shaders/stencilbuffer/toon.frag b/data/shaders/stencilbuffer/toon.frag new file mode 100644 index 00000000..3d6a081a --- /dev/null +++ b/data/shaders/stencilbuffer/toon.frag @@ -0,0 +1,30 @@ +#version 450 + +layout (binding = 1) uniform sampler2D samplerColorMap; + +layout (location = 0) in vec3 inNormal; +layout (location = 1) in vec3 inColor; +layout (location = 2) in vec3 inLightVec; + +layout (location = 0) out vec4 outFragColor; + +void main() +{ + vec3 color; + vec3 N = normalize(inNormal); + vec3 L = normalize(inLightVec); + float intensity = dot(N,L); + if (intensity > 0.98) + color = inColor * 1.5; + else if (intensity > 0.9) + color = inColor * 1.0; + else if (intensity > 0.5) + color = inColor * 0.6; + else if (intensity > 0.25) + color = inColor * 0.4; + else + color = inColor * 0.2; + // Desaturate a bit + color = vec3(mix(color, vec3(dot(vec3(0.2126,0.7152,0.0722), color)), 0.1)); + outFragColor.rgb = color; +} \ No newline at end of file diff --git a/data/shaders/stencilbuffer/toon.frag.spv b/data/shaders/stencilbuffer/toon.frag.spv new file mode 100644 index 00000000..4a4ef94c Binary files /dev/null and b/data/shaders/stencilbuffer/toon.frag.spv differ diff --git a/data/shaders/stencilbuffer/toon.vert b/data/shaders/stencilbuffer/toon.vert new file mode 100644 index 00000000..a6c00d95 --- /dev/null +++ b/data/shaders/stencilbuffer/toon.vert @@ -0,0 +1,31 @@ +#version 450 + +layout (location = 0) in vec3 inPos; +layout (location = 1) in vec3 inColor; +layout (location = 2) in vec3 inNormal; + +layout (binding = 0) uniform UBO +{ + mat4 projection; + mat4 model; + vec4 lightPos; +} ubo; + +layout (location = 0) out vec3 outNormal; +layout (location = 1) out vec3 outColor; +layout (location = 2) out vec3 outLightVec; + +out gl_PerVertex +{ + vec4 gl_Position; +}; + +void main() +{ + outColor = vec3(1.0, 0.0, 0.0); + gl_Position = ubo.projection * ubo.model * vec4(inPos.xyz, 1.0); + outNormal = mat3(ubo.model) * inNormal; + vec4 pos = ubo.model * vec4(inPos, 1.0); + vec3 lPos = mat3(ubo.model) * ubo.lightPos.xyz; + outLightVec = lPos - pos.xyz; +} \ No newline at end of file diff --git a/data/shaders/stencilbuffer/toon.vert.spv b/data/shaders/stencilbuffer/toon.vert.spv new file mode 100644 index 00000000..9ca1fbbb Binary files /dev/null and b/data/shaders/stencilbuffer/toon.vert.spv differ