diff options
Diffstat (limited to 'res/sdr')
| -rw-r--r-- | res/sdr/mdl_foliage.vs | 43 | ||||
| -rw-r--r-- | res/sdr/mdl_two_sided_cutoff.fs | 51 | ||||
| -rw-r--r-- | res/sdr/mdl_vtx_lit.vs | 47 | ||||
| -rw-r--r-- | res/sdr/mdl_vtx_lit_cutoff.fs | 25 |
4 files changed, 133 insertions, 33 deletions
diff --git a/res/sdr/mdl_foliage.vs b/res/sdr/mdl_foliage.vs new file mode 100644 index 0000000..db9d7b6 --- /dev/null +++ b/res/sdr/mdl_foliage.vs @@ -0,0 +1,43 @@ +#version 330 + +in vec3 vertexPosition; +in vec2 vertexTexCoord; +in vec3 vertexNormal; +in vec4 vertexColor; + +uniform mat4 mvp; +uniform mat4 matNormal; + +uniform vec3 sun_direction; +uniform vec3 sun_colour; +uniform float sun_intensity; + +uniform vec3 moon_direction; +uniform vec3 moon_colour; +uniform float moon_intensity; + +uniform vec3 ambient_colour; +uniform float ambient_intensity; + +uniform vec2 uv_tiling; +uniform vec2 uv_offset; + +out vec2 frag_texcoord; +out vec4 frag_colour; +out vec3 frag_lighting; + +void main() { + vec3 world_normal = normalize((matNormal * vec4(vertexNormal, 0.0)).xyz); + float sun_diffuse = abs(dot(world_normal, sun_direction)); + float moon_diffuse = abs(dot(world_normal, moon_direction)); + + vec3 ambient_light = ambient_colour * ambient_intensity; + vec3 sun_light = sun_colour * sun_intensity * sun_diffuse; + vec3 moon_light = moon_colour * moon_intensity * moon_diffuse; + + frag_lighting = ambient_light + sun_light + moon_light; + frag_texcoord = vertexTexCoord * uv_tiling + uv_offset; + frag_colour = vertexColor; + + gl_Position = mvp * vec4(vertexPosition, 1.0); +} diff --git a/res/sdr/mdl_two_sided_cutoff.fs b/res/sdr/mdl_two_sided_cutoff.fs new file mode 100644 index 0000000..c4ac07e --- /dev/null +++ b/res/sdr/mdl_two_sided_cutoff.fs @@ -0,0 +1,51 @@ +#version 330 + +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +uniform vec3 sun_direction; +uniform vec3 sun_colour; +uniform float sun_intensity; + +uniform vec3 moon_direction; +uniform vec3 moon_colour; +uniform float moon_intensity; + +uniform vec3 ambient_colour; +uniform float ambient_intensity; + +in vec2 frag_texcoord; +in vec4 frag_colour; +in vec3 frag_normal; + +out vec4 finalColor; + +void main() { + vec4 texel = texture(texture0, frag_texcoord) * frag_colour; + + if (texel.a < 0.5) { + discard; + } + + texel.rgb += colDiffuse.rgb; + + vec3 normal = normalize(frag_normal); + + if (!gl_FrontFacing) { + normal = -normal; + } + + float sun_diffuse = max(dot(normal, sun_direction), 0.0); + float moon_diffuse = max(dot(normal, moon_direction), 0.0); + + vec3 ambient_light = ambient_colour * ambient_intensity; + vec3 sun_light = sun_colour * sun_intensity * sun_diffuse; + vec3 moon_light = moon_colour * moon_intensity * moon_diffuse; + + vec3 lighting = max( + ambient_light + sun_light + moon_light, + vec3(0.0) + ); + + finalColor = vec4(texel.rgb * lighting, 1.0); +} diff --git a/res/sdr/mdl_vtx_lit.vs b/res/sdr/mdl_vtx_lit.vs index c69cb3d..d9b2bce 100644 --- a/res/sdr/mdl_vtx_lit.vs +++ b/res/sdr/mdl_vtx_lit.vs @@ -19,46 +19,27 @@ uniform float moon_intensity; uniform vec3 ambient_colour; uniform float ambient_intensity; +uniform vec2 uv_tiling; +uniform vec2 uv_offset; + out vec2 frag_texcoord; out vec4 frag_colour; out vec3 frag_lighting; +out vec3 frag_normal; -void -main() { - vec3 world_normal = normalize( - (matNormal * vec4(vertexNormal, 0.0)).xyz - ); - - float sun_diffuse = max( - dot(world_normal, sun_direction), - 0.0 - ); - - float moon_diffuse = max( - dot(world_normal, moon_direction), - 0.0 - ); - - vec3 ambient_light = - ambient_colour * ambient_intensity; - - vec3 sun_light = - sun_colour * - sun_intensity * - sun_diffuse; - - vec3 moon_light = - moon_colour * - moon_intensity * - moon_diffuse; +void main() { + vec3 world_normal = normalize((matNormal * vec4(vertexNormal, 0.0)).xyz); + float sun_diffuse = max(dot(world_normal, sun_direction), 0.0); + float moon_diffuse = max(dot(world_normal, moon_direction), 0.0); - frag_lighting = - ambient_light + - sun_light + - moon_light; + vec3 ambient_light = ambient_colour * ambient_intensity; + vec3 sun_light = sun_colour * sun_intensity * sun_diffuse; + vec3 moon_light = moon_colour * moon_intensity * moon_diffuse; - frag_texcoord = vertexTexCoord; + frag_lighting = ambient_light + sun_light + moon_light; + frag_texcoord = vertexTexCoord * uv_tiling + uv_offset; frag_colour = vertexColor; + frag_normal = world_normal; gl_Position = mvp * vec4(vertexPosition, 1.0); } diff --git a/res/sdr/mdl_vtx_lit_cutoff.fs b/res/sdr/mdl_vtx_lit_cutoff.fs new file mode 100644 index 0000000..79b3ce2 --- /dev/null +++ b/res/sdr/mdl_vtx_lit_cutoff.fs @@ -0,0 +1,25 @@ +#version 330 + +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +in vec2 frag_texcoord; +in vec4 frag_colour; +in vec3 frag_lighting; + +out vec4 finalColor; + +void +main() { + vec4 texel = texture(texture0, frag_texcoord) * frag_colour; + + if (texel.a < 0.5) { + discard; + } + + texel.rgb += colDiffuse.rgb; + + vec3 lighting = max(frag_lighting, vec3(0.0)); + + finalColor = vec4(texel.rgb * lighting, 1.0); +} |
