start
This commit is contained in:
45
sky.frag
Normal file
45
sky.frag
Normal file
@@ -0,0 +1,45 @@
|
||||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 FragPos;
|
||||
in vec3 Normal;
|
||||
|
||||
uniform float height;
|
||||
uniform float sunElevation;
|
||||
uniform float sunIntensity;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Константы - цвета неба
|
||||
vec3 C_strato = vec3(0x05, 0x0F, 0x1F) / 255.0; // #050F1F
|
||||
vec3 C_sea = vec3(0x87, 0xBD, 0xFF) / 255.0; // #87BDFF
|
||||
vec3 C_warm = vec3(0xFF, 0xF2, 0xD9) / 255.0; // #FFF2D9
|
||||
vec3 C_sunset = vec3(0xFF, 0x8C, 0x4D) / 255.0; // #FF8C4D
|
||||
|
||||
// 1. Зависимость цвета от высоты наблюдателя
|
||||
float H = 8000.0;
|
||||
float t = clamp(exp(-height / H), 0.0, 1.0);
|
||||
|
||||
// C_base - линейная интерполяция от C_strato до C_sea с параметром t
|
||||
vec3 C_base = mix(C_strato, C_sea, t);
|
||||
|
||||
// 2. Параметры положения Солнца
|
||||
float d = smoothstep(0.0, 0.6, sunElevation);
|
||||
float s = clamp(sunIntensity, 0.0, 1.0);
|
||||
|
||||
// 3. Тёплая добавка при низком Солнце
|
||||
// C_tint - линейная интерполяция от C_sunset до C_warm с параметром d
|
||||
vec3 C_tint = mix(C_sunset, C_warm, d);
|
||||
|
||||
// Коэффициент тёплой добавки
|
||||
float alpha = 0.6 * s * (1.0 - d) * t;
|
||||
|
||||
// 4. Итоговый цвет неба
|
||||
vec3 C_lit = C_base * (0.55 + 0.45 * s * d) + alpha * C_tint;
|
||||
|
||||
// Финальный цвет с ограничением
|
||||
vec3 C_out = clamp(C_lit, 0.0, 1.0);
|
||||
|
||||
FragColor = vec4(C_out, 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user