From 52dbef6f5ff27c8d91a9c357641fba9c7f637a56 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Mon, 20 Jan 2025 19:45:22 -0600 Subject: [PATCH] correct misbehaving ibl got turned around on which pass returned the surface.basecolor when ign orelighting was on. refine dampen method o stop fighting grass --- .../game/core/rendering/shaders/gl/lighting.glsl | 12 +++++++++--- .../game/core/rendering/shaders/lighting.hlsl | 13 +++++++++---- .../lighting/advanced/gl/reflectionProbeArrayP.glsl | 2 +- .../lighting/advanced/reflectionProbeArrayP.hlsl | 5 ++--- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl index e5a010939..5032de1b2 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl @@ -394,7 +394,8 @@ void dampen(inout Surface surface, sampler2D WetnessTexture, float accumTime, fl if (degree<=0.0) return; vec3 n = abs(surface.N); - float grav = 2.0-pow(dot(float3(0,0,-1),surface.N),3); + float ang = dot(float3(0,0,-1),surface.N); + float grav = 2.0-pow(ang,3); if (grav<0) grav*=-1.0; float speed = accumTime*(1.0-surface.roughness)*grav; @@ -405,8 +406,8 @@ void dampen(inout Surface surface, sampler2D WetnessTexture, float accumTime, fl wetness = lerp(wetness,texture(WetnessTexture,vec2(surface.P.zy*0.2+wetoffset)).b,n.x); wetness = pow(wetness,3)*degree; - surface.roughness = lerp(surface.roughness,(1.0-pow(wetness,2))*surface.roughness*0.92f+0.04f,degree); - surface.baseColor.rgb = lerp(surface.baseColor.rgb,surface.baseColor.rgb*(2.0-wetness)/2,degree); + surface.roughness = lerp(surface.roughness,(1.0-wetness*surface.roughness)*0.92f+0.04f,ang); + surface.baseColor.rgb = lerp(surface.baseColor.rgb*(2.0-wetness),surface.baseColor.rgb,ang*surface.roughness); updateSurface(surface); } @@ -416,6 +417,11 @@ vec4 computeForwardProbes(Surface surface, vec3 wsEyePos, float skylightCubemapIdx, int SkylightDamp, sampler2D BRDFTexture, sampler2D WetnessTexture, float accumTime, float dampness, samplerCubeArray irradianceCubemapAR, samplerCubeArray specularCubemapAR) { + if (getFlag(surface.matFlag, 2)) + { + return vec4(0,0,0,0); + } + int i = 0; float alpha = 1; float wetAmmout = 0; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl index 66179088f..cfaba95cb 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl @@ -396,8 +396,8 @@ void dampen(inout Surface surface, TORQUE_SAMPLER2D(WetnessTexture), float accum { if (degree<=0.0) return; float3 n = abs(surface.N); - - float grav = 2.0-pow(dot(float3(0,0,-1),surface.N),3); + float ang = dot(float3(0,0,-1),surface.N); + float grav = 2.0-pow(ang,3); if (grav<0) grav*=-1.0; float speed = accumTime*(1.0-surface.roughness)*grav; @@ -408,8 +408,8 @@ void dampen(inout Surface surface, TORQUE_SAMPLER2D(WetnessTexture), float accum wetness = lerp(wetness,TORQUE_TEX2D(WetnessTexture,float2(surface.P.zy*0.2+wetoffset)).b,n.x); wetness = pow(wetness,3)*degree; - surface.roughness = lerp(surface.roughness,(1.0-pow(wetness,2))*surface.roughness*0.92f+0.04f,degree); - surface.baseColor.rgb = lerp(surface.baseColor.rgb,surface.baseColor.rgb*(2.0-wetness)/2,degree); + surface.roughness = lerp(surface.roughness,(1.0-wetness*surface.roughness)*0.92f+0.04f,ang); + surface.baseColor.rgb = lerp(surface.baseColor.rgb*(2.0-wetness),surface.baseColor.rgb,ang*surface.roughness); surface.Update(); } @@ -419,6 +419,11 @@ float4 computeForwardProbes(Surface surface, float3 wsEyePos, float skylightCubemapIdx, int SkylightDamp, TORQUE_SAMPLER2D(BRDFTexture), TORQUE_SAMPLER2D(WetnessTexture), float accumTime, float dampness, TORQUE_SAMPLERCUBEARRAY(irradianceCubemapAR), TORQUE_SAMPLERCUBEARRAY(specularCubemapAR)) { + if (getFlag(surface.matFlag, 2)) + { + return float4(0,0,0,0); + } + int i = 0; float alpha = 1; float wetAmmout = 0; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl index b7d477ed1..ae93738df 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl @@ -57,7 +57,7 @@ void main() Surface surface = createSurface(normDepth, colorBuffer, matInfoBuffer, IN_uv0.xy, eyePosWorld, IN_wsEyeRay, cameraToWorld); if (getFlag(surface.matFlag, 2)) { - OUT_col = surface.baseColor; + OUT_col = vec4(0,0,0,0); return; } #ifdef USE_SSAO_MASK diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl index 3342c371c..9202f9911 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl @@ -53,9 +53,8 @@ float4 main(PFXVertToPix IN) : SV_TARGET if (getFlag(surface.matFlag, 2)) { - return surface.baseColor; - } - + return float4(0,0,0,0); + } #ifdef USE_SSAO_MASK float ssao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams7 ) ).r; surface.ao = min(surface.ao, ssao);