38 lines
934 B
GLSL
38 lines
934 B
GLSL
#version 130
|
|
|
|
varying vec3 v_normalVS;
|
|
varying vec3 v_posVS;
|
|
varying vec2 v_uv;
|
|
varying vec4 v_color;
|
|
|
|
uniform sampler2D osg_Sampler0;
|
|
uniform bool u_hasTexture;
|
|
uniform vec3 u_lightDirVS;
|
|
uniform vec3 u_lightColor;
|
|
uniform vec3 u_ambientColor;
|
|
uniform int u_bands;
|
|
uniform float u_bandSharpness;
|
|
|
|
float celQuantise(float value, int bands) {
|
|
float b = float(bands);
|
|
return floor(value * b + 0.5) / b;
|
|
}
|
|
|
|
void main() {
|
|
vec3 N = normalize(v_normalVS);
|
|
vec3 L = normalize(u_lightDirVS);
|
|
|
|
// Half-lambert so shadows aren't pitch black
|
|
float NdL = dot(N, L) * 0.5 + 0.5;
|
|
float celVal = celQuantise(NdL, u_bands);
|
|
|
|
vec4 baseColor = u_hasTexture
|
|
? texture2D(osg_Sampler0, v_uv)
|
|
: v_color;
|
|
|
|
vec3 diffuse = baseColor.rgb * u_lightColor * celVal;
|
|
vec3 ambient = baseColor.rgb * u_ambientColor;
|
|
|
|
gl_FragColor = vec4(ambient + diffuse, baseColor.a);
|
|
}
|