diff options
| author | RunitaiLinden <davep@lindenlab.com> | 2024-04-02 16:09:20 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-02 16:09:20 -0500 | 
| commit | 54fc10acb10eeaeeadec3f06a373e9c94d8676cb (patch) | |
| tree | e50d3390b0adb544876bb16f6364eefcd534fe49 | |
| parent | 92efb16039619b8ac440cfc862f29b0f7c6c0fd6 (diff) | |
#1116 HDRI preview enhancements (#1119)
Don't split sky in radiance and irradiance maps
Allow for applying HDRI sky to only irradiance map
Allow for showing entire EEP sky (clouds and all) when split is set to zero
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolwlsky.cpp | 23 | 
2 files changed, 27 insertions, 7 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3ef7cb9ef7..30b307677b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9373,6 +9373,17 @@      <key>Value</key>      <real>1.0</real>    </map> +  <key>RenderHDRIIrradianceOnly</key> +  <map> +    <key>Comment</key> +    <string>Only use HDRI sky for irradiance map when RenderHDRISplitScreen is 0</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>RenderMaxOpenGLVersion</key>    <map>      <key>Comment</key> diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 323ab5fc07..68be354533 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -130,6 +130,17 @@ void LLDrawPoolWLSky::renderDome(const LLVector3& camPosLocal, F32 camHeightLoca  extern LLPointer<LLImageGL> gEXRImage; +static bool use_hdri_sky() +{ +    static LLCachedControl<F32> hdri_split(gSavedSettings, "RenderHDRISplitScreen", 1.f); +    static LLCachedControl<bool> irradiance_only(gSavedSettings, "RenderHDRIIrradianceOnly", false); + +    return gCubeSnapshot && (!irradiance_only || !gPipeline.mReflectionMapManager.isRadiancePass()) ? gEXRImage.notNull() : // always use HDRI for reflection probes when available +        gEXRImage.notNull() ? hdri_split > 0.f : // fallback to EEP sky when split screen is zero +        false; // no HDRI available, always use EEP sky + +} +  void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 camHeightLocal) const  {      if (!gSky.mVOSkyp) @@ -141,7 +152,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca  	if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SKY))  	{ -        if (gEXRImage.notNull()) +        if (use_hdri_sky())          {              sky_shader = &gEnvironmentMapProgram;              sky_shader->bind(); @@ -161,7 +172,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca              sky_shader->uniform1f(LLShaderMgr::SKY_HDR_SCALE, powf(2.f, hdri_exposure));              sky_shader->uniformMatrix3fv(LLShaderMgr::DEFERRED_ENV_MAT, 1, GL_FALSE, (F32*) rot.mMatrix); -            sky_shader->uniform1f(hdri_split_screen, hdri_split); +            sky_shader->uniform1f(hdri_split_screen, gCubeSnapshot ? 1.f : hdri_split);          }          else          { @@ -170,8 +181,6 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca          LLGLSPipelineDepthTestSkyBox sky(true, true); -         -          sky_shader->uniform1i(LLShaderMgr::CUBE_SNAPSHOT, gCubeSnapshot ? 1 : 0);          LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky(); @@ -210,7 +219,7 @@ void LLDrawPoolWLSky::renderSkyHazeDeferred(const LLVector3& camPosLocal, F32 ca  void LLDrawPoolWLSky::renderStarsDeferred(const LLVector3& camPosLocal) const  { -    if (!gSky.mVOSkyp || gEXRImage.notNull()) +    if (!gSky.mVOSkyp || use_hdri_sky())      {          return;      } @@ -281,7 +290,7 @@ void LLDrawPoolWLSky::renderStarsDeferred(const LLVector3& camPosLocal) const  void LLDrawPoolWLSky::renderSkyCloudsDeferred(const LLVector3& camPosLocal, F32 camHeightLocal, LLGLSLShader* cloudshader) const  { -    if (gEXRImage.notNull()) +    if (use_hdri_sky())      {          return;      } @@ -345,7 +354,7 @@ void LLDrawPoolWLSky::renderSkyCloudsDeferred(const LLVector3& camPosLocal, F32  void LLDrawPoolWLSky::renderHeavenlyBodies()  { -    if (!gSky.mVOSkyp || gEXRImage.notNull()) return; +    if (!gSky.mVOSkyp || use_hdri_sky()) return;      LLGLSPipelineBlendSkyBox gls_skybox(true, true); // SL-14113 we need moon to write to depth to clip stars behind | 
