Merge pull request #640 from Azaezel/alpha40/iblCleanups

Alpha40/ibl cleanups
This commit is contained in:
Brian Roberts 2021-10-28 12:27:24 -05:00 committed by GitHub
commit f250955f63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 43 deletions

View file

@ -780,8 +780,8 @@ void RenderProbeMgr::render( SceneRenderState *state )
mProbeArrayEffect->setShaderConst("$probeContribColors", contribColors); mProbeArrayEffect->setShaderConst("$probeContribColors", contribColors);
mProbeArrayEffect->setShaderConst("$inProbePosArray", mProbeData.probePositionArray); mProbeArrayEffect->setShaderConst("$probePosArray", mProbeData.probePositionArray);
mProbeArrayEffect->setShaderConst("$inRefPosArray", mProbeData.probeRefPositionArray); mProbeArrayEffect->setShaderConst("$refPosArray", mProbeData.probeRefPositionArray);
mProbeArrayEffect->setShaderConst("$worldToObjArray", mProbeData.probeWorldToObjArray); mProbeArrayEffect->setShaderConst("$worldToObjArray", mProbeData.probeWorldToObjArray);
mProbeArrayEffect->setShaderConst("$refScaleArray", mProbeData.refScaleArray); mProbeArrayEffect->setShaderConst("$refScaleArray", mProbeData.refScaleArray);
mProbeArrayEffect->setShaderConst("$probeConfigData", mProbeData.probeConfigArray); mProbeArrayEffect->setShaderConst("$probeConfigData", mProbeData.probeConfigArray);

View file

@ -2981,7 +2981,7 @@ void ReflectionProbeFeatGLSL::processPix(Vector<ShaderComponent*>& componentList
//Reflection Probe WIP //Reflection Probe WIP
U32 MAX_FORWARD_PROBES = 4; U32 MAX_FORWARD_PROBES = 4;
Var * numProbes = new Var("numProbes", "int"); Var * numProbes = new Var("inNumProbes", "int");
numProbes->uniform = true; numProbes->uniform = true;
numProbes->constSortPos = cspPotentialPrimitive; numProbes->constSortPos = cspPotentialPrimitive;
@ -2989,7 +2989,7 @@ void ReflectionProbeFeatGLSL::processPix(Vector<ShaderComponent*>& componentList
cubeMips->uniform = true; cubeMips->uniform = true;
cubeMips->constSortPos = cspPotentialPrimitive; cubeMips->constSortPos = cspPotentialPrimitive;
Var * skylightCubemapIdx = new Var("skylightCubemapIdx", "float"); Var * skylightCubemapIdx = new Var("inSkylightCubemapIdx", "float");
skylightCubemapIdx->uniform = true; skylightCubemapIdx->uniform = true;
skylightCubemapIdx->constSortPos = cspPotentialPrimitive; skylightCubemapIdx->constSortPos = cspPotentialPrimitive;
@ -3008,12 +3008,12 @@ void ReflectionProbeFeatGLSL::processPix(Vector<ShaderComponent*>& componentList
refScaleArray->uniform = true; refScaleArray->uniform = true;
refScaleArray->constSortPos = cspPotentialPrimitive; refScaleArray->constSortPos = cspPotentialPrimitive;
Var * probeConfigData = new Var("probeConfigData", "vec4"); Var * probeConfigData = new Var("inProbeConfigData", "vec4");
probeConfigData->arraySize = MAX_FORWARD_PROBES; probeConfigData->arraySize = MAX_FORWARD_PROBES;
probeConfigData->uniform = true; probeConfigData->uniform = true;
probeConfigData->constSortPos = cspPotentialPrimitive; probeConfigData->constSortPos = cspPotentialPrimitive;
Var * worldToObjArray = new Var("worldToObjArray", "mat4"); Var * worldToObjArray = new Var("inWorldToObjArray", "mat4");
worldToObjArray->arraySize = MAX_FORWARD_PROBES; worldToObjArray->arraySize = MAX_FORWARD_PROBES;
worldToObjArray->uniform = true; worldToObjArray->uniform = true;
worldToObjArray->constSortPos = cspPotentialPrimitive; worldToObjArray->constSortPos = cspPotentialPrimitive;
@ -3026,12 +3026,12 @@ void ReflectionProbeFeatGLSL::processPix(Vector<ShaderComponent*>& componentList
BRDFTexture->sampler = true; BRDFTexture->sampler = true;
BRDFTexture->constNum = Var::getTexUnitNum(); // used as texture unit num here BRDFTexture->constNum = Var::getTexUnitNum(); // used as texture unit num here
Var * specularCubemapAR = new Var("specularCubemapAR", "samplerCubeArray"); Var * specularCubemapAR = new Var("inSpecularCubemapAR", "samplerCubeArray");
specularCubemapAR->uniform = true; specularCubemapAR->uniform = true;
specularCubemapAR->sampler = true; specularCubemapAR->sampler = true;
specularCubemapAR->constNum = Var::getTexUnitNum(); specularCubemapAR->constNum = Var::getTexUnitNum();
Var * irradianceCubemapAR = new Var("irradianceCubemapAR", "samplerCubeArray"); Var * irradianceCubemapAR = new Var("inIrradianceCubemapAR", "samplerCubeArray");
irradianceCubemapAR->uniform = true; irradianceCubemapAR->uniform = true;
irradianceCubemapAR->sampler = true; irradianceCubemapAR->sampler = true;
irradianceCubemapAR->constNum = Var::getTexUnitNum(); irradianceCubemapAR->constNum = Var::getTexUnitNum();
@ -3078,9 +3078,9 @@ void ReflectionProbeFeatGLSL::setTexData(Material::StageData& stageDat,
passData.mSamplerNames[texIndex] = "BRDFTexture"; passData.mSamplerNames[texIndex] = "BRDFTexture";
passData.mTexType[texIndex++] = Material::Standard; passData.mTexType[texIndex++] = Material::Standard;
// assuming here that it is a scenegraph cubemap // assuming here that it is a scenegraph cubemap
passData.mSamplerNames[texIndex] = "specularCubemapAR"; passData.mSamplerNames[texIndex] = "inSpecularCubemapAR";
passData.mTexType[texIndex++] = Material::SGCube; passData.mTexType[texIndex++] = Material::SGCube;
passData.mSamplerNames[texIndex] = "irradianceCubemapAR"; passData.mSamplerNames[texIndex] = "inIrradianceCubemapAR";
passData.mTexType[texIndex++] = Material::SGCube; passData.mTexType[texIndex++] = Material::SGCube;
} }
} }

View file

@ -135,24 +135,24 @@ void DebugVizHLSL::processPix(Vector<ShaderComponent*>& componentList,
//Reflection Probe WIP //Reflection Probe WIP
U32 MAX_FORWARD_PROBES = 4; U32 MAX_FORWARD_PROBES = 4;
Var* numProbes = (Var*)LangElement::find("numProbes"); Var* numProbes = (Var*)LangElement::find("inNumProbes");
Var* cubeMips = (Var*)LangElement::find("cubeMips"); Var* cubeMips = (Var*)LangElement::find("cubeMips");
Var* skylightCubemapIdx = (Var*)LangElement::find("skylightCubemapIdx"); Var* skylightCubemapIdx = (Var*)LangElement::find("inSkylightCubemapIdx");
Var* inProbePosArray = (Var*)LangElement::find("inProbePosArray"); Var* inProbePosArray = (Var*)LangElement::find("inProbePosArray");
Var* inRefPosArray = (Var*)LangElement::find("inRefPosArray"); Var* inRefPosArray = (Var*)LangElement::find("inRefPosArray");
Var* refScaleArray = (Var*)LangElement::find("inRefScale"); Var* refScaleArray = (Var*)LangElement::find("inRefScale");
Var* probeConfigData = (Var*)LangElement::find("probeConfigData"); Var* probeConfigData = (Var*)LangElement::find("inProbeConfigData");
Var* worldToObjArray = (Var*)LangElement::find("worldToObjArray"); Var* worldToObjArray = (Var*)LangElement::find("inWorldToObjArray");
Var* BRDFTexture = (Var*)LangElement::find("BRDFTexture"); Var* BRDFTexture = (Var*)LangElement::find("BRDFTexture");
Var* BRDFTextureTex = (Var*)LangElement::find("texture_BRDFTexture"); Var* BRDFTextureTex = (Var*)LangElement::find("texture_BRDFTexture");
Var* specularCubemapAR = (Var*)LangElement::find("specularCubemapAR"); Var* specularCubemapAR = (Var*)LangElement::find("inSpecularCubemapAR");
Var* specularCubemapARTex = (Var*)LangElement::find("texture_specularCubemapAR"); Var* specularCubemapARTex = (Var*)LangElement::find("texture_inSpecularCubemapAR");
Var* irradianceCubemapAR = (Var*)LangElement::find("irradianceCubemapAR"); Var* irradianceCubemapAR = (Var*)LangElement::find("inIrradianceCubemapAR");
Var* irradianceCubemapARTex = (Var*)LangElement::find("texture_irradianceCubemapAR"); Var* irradianceCubemapARTex = (Var*)LangElement::find("texture_inIrradianceCubemapAR");
Var* matinfo = (Var*)LangElement::find("ORMConfig"); Var* matinfo = (Var*)LangElement::find("ORMConfig");
Var* metalness = (Var*)LangElement::find("metalness"); Var* metalness = (Var*)LangElement::find("metalness");

View file

@ -3054,7 +3054,7 @@ void ReflectionProbeFeatHLSL::processPix(Vector<ShaderComponent*> &componentList
//Reflection Probe WIP //Reflection Probe WIP
U32 MAX_FORWARD_PROBES = 4; U32 MAX_FORWARD_PROBES = 4;
Var *numProbes = new Var("numProbes", "int"); Var *numProbes = new Var("inNumProbes", "int");
numProbes->uniform = true; numProbes->uniform = true;
numProbes->constSortPos = cspPotentialPrimitive; numProbes->constSortPos = cspPotentialPrimitive;
@ -3062,7 +3062,7 @@ void ReflectionProbeFeatHLSL::processPix(Vector<ShaderComponent*> &componentList
cubeMips->uniform = true; cubeMips->uniform = true;
cubeMips->constSortPos = cspPotentialPrimitive; cubeMips->constSortPos = cspPotentialPrimitive;
Var * skylightCubemapIdx = new Var("skylightCubemapIdx", "float"); Var * skylightCubemapIdx = new Var("inSkylightCubemapIdx", "float");
skylightCubemapIdx->uniform = true; skylightCubemapIdx->uniform = true;
skylightCubemapIdx->constSortPos = cspPotentialPrimitive; skylightCubemapIdx->constSortPos = cspPotentialPrimitive;
@ -3081,12 +3081,12 @@ void ReflectionProbeFeatHLSL::processPix(Vector<ShaderComponent*> &componentList
refScaleArray->uniform = true; refScaleArray->uniform = true;
refScaleArray->constSortPos = cspPotentialPrimitive; refScaleArray->constSortPos = cspPotentialPrimitive;
Var *probeConfigData = new Var("probeConfigData", "float4"); Var *probeConfigData = new Var("inProbeConfigData", "float4");
probeConfigData->arraySize = MAX_FORWARD_PROBES; probeConfigData->arraySize = MAX_FORWARD_PROBES;
probeConfigData->uniform = true; probeConfigData->uniform = true;
probeConfigData->constSortPos = cspPotentialPrimitive; probeConfigData->constSortPos = cspPotentialPrimitive;
Var *worldToObjArray = new Var("worldToObjArray", "float4x4"); Var *worldToObjArray = new Var("inWorldToObjArray", "float4x4");
worldToObjArray->arraySize = MAX_FORWARD_PROBES; worldToObjArray->arraySize = MAX_FORWARD_PROBES;
worldToObjArray->uniform = true; worldToObjArray->uniform = true;
worldToObjArray->constSortPos = cspPotentialPrimitive; worldToObjArray->constSortPos = cspPotentialPrimitive;
@ -3101,22 +3101,22 @@ void ReflectionProbeFeatHLSL::processPix(Vector<ShaderComponent*> &componentList
BRDFTextureTex->texture = true; BRDFTextureTex->texture = true;
BRDFTextureTex->constNum = BRDFTexture->constNum; BRDFTextureTex->constNum = BRDFTexture->constNum;
Var *specularCubemapAR = new Var("specularCubemapAR", "SamplerState"); Var *specularCubemapAR = new Var("inSpecularCubemapAR", "SamplerState");
specularCubemapAR->uniform = true; specularCubemapAR->uniform = true;
specularCubemapAR->sampler = true; specularCubemapAR->sampler = true;
specularCubemapAR->constNum = Var::getTexUnitNum(); // used as texture unit num here specularCubemapAR->constNum = Var::getTexUnitNum(); // used as texture unit num here
Var *specularCubemapARTex = new Var("texture_specularCubemapAR", "TextureCubeArray"); Var *specularCubemapARTex = new Var("texture_inSpecularCubemapAR", "TextureCubeArray");
specularCubemapARTex->uniform = true; specularCubemapARTex->uniform = true;
specularCubemapARTex->texture = true; specularCubemapARTex->texture = true;
specularCubemapARTex->constNum = specularCubemapAR->constNum; specularCubemapARTex->constNum = specularCubemapAR->constNum;
Var *irradianceCubemapAR = new Var("irradianceCubemapAR", "SamplerState"); Var *irradianceCubemapAR = new Var("inIrradianceCubemapAR", "SamplerState");
irradianceCubemapAR->uniform = true; irradianceCubemapAR->uniform = true;
irradianceCubemapAR->sampler = true; irradianceCubemapAR->sampler = true;
irradianceCubemapAR->constNum = Var::getTexUnitNum(); // used as texture unit num here irradianceCubemapAR->constNum = Var::getTexUnitNum(); // used as texture unit num here
Var *irradianceCubemapARTex = new Var("texture_irradianceCubemapAR", "TextureCubeArray"); Var *irradianceCubemapARTex = new Var("texture_inIrradianceCubemapAR", "TextureCubeArray");
irradianceCubemapARTex->uniform = true; irradianceCubemapARTex->uniform = true;
irradianceCubemapARTex->texture = true; irradianceCubemapARTex->texture = true;
irradianceCubemapARTex->constNum = irradianceCubemapAR->constNum; irradianceCubemapARTex->constNum = irradianceCubemapAR->constNum;
@ -3171,9 +3171,9 @@ void ReflectionProbeFeatHLSL::setTexData(Material::StageData &stageDat,
passData.mSamplerNames[texIndex] = "BRDFTexture"; passData.mSamplerNames[texIndex] = "BRDFTexture";
passData.mTexType[texIndex++] = Material::Standard; passData.mTexType[texIndex++] = Material::Standard;
// assuming here that it is a scenegraph cubemap // assuming here that it is a scenegraph cubemap
passData.mSamplerNames[texIndex] = "specularCubemapAR"; passData.mSamplerNames[texIndex] = "inSpecularCubemapAR";
passData.mTexType[texIndex++] = Material::SGCube; passData.mTexType[texIndex++] = Material::SGCube;
passData.mSamplerNames[texIndex] = "irradianceCubemapAR"; passData.mSamplerNames[texIndex] = "inIrradianceCubemapAR";
passData.mTexType[texIndex++] = Material::SGCube; passData.mTexType[texIndex++] = Material::SGCube;
} }
} }

View file

@ -78,20 +78,21 @@ const String ShaderGenVars::roughness("$roughness");
const String ShaderGenVars::metalness("$metalness"); const String ShaderGenVars::metalness("$metalness");
const String ShaderGenVars::glowMul("$glowMul"); const String ShaderGenVars::glowMul("$glowMul");
//Reflection Probes //Reflection Probes - Forward lit. not to be confused with the deferred handwritten vars
//change to parity once we've got the same arrays used for both routes
const String ShaderGenVars::probePosition("$inProbePosArray"); const String ShaderGenVars::probePosition("$inProbePosArray");
const String ShaderGenVars::probeRefPos("$inRefPosArray"); const String ShaderGenVars::probeRefPos("$inRefPosArray");
const String ShaderGenVars::refScale("$inRefScale"); const String ShaderGenVars::refScale("$inRefScale");
const String ShaderGenVars::worldToObjArray("$worldToObjArray"); const String ShaderGenVars::worldToObjArray("$inWorldToObjArray");
const String ShaderGenVars::probeConfigData("$probeConfigData"); const String ShaderGenVars::probeConfigData("$inProbeConfigData");
const String ShaderGenVars::specularCubemapAR("$specularCubemapAR"); const String ShaderGenVars::specularCubemapAR("$inSpecularCubemapAR");
const String ShaderGenVars::irradianceCubemapAR("$irradianceCubemapAR"); const String ShaderGenVars::irradianceCubemapAR("$inIrradianceCubemapAR");
const String ShaderGenVars::probeCount("$numProbes"); const String ShaderGenVars::probeCount("$inNumProbes");
const String ShaderGenVars::BRDFTextureMap("$BRDFTexture"); const String ShaderGenVars::BRDFTextureMap("$BRDFTexture");
//Skylight //Skylight
const String ShaderGenVars::skylightCubemapIdx("$skylightCubemapIdx"); const String ShaderGenVars::skylightCubemapIdx("$inSkylightCubemapIdx");
// These are ignored by the D3D layers. // These are ignored by the D3D layers.
const String ShaderGenVars::fogMap("$fogMap"); const String ShaderGenVars::fogMap("$fogMap");

View file

@ -30,8 +30,8 @@ uniform sampler2D ssaoMask;
uniform vec4 rtParams6; uniform vec4 rtParams6;
#endif #endif
uniform vec4 inProbePosArray[MAX_PROBES]; uniform vec4 probePosArray[MAX_PROBES];
uniform vec4 inRefPosArray[MAX_PROBES]; uniform vec4 refPosArray[MAX_PROBES];
uniform mat4 worldToObjArray[MAX_PROBES]; uniform mat4 worldToObjArray[MAX_PROBES];
uniform vec4 refScaleArray[MAX_PROBES]; uniform vec4 refScaleArray[MAX_PROBES];
uniform vec4 probeConfigData[MAX_PROBES]; //r,g,b/mode,radius,atten uniform vec4 probeConfigData[MAX_PROBES]; //r,g,b/mode,radius,atten
@ -92,7 +92,7 @@ void main()
} }
else if (probeConfigData[i].r == 1) //sphere else if (probeConfigData[i].r == 1) //sphere
{ {
contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, probeConfigData[i].g); contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g);
if (contribution[i]>0.0) if (contribution[i]>0.0)
probehits++; probehits++;
} }
@ -179,7 +179,7 @@ void main()
if (contrib > 0.0f) if (contrib > 0.0f)
{ {
float cubemapIdx = probeConfigData[i].a; float cubemapIdx = probeConfigData[i].a;
vec3 dir = boxProject(surface.P, surface.R, worldToObjArray[i], refScaleArray[i].xyz, inRefPosArray[i].xyz); vec3 dir = boxProject(surface.P, surface.R, worldToObjArray[i], refScaleArray[i].xyz, refPosArray[i].xyz);
irradiance += textureLod(irradianceCubemapAR, vec4(dir, cubemapIdx), 0).xyz * contrib; irradiance += textureLod(irradianceCubemapAR, vec4(dir, cubemapIdx), 0).xyz * contrib;
specular += textureLod(specularCubemapAR, vec4(dir, cubemapIdx), lod).xyz * contrib; specular += textureLod(specularCubemapAR, vec4(dir, cubemapIdx), lod).xyz * contrib;

View file

@ -27,8 +27,8 @@ TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 6);
uniform float4 rtParams6; uniform float4 rtParams6;
#endif #endif
uniform float4 inProbePosArray[MAX_PROBES]; uniform float4 probePosArray[MAX_PROBES];
uniform float4 inRefPosArray[MAX_PROBES]; uniform float4 refPosArray[MAX_PROBES];
uniform float4x4 worldToObjArray[MAX_PROBES]; uniform float4x4 worldToObjArray[MAX_PROBES];
uniform float4 refScaleArray[MAX_PROBES]; uniform float4 refScaleArray[MAX_PROBES];
uniform float4 probeConfigData[MAX_PROBES]; //r,g,b/mode,radius,atten uniform float4 probeConfigData[MAX_PROBES]; //r,g,b/mode,radius,atten
@ -86,7 +86,7 @@ float4 main(PFXVertToPix IN) : SV_TARGET
} }
else if (probeConfigData[i].r == 1) //sphere else if (probeConfigData[i].r == 1) //sphere
{ {
contribution[i] = defineSphereSpaceInfluence(surface.P, inProbePosArray[i].xyz, probeConfigData[i].g); contribution[i] = defineSphereSpaceInfluence(surface.P, probePosArray[i].xyz, probeConfigData[i].g);
if (contribution[i]>0.0) if (contribution[i]>0.0)
probehits++; probehits++;
} }
@ -171,7 +171,7 @@ float4 main(PFXVertToPix IN) : SV_TARGET
if (contrib > 0.0f) if (contrib > 0.0f)
{ {
int cubemapIdx = probeConfigData[i].a; int cubemapIdx = probeConfigData[i].a;
float3 dir = boxProject(surface.P, surface.R, worldToObjArray[i], refScaleArray[i].xyz, inRefPosArray[i].xyz); float3 dir = boxProject(surface.P, surface.R, worldToObjArray[i], refScaleArray[i].xyz, refPosArray[i].xyz);
irradiance += TORQUE_TEXCUBEARRAYLOD(irradianceCubemapAR, dir, cubemapIdx, 0).xyz * contrib; irradiance += TORQUE_TEXCUBEARRAYLOD(irradianceCubemapAR, dir, cubemapIdx, 0).xyz * contrib;
specular += TORQUE_TEXCUBEARRAYLOD(specularCubemapAR, dir, cubemapIdx, lod).xyz * contrib; specular += TORQUE_TEXCUBEARRAYLOD(specularCubemapAR, dir, cubemapIdx, lod).xyz * contrib;