Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
10ff898
Resolve the vast majority of SSR's problems in one go.
Geenz Jun 6, 2025
5aee7e6
Modularize and document.
Geenz Jun 6, 2025
6eb00fb
Make sure to sample as many probes as we can on water specifically wh…
Geenz Jun 6, 2025
9ff815b
Start getting multi-pass tracing setup.
Geenz Jun 7, 2025
3fb627a
Insert fifth element reference here
Geenz Jun 7, 2025
ab80b65
Just do a depth based exponential scale for the step sizing. Seems t…
Geenz Jun 7, 2025
9bdfe55
Get some sane defaults setup.
Geenz Jun 7, 2025
e0b167d
Many more tweaks + some additional depth fade stuff for super far off…
Geenz Jun 8, 2025
a0b1d4d
Update to the feature table to enable SSR on Ultra settings.
Geenz Jun 8, 2025
2a675e5
Add a few early outs to help reduce unnecessary traces.
Geenz Jun 8, 2025
1dc2a23
Use a GGX based blur instead.
Geenz Jun 8, 2025
82b9723
Tweak the max roughness to better avoid striations when you move the …
Geenz Jun 8, 2025
4393d34
Make the scale a bit better for high roughness values.
Geenz Jun 8, 2025
cfae6dc
Slight tweak to make SSR reflections more pronounced when replacing p…
Geenz Jun 8, 2025
6a289c6
Take care of trailing white spaces.
Geenz Jun 8, 2025
06e5ad8
More trailing white spaces.
Geenz Jun 8, 2025
c8d2c4c
More tuning to balance out some of the black striations in the distan…
Geenz Jun 8, 2025
129b6e4
Add support for adjustable max Z depth and roughness.
Geenz Jun 9, 2025
9b12d2d
White space.
Geenz Jun 9, 2025
50a1e54
Merge branch 'develop' into geenz/ssr-rennovation
Geenz Jun 13, 2025
c604e2f
Merge branch 'develop' into geenz/ssr-rennovation
Geenz Sep 18, 2025
b2f54dc
Merge branch 'develop' into geenz/ssr-rennovation
Geenz Sep 18, 2025
c1bca51
Compile fix for NVIDIA
Geenz Sep 19, 2025
a72d377
Merge branch 'develop' into geenz/ssr-rennovation
Geenz Nov 10, 2025
90e5fdf
Merge branch 'geenz/ssr-rennovation' into project/visual-polish
Geenz Feb 6, 2026
fd22050
Merge branch 'release/2026.01' into project/visual_polish
Geenz Feb 12, 2026
5bc7654
Add support for the witness' 4x4 PCF sampling.
Geenz Feb 20, 2026
b7f961e
Use a 4x4 bayer dither pattern for semi-transparent shadows.
Geenz Feb 20, 2026
674cb79
Preserve reflection probe alpha for the sky, and add new "Reflection …
Geenz Feb 20, 2026
9bfbe13
Update viewer_manifest.py
Geenz Feb 20, 2026
624ac23
SSR refactor (#5441)
Geenz Feb 22, 2026
a7cc740
Add texture streaming "channels" (#5442)
Geenz Feb 22, 2026
1024045
Update screenSpaceReflUtil.glsl
Geenz Feb 22, 2026
ea0e0c5
Merge branch 'develop' into project/visual_polish
Geenz Feb 24, 2026
83b5919
Another attempt at striation prevention.
Geenz Feb 26, 2026
e2e6e47
Update screenSpaceReflUtil.glsl
Geenz Feb 26, 2026
8b8b88e
Velocity Buffer Support (#5460)
Geenz Feb 26, 2026
9adb857
Motion blur interface -> Velocity
Geenz Feb 26, 2026
4a7ad30
Add EEP settings for SLVP (#5461)
Geenz Feb 26, 2026
7447438
Update llsettingssky.cpp
Geenz Feb 26, 2026
9654cbd
Introduce planar mirrors (#5478)
Geenz Mar 2, 2026
b18e63f
Use a system mirror probe for water. (#5479)
Geenz Mar 3, 2026
a054958
Introduce separable SSR and Hi-Z tracing. (#5493)
Geenz Mar 5, 2026
a87bf75
Merge branch 'release/2026.03' into project/visual_polish
Geenz Mar 5, 2026
4074a32
Fix for overly bright EEP V1 skies.
Geenz Mar 5, 2026
cac3806
Restore alpha object SSR. (#5494)
Geenz Mar 5, 2026
0fe0c7a
Add ambient sky saturation to EEP settings. (#5500)
Geenz Mar 5, 2026
1a31fdd
Fix for SSR on water.
Geenz Mar 6, 2026
14b74c9
Fix for non-symmetric reflections on water.
Geenz Mar 6, 2026
b1cc677
Move the glTF loader into llprimitive.
Geenz Mar 6, 2026
32f63db
Wire up LL::GLTF through the material import pipeline.
Geenz Mar 8, 2026
d505429
Merge branch 'develop' into geenz/pbr-specular
Geenz Mar 8, 2026
3718624
Update llgltfhelper.cpp
Geenz Mar 8, 2026
25b72ca
Setup PBR specular in the UI and data model.
Geenz Mar 9, 2026
1f85783
Add specular GLTF material support
Geenz Mar 12, 2026
27a0daa
Don't clamp water reflections to 1.
Geenz Mar 13, 2026
2abbec7
Merge branch 'project/visual_polish' into geenz/pbr-specular
Geenz Mar 13, 2026
e5a0428
Hide the PBR specular controls when PBRExtensionsV1 is not available.
Geenz Mar 13, 2026
8c1c581
Merge pull request #5536 from secondlife/geenz/pbr-specular
Geenz Mar 13, 2026
6a8ae13
Enable SSR on med-high.
Geenz Mar 13, 2026
907bec1
Merge branch 'project/visual_polish' of https://github.com/secondlife…
Geenz Mar 13, 2026
a55949c
Potential fix for volumetric mirror probes rendering incorrectly.
Geenz Mar 13, 2026
4d642b4
Update llgltfmaterial.cpp
Geenz Mar 13, 2026
0567fa1
Update CMakeLists.txt
Geenz Mar 13, 2026
e60c671
Update the windows test for the size check of LLGLTFMaterial.
Geenz Mar 13, 2026
e4db72d
Add a C-style F32 cast for the emissive strength param.
Geenz Mar 14, 2026
a005131
Update llmaterialeditor.cpp
Geenz Mar 14, 2026
203d628
Fix for PBR surfaces skipping shadows.
Geenz Apr 4, 2026
de769c3
Merge branch 'develop' into project/visual_polish
Geenz Apr 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion indra/cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ set(cmake_SOURCE_FILES
SSE2NEON.cmake
TemplateCheck.cmake
TinyEXR.cmake
TinyGLTF.cmake
Tracy.cmake
Tut.cmake
UI.cmake
Expand Down
7 changes: 0 additions & 7 deletions indra/cmake/TinyGLTF.cmake

This file was deleted.

168 changes: 160 additions & 8 deletions indra/llinventory/llsettingssky.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,16 @@ const std::string LLSettingsSky::SETTING_SKY_DROPLET_RADIUS("droplet_radius");
const std::string LLSettingsSky::SETTING_SKY_ICE_LEVEL("ice_level");

const std::string LLSettingsSky::SETTING_REFLECTION_PROBE_AMBIANCE("reflection_probe_ambiance");
const std::string LLSettingsSky::SETTING_AMBIENT_SKY_SATURATION("ambient_sky_saturation");

const std::string LLSettingsSky::SETTING_SKY_VERSION("sky_version");
const std::string LLSettingsSky::SETTING_SUN_BRIGHTNESS("sun_brightness");

const std::string LLSettingsSky::SETTING_HDR_OFFSET("hdr_offset");
const std::string LLSettingsSky::SETTING_HDR_MAX("hdr_max");
const std::string LLSettingsSky::SETTING_HDR_MIN("hdr_min");
const std::string LLSettingsSky::SETTING_HDR_TONEMAPPER("hdr_tonemapper");
const std::string LLSettingsSky::SETTING_HDR_TONEMAPPER_AMOUNT("hdr_tonemapper_amount");

const LLUUID LLSettingsSky::DEFAULT_ASSET_ID("651510b8-5f4d-8991-1592-e7eeab2a5a06");

Expand Down Expand Up @@ -442,12 +452,15 @@ void LLSettingsSky::replaceSettings(const LLSettingsBase::ptr_t& other_sky)

LLSettingsSky::ptr_t other = PTR_NAMESPACE::dynamic_pointer_cast<LLSettingsSky>(other_sky);

mSkySettingVersion = other->mSkySettingVersion;

mCanAutoAdjust = other->mCanAutoAdjust;
mReflectionProbeAmbiance = other->mReflectionProbeAmbiance;

mSunScale = other->mSunScale;
mSunRotation = other->mSunRotation;
mSunlightColor = other->mSunlightColor;
mSunBrightness = other->mSunBrightness;
mStarBrightness = other->mStarBrightness;
mMoonBrightness = other->mMoonBrightness;
mMoonScale = other->mMoonScale;
Expand Down Expand Up @@ -499,6 +512,12 @@ void LLSettingsSky::replaceSettings(const LLSettingsBase::ptr_t& other_sky)
mRainbowTextureId = other->mRainbowTextureId;
mBloomTextureId = other->mBloomTextureId;

mHDRMin = other->mHDRMin;
mHDRMax = other->mHDRMax;
mHDROffset = other->mHDROffset;
mTonemapper = other->mTonemapper;
mTonemapMix = other->mTonemapMix;

mNextSunTextureId.setNull();
mNextMoonTextureId.setNull();
mNextCloudTextureId.setNull();
Expand Down Expand Up @@ -605,6 +624,7 @@ void LLSettingsSky::blend(LLSettingsBase::ptr_t &end, F64 blendf)
mCanAutoAdjust = other->mCanAutoAdjust;

mSunRotation = slerp((F32)blendf, mSunRotation, other->mSunRotation);
mSunBrightness = lerp(mSunBrightness, other->mSunBrightness, (F32)blendf);
mMoonRotation = slerp((F32)blendf, mMoonRotation, other->mMoonRotation);
lerpColor(mSunlightColor, other->mSunlightColor, (F32)blendf);
lerpColor(mGlow, other->mGlow, (F32)blendf);
Expand All @@ -631,6 +651,14 @@ void LLSettingsSky::blend(LLSettingsBase::ptr_t &end, F64 blendf)
mSkyIceLevel = lerp(mSkyIceLevel, other->mSkyIceLevel, (F32)blendf);
mPlanetRadius = lerp(mPlanetRadius, other->mPlanetRadius, (F32)blendf);

mTonemapMix = lerp(mTonemapMix, other->mTonemapMix, (F32)blendf);
mHDRMax = lerp(mHDRMax, other->mHDRMax, (F32)blendf);
mHDRMin = lerp(mHDRMin, other->mHDRMin, (F32)blendf);
mHDROffset = lerp(mHDROffset, other->mHDROffset, (F32)blendf);
mAmbientSkySaturation = lerp(mAmbientSkySaturation, other->mAmbientSkySaturation, (F32)blendf);

mTonemapper = other->mTonemapper;

// Legacy settings

if (other->mHasLegacyHaze)
Expand Down Expand Up @@ -835,6 +863,9 @@ LLSettingsSky::validation_list_t LLSettingsSky::validationList()
validation.push_back(Validator(SETTING_REFLECTION_PROBE_AMBIANCE, false, LLSD::TypeReal,
boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(llsd::array(0.0f, 10.0f)))));

validation.push_back(Validator(SETTING_AMBIENT_SKY_SATURATION, false, LLSD::TypeReal,
boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));

validation.push_back(Validator(SETTING_RAYLEIGH_CONFIG, true, LLSD::TypeArray, &validateRayleighLayers));
validation.push_back(Validator(SETTING_ABSORPTION_CONFIG, true, LLSD::TypeArray, &validateAbsorptionLayers));
validation.push_back(Validator(SETTING_MIE_CONFIG, true, LLSD::TypeArray, &validateMieLayers));
Expand Down Expand Up @@ -1204,10 +1235,43 @@ void LLSettingsSky::loadValuesFromLLSD()
mReflectionProbeAmbiance = (F32)settings[SETTING_REFLECTION_PROBE_AMBIANCE].asReal();
}

mHDRMax = 2.0f;
mHDRMin = 0.5f;
mHDROffset = 1.0f;
mTonemapMix = 1.0f;

// Legacy (pre-Visual Polish) skies are version 1.
// Post-VP skies are are 2 and higher.
// Note: version increments should be saved for behavioral changes, not necessarily param additions.
// The version should be set server-side, not viewer-side.
// - Geenz, Feb 21, 2026
if (settings.has(SETTING_SKY_VERSION))
{
mSkySettingVersion = (U8)settings[SETTING_SKY_VERSION].asReal();
}
else
{
mSkySettingVersion = 1;
}

if (mSkySettingVersion > 1)
{
mHDRMax = (F32)settings[SETTING_HDR_MAX].asReal();
mHDRMin = (F32)settings[SETTING_HDR_MIN].asReal();
mHDROffset = (F32)settings[SETTING_HDR_OFFSET].asReal();
mTonemapMix = (F32)settings[SETTING_HDR_TONEMAPPER_AMOUNT].asReal();
mTonemapper = (U8)settings[SETTING_HDR_TONEMAPPER].asInteger();
mSunBrightness = (F32)settings[SETTING_SUN_BRIGHTNESS].asReal();
mAmbientSkySaturation = settings.has(SETTING_AMBIENT_SKY_SATURATION)
? (F32)settings[SETTING_AMBIENT_SKY_SATURATION].asReal()
: 0.0f;
}
else
{
mHDRMax = 2.0f;
mHDRMin = 0.5f;
mHDROffset = 1.0f;
mTonemapMix = 1.0f;
mTonemapper = 0;
mSunBrightness = 130000.f; // Brightness roughly around high noon in lux.
mAmbientSkySaturation = 0.0f;
}

mSunTextureId = settings[SETTING_SUN_TEXTUREID].asUUID();
mMoonTextureId = settings[SETTING_MOON_TEXTUREID].asUUID();
Expand Down Expand Up @@ -1326,6 +1390,17 @@ void LLSettingsSky::saveValuesToLLSD()
settings[SETTING_SKY_DROPLET_RADIUS] = mSkyDropletRadius;
settings[SETTING_SKY_ICE_LEVEL] = mSkyIceLevel;
settings[SETTING_PLANET_RADIUS] = mPlanetRadius;
if (mSkySettingVersion > 1)
{
settings[SETTING_HDR_MAX] = mHDRMax;
settings[SETTING_HDR_MIN] = mHDRMin;
settings[SETTING_HDR_OFFSET] = mHDROffset;
settings[SETTING_HDR_TONEMAPPER] = mTonemapper;
settings[SETTING_HDR_TONEMAPPER_AMOUNT] = mTonemapMix;
settings[SETTING_SKY_VERSION] = mSkySettingVersion;
settings[SETTING_SUN_BRIGHTNESS] = mSunBrightness;
settings[SETTING_AMBIENT_SKY_SATURATION] = mAmbientSkySaturation;
}

LLSD& legacy = settings[SETTING_LEGACY_HAZE];
set_legacy(settings, legacy, SETTING_DISTANCE_MULTIPLIER, mLegacyDistanceMultiplier, LLSD::Real(mDistanceMultiplier));
Expand Down Expand Up @@ -1540,6 +1615,18 @@ void LLSettingsSky::setReflectionProbeAmbiance(F32 ambiance)
setLLSDDirty();
}

F32 LLSettingsSky::getAmbientSkySaturation() const
{
return mAmbientSkySaturation;
}

void LLSettingsSky::setAmbientSkySaturation(F32 val)
{
mAmbientSkySaturation = val;
setDirtyFlag(true);
setLLSDDirty();
}

void LLSettingsSky::setAmbientColor(const LLColor3 &val)
{
mAmbientColor = val;
Expand Down Expand Up @@ -2063,31 +2150,52 @@ F32 LLSettingsSky::getGamma() const

F32 LLSettingsSky::getHDRMin(bool auto_adjust) const
{
if (mCanAutoAdjust && !auto_adjust)
if ((mCanAutoAdjust || mSkySettingVersion < 2) && !auto_adjust)
return 0.f;

return mHDRMin;
}

F32 LLSettingsSky::getHDRMax(bool auto_adjust) const
{
if (mCanAutoAdjust && !auto_adjust)
if ((mCanAutoAdjust || mSkySettingVersion < 2) && !auto_adjust)
return 0.f;

return mHDRMax;
}

F32 LLSettingsSky::getHDROffset(bool auto_adjust) const
{
if (mCanAutoAdjust && !auto_adjust)
if ((mCanAutoAdjust || mSkySettingVersion < 2) && !auto_adjust)
return 1.0f;

return mHDROffset;
}

void LLSettingsSky::setHDRMin(F32 val)
{
mHDRMin = val;
setDirtyFlag(true);
setLLSDDirty();
}

void LLSettingsSky::setHDRMax(F32 val)
{
mHDRMax = val;
setDirtyFlag(true);
setLLSDDirty();
}

void LLSettingsSky::setHDROffset(F32 val)
{
mHDROffset = val;
setDirtyFlag(true);
setLLSDDirty();
}

F32 LLSettingsSky::getTonemapMix(bool auto_adjust) const
{
if (mCanAutoAdjust && !auto_adjust)
if ((mCanAutoAdjust || mSkySettingVersion < 2) && !auto_adjust)
{
// legacy settings do not support tonemaping
return 0.0f;
Expand All @@ -2099,6 +2207,32 @@ F32 LLSettingsSky::getTonemapMix(bool auto_adjust) const
void LLSettingsSky::setTonemapMix(F32 mix)
{
mTonemapMix = mix;
setDirtyFlag(true);
setLLSDDirty();
}

U8 LLSettingsSky::getTonemapper() const
{
return mTonemapper;
}

void LLSettingsSky::setTonemapper(U8 tonemapper)
{
mTonemapper = tonemapper;
setDirtyFlag(true);
setLLSDDirty();
}

U8 LLSettingsSky::getSkySettingVersion() const
{
return mSkySettingVersion;
}

void LLSettingsSky::setSkySettingVersion(U8 version)
{
mSkySettingVersion = version;
setDirtyFlag(true);
setLLSDDirty();
}

void LLSettingsSky::setGamma(F32 val)
Expand Down Expand Up @@ -2189,6 +2323,24 @@ void LLSettingsSky::setStarBrightness(F32 val)
setLLSDDirty();
}

F32 LLSettingsSky::getSunBrightness() const
{
if (mSkySettingVersion < 2)
{
// V1 skies used a ~1.0 light scale.
// Return the lux equivalent for a PBR pipeline (shader normalizes by dividing by 100000).
return 130000.f;
}
return mSunBrightness;
}

void LLSettingsSky::setSunBrightness(F32 val)
{
mSunBrightness = val;
setDirtyFlag(true);
setLLSDDirty();
}

LLColor3 LLSettingsSky::getSunlightColor() const
{
return mSunlightColor;
Expand Down
30 changes: 30 additions & 0 deletions indra/llinventory/llsettingssky.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ const F32 MOON_DIST = 384.400e6f;
class LLSettingsSky: public LLSettingsBase
{
public:
static const std::string SETTING_SKY_VERSION;
static const U8 MAX_SKY_SETTINGS_VERSION = 2;
static const std::string SETTING_AMBIENT;
static const std::string SETTING_BLOOM_TEXTUREID;
static const std::string SETTING_RAINBOW_TEXTUREID;
Expand Down Expand Up @@ -75,6 +77,7 @@ class LLSettingsSky: public LLSettingsBase
static const std::string SETTING_SUN_ROTATION;
static const std::string SETTING_SUN_SCALE;
static const std::string SETTING_SUN_TEXTUREID;
static const std::string SETTING_SUN_BRIGHTNESS;

static const std::string SETTING_PLANET_RADIUS;
static const std::string SETTING_SKY_BOTTOM_RADIUS;
Expand All @@ -98,6 +101,7 @@ class LLSettingsSky: public LLSettingsBase
static const std::string SETTING_SKY_ICE_LEVEL;

static const std::string SETTING_REFLECTION_PROBE_AMBIANCE;
static const std::string SETTING_AMBIENT_SKY_SATURATION;

static const std::string SETTING_LEGACY_HAZE;

Expand All @@ -106,6 +110,13 @@ class LLSettingsSky: public LLSettingsBase
static const F32 DEFAULT_AUTO_ADJUST_PROBE_AMBIANCE;
static F32 sAutoAdjustProbeAmbiance;

static const std::string SETTING_HDR_OFFSET;
static const std::string SETTING_HDR_MAX;
static const std::string SETTING_HDR_MIN;

static const std::string SETTING_HDR_TONEMAPPER;
static const std::string SETTING_HDR_TONEMAPPER_AMOUNT;

typedef PTR_NAMESPACE::shared_ptr<LLSettingsSky> ptr_t;

//---------------------------------------------------------------------
Expand Down Expand Up @@ -174,6 +185,9 @@ class LLSettingsSky: public LLSettingsBase

void setReflectionProbeAmbiance(F32 ambiance);

F32 getAmbientSkySaturation() const;
void setAmbientSkySaturation(F32 val);

//---------------------------------------------------------------------
LLColor3 getAmbientColor() const;
void setAmbientColor(const LLColor3 &val);
Expand Down Expand Up @@ -213,8 +227,17 @@ class LLSettingsSky: public LLSettingsBase
F32 getHDRMin(bool auto_adjust = false) const;
F32 getHDRMax(bool auto_adjust = false) const;
F32 getHDROffset(bool auto_adjust = false) const;
void setHDRMin(F32 val);
void setHDRMax(F32 val);
void setHDROffset(F32 val);

F32 getTonemapMix(bool auto_adjust = false) const;
void setTonemapMix(F32 mix);
U8 getTonemapper() const;
void setTonemapper(U8 tonemapper);

U8 getSkySettingVersion() const;
void setSkySettingVersion(U8 version);

void setGamma(F32 val);

Expand All @@ -240,6 +263,9 @@ class LLSettingsSky: public LLSettingsBase
F32 getStarBrightness() const;
void setStarBrightness(F32 val);

F32 getSunBrightness() const;
void setSunBrightness(F32 val);

LLColor3 getSunlightColor() const;
void setSunlightColor(const LLColor3 &val);

Expand Down Expand Up @@ -373,11 +399,14 @@ class LLSettingsSky: public LLSettingsBase
LLUUID mNextHaloTextureId;

bool mCanAutoAdjust;
U8 mSkySettingVersion;
LLQuaternion mSunRotation;
LLQuaternion mMoonRotation;
LLColor3 mSunlightColor;
F32 mSunBrightness;
LLColor3 mGlow;
F32 mReflectionProbeAmbiance;
F32 mAmbientSkySaturation;
F32 mSunScale;
F32 mStarBrightness;
F32 mMoonBrightness;
Expand All @@ -387,6 +416,7 @@ class LLSettingsSky: public LLSettingsBase
F32 mCloudVariance;
F32 mCloudShadow;
F32 mCloudScale;
U8 mTonemapper;
F32 mTonemapMix;
F32 mHDROffset;
F32 mHDRMax;
Expand Down
Loading
Loading