diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index f93333d16..4941486a7 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -1733,11 +1733,6 @@ void PostEffect::_checkRequirements() // properly, we can find all the input textures, // and its formats are supported. - if (mShaderName == String("PFX_ReflectionProbeArray") || getName() == StringTable->insert("reflectionProbeArrayPostFX")) - { - bool derp = true; - } - mIsValid = false; mUpdateShader = false; mShader = NULL; diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index 3057af993..7a84aaec2 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -44,6 +44,8 @@ //For our cameraQuery setup #include "T3D/gameTSCtrl.h" +#define TORQUE_GFX_VISUAL_DEBUG //renderdoc debugging + IMPLEMENT_CONOBJECT(RenderProbeMgr); ConsoleDocClass( RenderProbeMgr, diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index 6d51c1484..2c63c1671 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -325,14 +325,20 @@ singleton ShaderData( PFX_ReflectionProbeArray ) singleton GFXStateBlockData( PFX_ReflectionProbeArrayStateBlock ) { - samplersDefined = true; - samplerStates[0] = SamplerClampLinear; - + alphaDefined = true; + alphaTestEnable = true; + alphaTestRef = 1; + alphaTestFunc = GFXCmpGreaterEqual; + + // Do a one to one blend. blendDefined = true; blendEnable = true; - blendSrc = GFXBlendSrcAlpha; - blendDest = GFXBlendInvSrcAlpha; - blendOp = GFXBlendOpAdd; + blendSrc = GFXBlendOne; + blendDest = GFXBlendOne; + + zDefined = true; + zEnable = false; + zWriteEnable = false; }; singleton PostEffect( reflectionProbeArrayPostFX ) @@ -353,10 +359,7 @@ singleton PostEffect( reflectionProbeArrayPostFX ) texture[1] = "#color"; texture[2] = "#matinfo"; texture[3] = "core/art/pbr/brdfTexture.dds"; - targetClearColor = "0 0 0 0"; - targetClear = PFXTargetClear_OnDraw; - targetFormat = "GFXFormatR16G16B16A16F"; - target = "#iblBuffer"; + target = "AL_FormatToken"; }; singleton PostEffect( IBLFlipPostFX ) diff --git a/Templates/Full/game/core/scripts/client/renderManager.cs b/Templates/Full/game/core/scripts/client/renderManager.cs index 3e92749e6..258291e30 100644 --- a/Templates/Full/game/core/scripts/client/renderManager.cs +++ b/Templates/Full/game/core/scripts/client/renderManager.cs @@ -47,7 +47,7 @@ function initRenderManager() }; DiffuseRenderPassManager.addManager( new RenderPassStateBin() { renderOrder = 0.001; stateToken = AL_FormatToken; } ); - DiffuseRenderPassManager.addManager( new RenderProbeMgr(ProbeBin) { bintype = "Probes"; renderOrder = 0.019; processAddOrder = 0.02; } ); + DiffuseRenderPassManager.addManager( new RenderProbeMgr(ProbeBin) { bintype = "Probes"; renderOrder = 0.019; processAddOrder = 0.019; } ); //DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } ); DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); diff --git a/Templates/Full/game/levels/AProbeTest.mis b/Templates/Full/game/levels/AProbeTest.mis index 76bf1422a..72e467802 100644 --- a/Templates/Full/game/levels/AProbeTest.mis +++ b/Templates/Full/game/levels/AProbeTest.mis @@ -132,7 +132,7 @@ new SimGroup(MissionGroup) { posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; Bake = "0"; - position = "-0.0194688 0 4"; + position = "-0.0194688 0.139717 4.10014"; rotation = "1 0 0 0"; scale = "5 5 5"; canSave = "1"; @@ -147,7 +147,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -166,7 +166,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -185,7 +185,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -204,7 +204,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -223,7 +223,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -242,7 +242,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -261,7 +261,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -280,7 +280,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -299,7 +299,7 @@ new SimGroup(MissionGroup) { SkyColor = "0.5 0.5 1 1"; }; new BoxEnvironmentProbe() { - enabled = "1"; + enabled = "0"; radius = "5"; posOffset = "0 0 0"; ReflectionMode = "Baked Cubemap"; @@ -327,7 +327,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707106 0 0.5 0"; + surface = "0.707107 0 0 0.707107 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -342,7 +342,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707106 0 0.5 0"; + surface = "0.707107 0 0 0.707107 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -357,7 +357,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707107 0 0.5 0"; + surface = "0.707107 0 0 0.707106 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -372,7 +372,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707107 0 0.5 0"; + surface = "0.707107 0 0 0.707106 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -387,7 +387,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707107 0 0.5 0"; + surface = "0.707107 0 0 0.707106 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -402,7 +402,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707106 0 0.5 0"; + surface = "0.707107 0 0 0.707107 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; @@ -417,7 +417,7 @@ new SimGroup(MissionGroup) { surface = "0 0 0 1 0 0 0.5"; surface = "0 1 0 0 0 0 -0.5"; - surface = "0.707107 0 0 0.707107 0 0.5 0"; + surface = "0.707107 0 0 0.707106 0 0.5 0"; surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14"; surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08"; surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08"; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl index 735b59be8..30289fb2c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl @@ -65,9 +65,14 @@ float3 iblBoxSpecular(Surface surface, TORQUE_SAMPLER2D(brdfTexture), int id) float2 brdf = TORQUE_TEX2DLOD(brdfTexture, float4(surface.roughness, surface.NdotV,0.0,0.0)).xy; // Radiance (Specular) +#if DEBUGVIZ_SPECCUBEMAP == 0 float lod = surface.roughness*cubeMips; +#elif DEBUGVIZ_SPECCUBEMAP == 1 + float lod = 0; +#endif + float3 cubeR = boxProject(surface.P, surface.V, surface.R, inProbePosArray[id].xyz, bbMinArray[id].xyz, bbMaxArray[id].xyz); - + float3 radiance = TORQUE_TEXCUBEARRAYLOD(cubeMapAR,cubeR,id,lod).xyz * (brdf.x + brdf.y); return radiance; @@ -102,7 +107,7 @@ float4 main( PFXVertToPix IN ) : SV_TARGET if (getFlag(surface.matFlag, 0)) { discard; - } + } int i = 0; @@ -143,10 +148,12 @@ float4 main( PFXVertToPix IN ) : SV_TARGET }*/ // Normalize blendVal +#if DEBUGVIZ_ATTENUATION == 0 //this can likely be removed when we fix the above normalization behavior if (blendSum == 0.0f) // Possible with custom weight { blendSum = 1.0f; } +#endif float invBlendSumWeighted = 1.0f / blendSum; for (i = 0; i < numProbes; ++i) @@ -168,7 +175,7 @@ float4 main( PFXVertToPix IN ) : SV_TARGET if (blendVal[i] == 0) continue; - finalContribColor += blendSum * probeContribColors[i].rgb; + finalContribColor += blendVal[i] * probeContribColors[i].rgb; } return float4(finalContribColor, 1);