-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCommon.frag
More file actions
61 lines (47 loc) · 1.68 KB
/
Common.frag
File metadata and controls
61 lines (47 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// MyCube.frag
uniform sampler2D texture;
uniform sampler2D shadowTexture;
uniform vec3 lightPosition;
uniform mat4 viewMatrix;
varying vec3 viewSpacePosition;
varying vec2 v_texCoord;
varying vec3 v_normal;
varying vec4 v_shadowCoord;
float unpack (vec4 colour)
{
const vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),
1.0 / (256.0 * 256.0),
1.0 / 256.0,
1);
return dot(colour , bitShifts);
}
float shadowSimple( )
{
vec4 shadowMapPosition = v_shadowCoord / v_shadowCoord.w;
shadowMapPosition = (shadowMapPosition + 1.0) /2.0;
vec4 packedZValue = texture2D(shadowTexture, shadowMapPosition.st);
float distanceFromLight = unpack(packedZValue);
//add bias to reduce shadow acne (error margin)
float bias = 0.0005;
//1.0 = not in shadow (fragment is closer to light than the value stored in shadow map)
//0.0 = in shadow
return float(distanceFromLight > shadowMapPosition.z - bias);
}
void main( )
{
vec3 viewSpaceLightPosition = vec3( viewMatrix * vec4( lightPosition, 1.0 ) );
vec3 lightVector = viewSpaceLightPosition - viewSpacePosition;
lightVector = normalize( lightVector );
float NdotL = dot( v_normal, lightVector );
float diffuse = max( 0.0, NdotL );
float ambient = 0.3;
float shadow = 1.0;
if ( v_shadowCoord.w > 0.0 )
{
shadow = shadowSimple( );
shadow = shadow * 0.8 + 0.2;
}
vec4 textureColor = texture2D( texture, v_texCoord );
//gl_FragColor = ( textureColor * vec4( vec3( ( diffuse + ambient ) * shadow ), 1.0 ) );
gl_FragColor = ( textureColor * ( diffuse + ambient ) * shadow );
}