DRTVWR-592: Add triplanar mapping setting, gate to High graphics setting or higher, bump feature table
parent
754fe9d4b7
commit
2dc3f3ade1
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue