40 lines
1.1 KiB
GLSL
40 lines
1.1 KiB
GLSL
#version 450 core
|
|
in float vSide;
|
|
in float vDist;
|
|
in float vTrackTimeMs;
|
|
out vec4 FragColor;
|
|
|
|
uniform vec3 uColor;
|
|
uniform vec3 uBehindColor;
|
|
uniform bool uIsAvatar;
|
|
uniform bool uClipTrack;
|
|
uniform float uCurrentTimeMs;
|
|
uniform float uDrawBehindMs;
|
|
uniform float uDrawAheadMs;
|
|
uniform float uAlpha;
|
|
|
|
void main() {
|
|
float dist = abs(vSide);
|
|
|
|
// Мягкий туман: трасса видна очень далеко
|
|
float fog = exp(-vDist * 0.001);
|
|
|
|
if (uClipTrack &&
|
|
(vTrackTimeMs < uCurrentTimeMs - uDrawBehindMs ||
|
|
vTrackTimeMs > uCurrentTimeMs + uDrawAheadMs)) {
|
|
discard;
|
|
}
|
|
|
|
if (uIsAvatar) {
|
|
FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
|
} else {
|
|
float intensity = pow(1.0 - dist, 4.0);
|
|
float core = pow(1.0 - dist, 20.0);
|
|
vec3 railColor = (uClipTrack && vTrackTimeMs < uCurrentTimeMs) ? uBehindColor : uColor;
|
|
vec3 finalColor = mix(railColor, vec3(1.0), core);
|
|
|
|
// Цвет затухает в темноту, а не просто обрезается
|
|
FragColor = vec4(finalColor * fog, intensity * fog * uAlpha);
|
|
}
|
|
}
|