mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 16:56:42 +02:00
40 lines
1.4 KiB
GLSL
40 lines
1.4 KiB
GLSL
#version 120
|
|
|
|
//
|
|
// cascaded_shadow_map.frag
|
|
// fragment shader
|
|
//
|
|
// Created by Andrzej Kapolka on 5/29/14.
|
|
// Copyright 2014 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
// the shadow texture
|
|
uniform sampler2DShadow shadowMap;
|
|
|
|
// the distances to the cascade sections
|
|
uniform vec3 shadowDistances;
|
|
|
|
// the inverse of the size of the shadow map
|
|
const float shadowScale = 1.0 / 2048.0;
|
|
|
|
// the color in shadow
|
|
varying vec4 shadowColor;
|
|
|
|
// the interpolated position
|
|
varying vec4 position;
|
|
|
|
void main(void) {
|
|
// compute the index of the cascade to use and the corresponding texture coordinates
|
|
int shadowIndex = int(dot(step(vec3(position.z), shadowDistances), vec3(1.0, 1.0, 1.0)));
|
|
vec3 shadowTexCoord = vec3(dot(gl_EyePlaneS[shadowIndex], position), dot(gl_EyePlaneT[shadowIndex], position),
|
|
dot(gl_EyePlaneR[shadowIndex], position));
|
|
|
|
gl_FragColor = mix(shadowColor, gl_Color, 0.25 *
|
|
(shadow2D(shadowMap, shadowTexCoord + vec3(-shadowScale, -shadowScale, 0.0)).r +
|
|
shadow2D(shadowMap, shadowTexCoord + vec3(-shadowScale, shadowScale, 0.0)).r +
|
|
shadow2D(shadowMap, shadowTexCoord + vec3(shadowScale, -shadowScale, 0.0)).r +
|
|
shadow2D(shadowMap, shadowTexCoord + vec3(shadowScale, shadowScale, 0.0)).r));
|
|
}
|