Re-implements the dynamic cubemap mode option for reflection probes

This commit is contained in:
Areloch 2020-09-11 02:13:05 -05:00
parent c2bbab774a
commit 5289fdf7f1
5 changed files with 115 additions and 14 deletions

View file

@ -853,7 +853,7 @@ void RenderProbeMgr::render( SceneRenderState *state )
//PROFILE_END();
}
void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
void RenderProbeMgr::bakeProbe(ReflectionProbe *probe, bool writeFiles)
{
GFXDEBUGEVENT_SCOPE(RenderProbeMgr_Bake, ColorI::WHITE);
@ -865,7 +865,12 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
U32 prefilterMipLevels = mLog2(F32(resolution));
bool renderWithProbes = Con::getIntVariable("$pref::ReflectionProbes::RenderWithProbes", false);
ReflectionProbe *clientProbe = static_cast<ReflectionProbe*>(probe->getClientObject());
ReflectionProbe* clientProbe = nullptr;
if (probe->isClientObject())
clientProbe = probe;
else
clientProbe = static_cast<ReflectionProbe*>(probe->getClientObject());
if (clientProbe == nullptr)
return;
@ -960,10 +965,14 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
U32 endMSTime = Platform::getRealMilliseconds();
F32 diffTime = F32(endMSTime - startMSTime);
Con::warnf("RenderProbeMgr::bake() - Finished Capture! Took %g milliseconds", diffTime);
Con::warnf("RenderProbeMgr::bake() - Beginning save now!");
IBLUtilities::SaveCubeMap(clientProbe->getIrradianceMapPath(), clientProbe->mIrridianceMap->mCubemap);
IBLUtilities::SaveCubeMap(clientProbe->getPrefilterMapPath(), clientProbe->mPrefilterMap->mCubemap);
if (writeFiles)
{
Con::warnf("RenderProbeMgr::bake() - Beginning save now!");
IBLUtilities::SaveCubeMap(clientProbe->getIrradianceMapPath(), clientProbe->mIrridianceMap->mCubemap);
IBLUtilities::SaveCubeMap(clientProbe->getPrefilterMapPath(), clientProbe->mPrefilterMap->mCubemap);
}
}
else
{

View file

@ -223,6 +223,7 @@ class RenderProbeMgr : public RenderBinManager
bool mProbesDirty;
public:
//maximum number of allowed probes
static const U32 PROBE_MAX_COUNT = 250;
//maximum number of rendered probes per frame adjust as needed
@ -235,6 +236,7 @@ class RenderProbeMgr : public RenderBinManager
static const GFXFormat PROBE_FORMAT = GFXFormatR16G16B16A16F;// GFXFormatR8G8B8A8;// when hdr fixed GFXFormatR16G16B16A16F; look into bc6h compression
static const U32 INVALID_CUBE_SLOT = U32_MAX;
private:
//Array rendering
U32 mEffectiveProbeCount;
S32 mMipCount;
@ -344,7 +346,7 @@ public:
/// Debug rendering
static bool smRenderReflectionProbes;
void bakeProbe(ReflectionProbe *probeInfo);
void bakeProbe(ReflectionProbe *probeInfo, bool writeFile = true);
void bakeProbes();
void getProbeTextureData(ProbeTextureArrayData* probeTextureSet);