ソースを参照

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.

Azaezel 6 年 前
コミット
f1e584ca69

+ 2 - 2
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);
 	}

+ 1 - 1
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);
 }