diff options
| author | Cosmic Linden <cosmic@lindenlab.com> | 2023-10-13 10:39:16 -0700 | 
|---|---|---|
| committer | Cosmic Linden <cosmic@lindenlab.com> | 2023-10-13 10:39:16 -0700 | 
| commit | 2dc3f3ade165d7d15d8579a0f04b72f6aa56c7fe (patch) | |
| tree | a852d1b74269086a39646b845e629ab748b99089 /indra/newview | |
| parent | 754fe9d4b72c3a22fb18e32bd48daaa2ae7b02f7 (diff) | |
DRTVWR-592: Add triplanar mapping setting, gate to High graphics setting or higher, bump feature table
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl | 3 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/pbrterrainUtilF.glsl | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable.txt | 8 | ||||
| -rw-r--r-- | indra/newview/featuretable_mac.txt | 8 | ||||
| -rw-r--r-- | indra/newview/llviewercontrol.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 15 | 
7 files changed, 42 insertions, 6 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2dac0b5d70..28ee1b3a70 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -10733,6 +10733,17 @@        <key>Value</key>        <real>4.0</real>      </map> +    <key>RenderTerrainPBRPlanarSampleCount</key> +    <map> +      <key>Comment</key> +      <string>How many UV planes to sample PBR terrain textures from. 1 is "flat", 3 is triplanar mapping (aka box mapping)</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <real>3</real> +    </map>      <key>RenderTrackerBeacon</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl index 5bf20a3020..b9073a9361 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainF.glsl @@ -25,9 +25,6 @@  #define TERRAIN_PBR_DETAIL_EMISSIVE 0 -#define TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT 3 // TODO: Move definition to config - -// TODO: Should be able to define this in another file and have it included in this one...  #if TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT == 3  #define TerrainCoord vec4[2]  #elif TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT == 1 diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainUtilF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainUtilF.glsl index 4f337b5ce1..b0b77398df 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pbrterrainUtilF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pbrterrainUtilF.glsl @@ -64,8 +64,6 @@ vec4 terrain_mix(vec4[4] samples, float alpha1, float alpha2, float alphaFinal)      return mix( mix(samples[3], samples[2], alpha2), mix(samples[1], samples[0], alpha1), alphaFinal );  } -#define TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT 3 // TODO: Move definition to config -  #if TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT == 3  // Pre-transformed texture coordinates for each axial uv slice (Packing: xy, yz, zx, unused)  #define TerrainCoord vec4[2] diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index cb941b424b..4bc83b099f 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -49,6 +49,7 @@ RenderReflectionProbeDetail	1	2  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTerrainPBRDetail      1   0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTreeLODFactor			1	1.0  RenderVBOEnable				1	1  RenderVBOMappingDisable		1	1 @@ -95,6 +96,7 @@ RenderReflectionsEnabled    1   0  RenderReflectionProbeDetail	1	0  RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTreeLODFactor			1	0  RenderVolumeLODFactor		1	1.125  RenderDeferredSSAO			1	0 @@ -124,6 +126,7 @@ RenderReflectionsEnabled    1   1  RenderReflectionProbeDetail	1	0  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.125  RenderDeferredSSAO			1	0 @@ -151,6 +154,7 @@ RenderLocalLights			1	1  RenderTransparentWater      1   0  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.25  RenderDeferredSSAO			1	0 @@ -180,6 +184,7 @@ RenderLocalLights			1	1  RenderTransparentWater      1   1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.375  RenderDeferredSSAO			1	0 @@ -209,6 +214,7 @@ RenderLocalLights			1	1  RenderTransparentWater      1   1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.5  RenderDeferredSSAO			1	1 @@ -237,6 +243,7 @@ RenderMaxPartCount			1	4096  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.75 @@ -265,6 +272,7 @@ RenderLocalLights			1	1  RenderMaxPartCount			1	8192  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0  RenderVolumeLODFactor		1	2.0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index c04c1c9a4f..97dad655a2 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -45,6 +45,7 @@ RenderObjectBump			1	1  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0  RenderVBOEnable				1	1 @@ -89,6 +90,7 @@ RenderLocalLights			1	0  RenderMaxPartCount			1	0  RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0  RenderVolumeLODFactor		1	1.125 @@ -118,6 +120,7 @@ RenderMaxPartCount			1	2048  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.125 @@ -147,6 +150,7 @@ RenderMaxPartCount			1	4096  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.25 @@ -176,6 +180,7 @@ RenderMaxPartCount			1	4096  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   1  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.375 @@ -205,6 +210,7 @@ RenderMaxPartCount			1	4096  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.5 @@ -234,6 +240,7 @@ RenderMaxPartCount			1	4096  RenderLocalLights			1	1  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5  RenderVolumeLODFactor		1	1.75 @@ -262,6 +269,7 @@ RenderLocalLights			1	1  RenderMaxPartCount			1	8192  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0 +RenderTerrainPBRPlanarSampleCount 1   3  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0  RenderVolumeLODFactor		1	2.0 diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index ea821004a3..19999545b6 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -717,6 +717,7 @@ void settings_setup_listeners()      setting_setup_signal_listener(gSavedSettings, "RenderTerrainScale", handleTerrainScaleChanged);      setting_setup_signal_listener(gSavedSettings, "RenderTerrainPBRScale", handlePBRTerrainScaleChanged);      setting_setup_signal_listener(gSavedSettings, "RenderTerrainPBRDetail", handleSetShaderChanged); +    setting_setup_signal_listener(gSavedSettings, "RenderTerrainPBRPlanarSampleCount", handleSetShaderChanged);      setting_setup_signal_listener(gSavedSettings, "OctreeStaticObjectSizeFactor", handleRepartition);      setting_setup_signal_listener(gSavedSettings, "OctreeDistanceFactor", handleRepartition);      setting_setup_signal_listener(gSavedSettings, "OctreeMaxNodeCapacity", handleRepartition); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 320801861c..c23ef1c314 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -69,6 +69,14 @@ bool				LLViewerShaderMgr::sSkipReload = false;  LLVector4			gShinyOrigin; +S32 clamp_terrain_mapping(S32 mapping) +{ +    // 1 = "flat", 2 not implemented, 3 = triplanar mapping +    mapping = llclamp(mapping, 1, 3); +    if (mapping == 2) { mapping = 1; } +    return mapping; +} +  //utility shaders  LLGLSLShader	gOcclusionProgram;  LLGLSLShader    gSkinnedOcclusionProgram; @@ -682,6 +690,9 @@ std::string LLViewerShaderMgr::loadBasicShaders()  		attribs["REF_SAMPLE_COUNT"] = "32";  	} +    const S32 mapping = clamp_terrain_mapping(gSavedSettings.getS32("RenderTerrainPBRPlanarSampleCount")); +    attribs["TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT"] = llformat("%d", mapping); +  	LLGLSLShader::sGlobalDefines = attribs;  	// We no longer have to bind the shaders to global glhandles, they are automatically added to a map now. @@ -720,7 +731,7 @@ std::string LLViewerShaderMgr::loadBasicShaders()  	index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/deferredUtil.glsl",                    1) );  	index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/shadowUtil.glsl",                      1) );  	index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/aoUtil.glsl",                          1) ); -	index_channels.push_back(-1);    shaders.push_back(make_pair("deferred/pbrterrainUtilF.glsl", 1)); +	index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/pbrterrainUtilF.glsl",                 1) );      index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/reflectionProbeF.glsl",                has_reflection_probes ? 3 : 2) );      index_channels.push_back(-1);    shaders.push_back( make_pair( "deferred/screenSpaceReflUtil.glsl",             ssr ? 3 : 1) );  	index_channels.push_back(-1);    shaders.push_back( make_pair( "lighting/lightNonIndexedF.glsl",                    mShaderLevel[SHADER_LIGHTING] ) ); @@ -1497,6 +1508,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	{          S32 detail = gSavedSettings.getS32("RenderTerrainPBRDetail");          detail = llclamp(detail, TERRAIN_PBR_DETAIL_MIN, TERRAIN_PBR_DETAIL_MAX); +        const S32 mapping = clamp_terrain_mapping(gSavedSettings.getS32("RenderTerrainPBRPlanarSampleCount"));          gDeferredPBRTerrainProgram.mName = llformat("Deferred PBR Terrain Shader %d", detail);          gDeferredPBRTerrainProgram.mFeatures.encodesNormal = true;          gDeferredPBRTerrainProgram.mFeatures.hasSrgb = true; @@ -1514,6 +1526,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()          gDeferredPBRTerrainProgram.mShaderFiles.push_back(make_pair("deferred/pbrterrainF.glsl", GL_FRAGMENT_SHADER));          gDeferredPBRTerrainProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];          gDeferredPBRTerrainProgram.addPermutation("TERRAIN_PBR_DETAIL", llformat("%d", detail)); +        gDeferredPBRTerrainProgram.addPermutation("TERRAIN_PLANAR_TEXTURE_SAMPLE_COUNT", llformat("%d", mapping));          success = gDeferredPBRTerrainProgram.createShader(NULL, NULL);          llassert(success);  	} | 
