mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
adds wetness
cliffsnotes: $Core::WetnessTexture = "core/rendering/images/wetMap.png"; //for the influence degree map probes/skylight have a new canDamp boolean, set to off for probes, on for skylight by default. :levelinfo has a dampness multiplier (0-1) kicked up numTextures from 8 to 16 for shaderdata and postfx since that hit the 8 texture-in prior limit, and we've already adopted apis that can handle the higher count
This commit is contained in:
parent
e16351605b
commit
d23ee397e6
31 changed files with 352 additions and 100 deletions
|
|
@ -98,7 +98,9 @@ ProbeShaderConstants::ProbeShaderConstants()
|
|||
mProbeIrradianceCubemapArraySC(NULL),
|
||||
mProbeCountSC(NULL),
|
||||
mBRDFTextureMap(NULL),
|
||||
mWetnessTextureMap(NULL),
|
||||
mSkylightCubemapIdxSC(NULL),
|
||||
mSkylightDampSC(NULL),
|
||||
mWorldToObjArraySC(NULL),
|
||||
mMaxProbeDrawDistanceSC(NULL)
|
||||
{
|
||||
|
|
@ -135,8 +137,10 @@ void ProbeShaderConstants::init(GFXShader* shader)
|
|||
mProbeCountSC = shader->getShaderConstHandle(ShaderGenVars::probeCount);
|
||||
|
||||
mBRDFTextureMap = shader->getShaderConstHandle(ShaderGenVars::BRDFTextureMap);
|
||||
mWetnessTextureMap = shader->getShaderConstHandle(ShaderGenVars::WetnessTextureMap);
|
||||
|
||||
mSkylightCubemapIdxSC = shader->getShaderConstHandle(ShaderGenVars::skylightCubemapIdx);
|
||||
mSkylightCubemapIdxSC = shader->getShaderConstHandle(ShaderGenVars::skylightCubemapIdx);
|
||||
mSkylightDampSC = shader->getShaderConstHandle(ShaderGenVars::skylightDamp);
|
||||
|
||||
mMaxProbeDrawDistanceSC = shader->getShaderConstHandle(ShaderGenVars::maxProbeDrawDistance);
|
||||
|
||||
|
|
@ -145,10 +149,10 @@ void ProbeShaderConstants::init(GFXShader* shader)
|
|||
|
||||
bool ProbeShaderConstants::isValid()
|
||||
{
|
||||
if (mProbePositionArraySC->isValid() ||
|
||||
mProbeConfigDataArraySC->isValid() ||
|
||||
mRefScaleArraySC->isValid() ||
|
||||
mProbeSpecularCubemapArraySC->isValid() ||
|
||||
if (mProbePositionArraySC->isValid() &&
|
||||
mProbeConfigDataArraySC->isValid() &&
|
||||
mRefScaleArraySC->isValid() &&
|
||||
mProbeSpecularCubemapArraySC->isValid() &&
|
||||
mProbeIrradianceCubemapArraySC->isValid())
|
||||
return true;
|
||||
|
||||
|
|
@ -169,6 +173,7 @@ RenderProbeMgr::RenderProbeMgr()
|
|||
mLastConstants(nullptr),
|
||||
mHasSkylight(false),
|
||||
mSkylightCubemapIdx(-1),
|
||||
mSkylightDamp(true),
|
||||
mCubeMapCount(0),
|
||||
mUseHDRCaptures(true)
|
||||
{
|
||||
|
|
@ -197,6 +202,7 @@ RenderProbeMgr::RenderProbeMgr(RenderInstType riType, F32 renderOrder, F32 proce
|
|||
mEffectiveProbeCount = 0;
|
||||
mHasSkylight = false;
|
||||
mSkylightCubemapIdx = -1;
|
||||
mSkylightDamp = true;
|
||||
mLastConstants = nullptr;
|
||||
mMipCount = 0;
|
||||
mUseHDRCaptures = true;
|
||||
|
|
@ -236,6 +242,12 @@ bool RenderProbeMgr::onAdd()
|
|||
return false;
|
||||
}
|
||||
|
||||
String wetnessTexturePath = GFXTextureManager::getWetnessTexturePath();
|
||||
if (!mWetnessTexture.set(wetnessTexturePath, &GFXTexturePersistentProfile, "WetnessTexture"))
|
||||
{
|
||||
Con::errorf("RenderProbeMgr::onAdd: Failed to load Wetness Texture");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -306,6 +318,7 @@ void RenderProbeMgr::getBestProbes(const Point3F& objPosition, ProbeDataSet* pro
|
|||
else
|
||||
{
|
||||
probeDataSet->skyLightIdx = curEntry.mCubemapIndex;
|
||||
probeDataSet->skyLightDamp = curEntry.mProbeInfo->mCanDamp;
|
||||
mHasSkylight = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -330,13 +343,13 @@ void RenderProbeMgr::getBestProbes(const Point3F& objPosition, ProbeDataSet* pro
|
|||
probeDataSet->probeWorldToObjArray[i] = p2A;
|
||||
p2A.inverse();
|
||||
probeDataSet->refScaleArray[i] = curEntry.mProbeInfo->mProbeRefScale / (p2A.getScale()*2);
|
||||
probeDataSet->refScaleArray[i].w = curEntry.mProbeInfo->mCanDamp? 1.0 : 0.0;
|
||||
|
||||
Point3F probePos = curEntry.mProbeInfo->mObject->getPosition();
|
||||
Point3F refPos = probePos + curEntry.mProbeInfo->mProbeRefOffset * probeDataSet->refScaleArray[i].asPoint3F();
|
||||
|
||||
probeDataSet->probePositionArray[i] = Point4F(probePos.x, probePos.y, probePos.z, 0);
|
||||
probeDataSet->probeRefPositionArray[i] = Point4F(refPos.x, refPos.y, refPos.z, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -422,7 +435,7 @@ PostEffect* RenderProbeMgr::getProbeArrayEffect()
|
|||
|
||||
mProbeArrayEffect->setShaderConst("$numProbes", (S32)0);
|
||||
mProbeArrayEffect->setShaderConst("$skylightCubemapIdx", (S32)-1);
|
||||
|
||||
mProbeArrayEffect->setShaderConst(ShaderGenVars::skylightDamp, (S32)true);
|
||||
mProbeArrayEffect->setShaderConst("$cubeMips", (float)0);
|
||||
mProbeArrayEffect->setShaderConst("$maxProbeDrawDistance", smMaxProbeDrawDistance);
|
||||
|
||||
|
|
@ -784,10 +797,14 @@ void RenderProbeMgr::_update4ProbeConsts(const SceneData& sgData,
|
|||
shaderConsts->setSafe(probeShaderConsts->mProbeConfigDataArraySC, probeConfigAlignedArray);
|
||||
}
|
||||
|
||||
if (probeShaderConsts->mBRDFTextureMap->getSamplerRegister() != -1 && mBRDFTexture.isValid())
|
||||
if (mBRDFTexture.isValid(), probeShaderConsts->mBRDFTextureMap->getSamplerRegister() != -1)
|
||||
GFX->setTexture(probeShaderConsts->mBRDFTextureMap->getSamplerRegister(), mBRDFTexture);
|
||||
|
||||
if (mWetnessTexture.isValid() && probeShaderConsts->mWetnessTextureMap->getSamplerRegister() != -1)
|
||||
GFX->setTexture(probeShaderConsts->mWetnessTextureMap->getSamplerRegister(), mWetnessTexture);
|
||||
|
||||
shaderConsts->setSafe(probeShaderConsts->mSkylightCubemapIdxSC, (float)probeSet.skyLightIdx);
|
||||
shaderConsts->setSafe(probeShaderConsts->mSkylightDampSC, (int)probeSet.skyLightDamp);
|
||||
|
||||
if (probeShaderConsts->mProbeSpecularCubemapArraySC->getSamplerRegister() != -1)
|
||||
GFX->setCubeArrayTexture(probeShaderConsts->mProbeSpecularCubemapArraySC->getSamplerRegister(), mPrefilterArray);
|
||||
|
|
@ -859,6 +876,11 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
|
||||
String probeCapturing = Con::getVariable("$Probes::Capturing", "0");
|
||||
mProbeArrayEffect->setShaderMacro("CAPTURING", probeCapturing);
|
||||
|
||||
mProbeArrayEffect->setTexture(3, mBRDFTexture);
|
||||
mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray);
|
||||
mProbeArrayEffect->setCubemapArrayTexture(5, mIrradianceArray);
|
||||
mProbeArrayEffect->setTexture(6, mWetnessTexture);
|
||||
//ssao mask
|
||||
if (AdvancedLightBinManager::smUseSSAOMask)
|
||||
{
|
||||
|
|
@ -868,20 +890,16 @@ void RenderProbeMgr::render( SceneRenderState *state )
|
|||
if (pTexObj)
|
||||
{
|
||||
mProbeArrayEffect->setShaderMacro("USE_SSAO_MASK");
|
||||
mProbeArrayEffect->setTexture(6, pTexObj);
|
||||
mProbeArrayEffect->setTexture(7, pTexObj);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mProbeArrayEffect->setTexture(6, GFXTexHandle(NULL));
|
||||
mProbeArrayEffect->setTexture(7, GFXTexHandle(NULL));
|
||||
}
|
||||
|
||||
mProbeArrayEffect->setTexture(3, mBRDFTexture);
|
||||
mProbeArrayEffect->setCubemapArrayTexture(4, mPrefilterArray);
|
||||
mProbeArrayEffect->setCubemapArrayTexture(5, mIrradianceArray);
|
||||
|
||||
mProbeArrayEffect->setShaderConst("$numProbes", (S32)mProbeData.effectiveProbeCount);
|
||||
mProbeArrayEffect->setShaderConst("$skylightCubemapIdx", (S32)mProbeData.skyLightIdx);
|
||||
mProbeArrayEffect->setShaderConst(ShaderGenVars::skylightDamp, mProbeData.skyLightDamp);
|
||||
|
||||
mProbeArrayEffect->setShaderConst("$cubeMips", (float)mPrefilterArray->getMipMapLevels());
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue