fix sky shader

This commit is contained in:
MihailRis 2025-09-23 00:51:21 +03:00
parent 28c821006a
commit 4ff18fec99
4 changed files with 12 additions and 4 deletions

View File

@ -43,7 +43,7 @@ float calc_shadow(
// TODO: add array textures support // TODO: add array textures support
float calc_shadow(vec4 modelPos, vec3 realnormal, float distance) { float calc_shadow(vec4 modelPos, vec3 realnormal, float distance) {
#ifdef ENABLE_SHADOWS #ifdef ENABLE_SHADOWS
float s = pow(abs(cos(u_dayTime * PI2)), 0.25) * u_shadowsOpacity; float s = u_shadowsOpacity;
vec3 normalOffset = realnormal * (distance > 64.0 ? 0.2 : 0.04); vec3 normalOffset = realnormal * (distance > 64.0 ? 0.2 : 0.04);
// as slow as mix(...) // as slow as mix(...)

View File

@ -4,7 +4,7 @@
#include <constants> #include <constants>
vec3 pick_sky_color(samplerCube cubemap) { vec3 pick_sky_color(samplerCube cubemap) {
vec3 skyLightColor = texture(cubemap, vec3(0.8f, 0.01f, 0.4f)).rgb; vec3 skyLightColor = texture(cubemap, vec3(0.4f, 0.05f, 0.4f)).rgb;
skyLightColor *= SKY_LIGHT_TINT; skyLightColor *= SKY_LIGHT_TINT;
skyLightColor = min(vec3(1.0f), skyLightColor * SKY_LIGHT_MUL); skyLightColor = min(vec3(1.0f), skyLightColor * SKY_LIGHT_MUL);
skyLightColor = max(MIN_SKY_LIGHT, skyLightColor); skyLightColor = max(MIN_SKY_LIGHT, skyLightColor);

View File

@ -268,7 +268,11 @@ void main() {
camera_vector, // the camera vector (ray direction of this pixel) camera_vector, // the camera vector (ray direction of this pixel)
1e12f, // max dist, essentially the scene depth 1e12f, // max dist, essentially the scene depth
vec3(0.0f), // scene color, the color of the current pixel being rendered vec3(0.0f), // scene color, the color of the current pixel being rendered
vec3(u_lightDir.x, pow(u_lightDir.y, 3.0), u_lightDir.z), // light direction vec3(
u_lightDir.x,
u_lightDir.y,
u_lightDir.z
), // light direction
vec3(40.0*fog), // light intensity, 40 looks nice vec3(40.0*fog), // light intensity, 40 looks nice
PLANET_POS, // position of the planet PLANET_POS, // position of the planet
PLANET_RADIUS, // radius of the planet in meters PLANET_RADIUS, // radius of the planet in meters

View File

@ -96,12 +96,16 @@ void Shadows::setup(Shader& shader, const Weather& weather) {
if (shadows) { if (shadows) {
const auto& worldInfo = level.getWorld()->getInfo(); const auto& worldInfo = level.getWorld()->getInfo();
float cloudsIntensity = glm::max(worldInfo.fog, weather.clouds()); float cloudsIntensity = glm::max(worldInfo.fog, weather.clouds());
float shadowsOpacity = 1.0f - cloudsIntensity;
shadowsOpacity *= glm::sqrt(glm::abs(
glm::mod((worldInfo.daytime + 0.5f) * 2.0f, 1.0f) * 2.0f - 1.0f
));
shader.uniform1i("u_screen", 0); shader.uniform1i("u_screen", 0);
shader.uniformMatrix("u_shadowsMatrix[0]", shadowCamera.getProjView()); shader.uniformMatrix("u_shadowsMatrix[0]", shadowCamera.getProjView());
shader.uniformMatrix("u_shadowsMatrix[1]", wideShadowCamera.getProjView()); shader.uniformMatrix("u_shadowsMatrix[1]", wideShadowCamera.getProjView());
shader.uniform3f("u_sunDir", shadowCamera.front); shader.uniform3f("u_sunDir", shadowCamera.front);
shader.uniform1i("u_shadowsRes", shadowMap->getResolution()); shader.uniform1i("u_shadowsRes", shadowMap->getResolution());
shader.uniform1f("u_shadowsOpacity", 1.0f - cloudsIntensity); // TODO: make it configurable shader.uniform1f("u_shadowsOpacity", shadowsOpacity); // TODO: make it configurable
shader.uniform1f("u_shadowsSoftness", 1.0f + cloudsIntensity * 4); // TODO: make it configurable shader.uniform1f("u_shadowsSoftness", 1.0f + cloudsIntensity * 4); // TODO: make it configurable
glActiveTexture(GL_TEXTURE0 + TARGET_SHADOWS0); glActiveTexture(GL_TEXTURE0 + TARGET_SHADOWS0);