From 5fa2c5b4a62a15ab5108d584a820ca9f58af0bd9 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 27 Nov 2018 08:50:44 -0600 Subject: [PATCH] stateblocks: skylight uses one+(dest)zero. probes use (src)alpha+(dst(1.0-alpha) for a lerp blend. skylight writes out 0 alpha to ensure probes always win if even only a little. --- Engine/source/lighting/probeManager.cpp | 4 ++-- .../Full/game/shaders/common/lighting/advanced/skylightP.hlsl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/lighting/probeManager.cpp b/Engine/source/lighting/probeManager.cpp index 86c0242ae..f92cebcca 100644 --- a/Engine/source/lighting/probeManager.cpp +++ b/Engine/source/lighting/probeManager.cpp @@ -780,7 +780,7 @@ bool ReflectProbeMatInstance::setupPass(SceneRenderState *state, const SceneData desc.setZReadWrite(false); desc.zWriteEnable = false; desc.setCullMode(GFXCullNone); - desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendDestAlpha, GFXBlendOpMax); + desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvDestAlpha, GFXBlendOpAdd); mProjectionState = GFX->createStateBlock(desc); } // Now override stateblock with our own @@ -805,7 +805,7 @@ bool SkylightMatInstance::setupPass(SceneRenderState *state, const SceneData &sg desc.setZReadWrite(false); desc.zWriteEnable = false; desc.setCullMode(GFXCullNone); - desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendDestAlpha, GFXBlendOpMax); + desc.setBlend(true, GFXBlendOne, GFXBlendZero, GFXBlendOpAdd); //desc.setBlend(false); mProjectionState = GFX->createStateBlock(desc); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/skylightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/skylightP.hlsl index 2bff96e19..6b63515f7 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/skylightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/skylightP.hlsl @@ -60,5 +60,5 @@ float4 main( ConvexConnectP IN ) : SV_TARGET float blendVal = 0.0001; - return float4(diffuse + specular * surface.ao, blendVal); + return float4(diffuse + specular * surface.ao, 0); }