From 4e728bf68fca21f4344bd9dd9051d9f0e439b2ab Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Wed, 24 Mar 2021 16:40:03 +0000 Subject: [PATCH] Uses sky as a water reflection instead of a fixed color. Differential Revision: https://code.wildfiregames.com/D3734 This was SVN commit r25114. --- .../mods/public/shaders/glsl/water_high.fs | 5 +--- source/renderer/TerrainRenderer.cpp | 25 ++++++++----------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/binaries/data/mods/public/shaders/glsl/water_high.fs b/binaries/data/mods/public/shaders/glsl/water_high.fs index f31eda3e25..3c2fa607a0 100644 --- a/binaries/data/mods/public/shaders/glsl/water_high.fs +++ b/binaries/data/mods/public/shaders/glsl/water_high.fs @@ -134,11 +134,8 @@ vec4 getReflection(vec3 normal, vec3 eyeVec) // Let actual objects be reflected fully. reflMod = max(refTex.a, 0.75); -#elif USE_REFRACTION +#else vec3 reflColor = textureCube(skyCube, (vec4(eye, 0.0) * skyBoxRot).xyz).rgb; -#else // !USE_REFLECTION && !USE_REFRACTION - // Simplest case for reflection, return a gradient of blue based on Y component. - vec3 reflColor = mix(vec3(0.76, 0.84, 0.92), vec3(0.24, 0.43, 0.71), -eye.y); #endif return vec4(reflColor, reflMod); diff --git a/source/renderer/TerrainRenderer.cpp b/source/renderer/TerrainRenderer.cpp index 0eba90d40f..73dae1f60c 100644 --- a/source/renderer/TerrainRenderer.cpp +++ b/source/renderer/TerrainRenderer.cpp @@ -534,21 +534,18 @@ bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, int cullGr m->fancyWaterShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); - //TODO: bind only what's needed - if (WaterMgr->m_WaterRefraction || WaterMgr->m_WaterReflection) - { - m->fancyWaterShader->BindTexture(str_skyCube, g_Renderer.GetSkyManager()->GetSkyCube()); - // TODO: check that this rotates in the right direction. - CMatrix3D skyBoxRotation; - skyBoxRotation.SetIdentity(); - skyBoxRotation.RotateY(M_PI + lightEnv.GetRotation()); - m->fancyWaterShader->Uniform(str_skyBoxRot, skyBoxRotation); + m->fancyWaterShader->BindTexture(str_skyCube, g_Renderer.GetSkyManager()->GetSkyCube()); + // TODO: check that this rotates in the right direction. + CMatrix3D skyBoxRotation; + skyBoxRotation.SetIdentity(); + skyBoxRotation.RotateY(M_PI + lightEnv.GetRotation()); + m->fancyWaterShader->Uniform(str_skyBoxRot, skyBoxRotation); + + if (WaterMgr->m_WaterRefraction) + m->fancyWaterShader->Uniform(str_refractionMatrix, WaterMgr->m_RefractionMatrix); + if (WaterMgr->m_WaterReflection) + m->fancyWaterShader->Uniform(str_reflectionMatrix, WaterMgr->m_ReflectionMatrix); - if (WaterMgr->m_WaterRefraction) - m->fancyWaterShader->Uniform(str_refractionMatrix, WaterMgr->m_RefractionMatrix); - if (WaterMgr->m_WaterReflection) - m->fancyWaterShader->Uniform(str_reflectionMatrix, WaterMgr->m_ReflectionMatrix); - } m->fancyWaterShader->Uniform(str_ambient, lightEnv.m_AmbientColor); m->fancyWaterShader->Uniform(str_sunDir, lightEnv.GetSunDir()); m->fancyWaterShader->Uniform(str_sunColor, lightEnv.m_SunColor);