From 494bb1cab628bb0c25e803233224253bce3ee986 Mon Sep 17 00:00:00 2001 From: David Kehoe Date: Tue, 19 Aug 2025 15:29:29 +1000 Subject: [PATCH 1/2] fix --- .../ExtendedMaterials/ExtendedMaterials.hlsli | 148 +++----- package/Shaders/Lighting.hlsl | 319 ++++-------------- 2 files changed, 110 insertions(+), 357 deletions(-) diff --git a/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli b/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli index 63e3cf8ec4..e2313c6067 100644 --- a/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli +++ b/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli @@ -7,6 +7,18 @@ #if defined(TERRAIN_VARIATION) && defined(LANDSCAPE) # include "TerrainVariation/TerrainVariation.hlsli" + +// Optimized terrain sampling helper for Extended Materials +inline float4 SampleTerrainTextureEM(Texture2D tex, SamplerState samp, float2 coords, float mipLevel, bool useVariation, StochasticOffsets offsets, float2 dx, float2 dy) +{ + return useVariation ? StochasticEffectParallax(tex, samp, coords, mipLevel, offsets, dx, dy) : tex.SampleLevel(samp, coords, mipLevel); +} +#else +// Fallback when terrain variation is not defined +inline float4 SampleTerrainTextureEM(Texture2D tex, SamplerState samp, float2 coords, float mipLevel, bool useVariation, float4 dummy1, float2 dummy2, float2 dummy3) +{ + return tex.SampleLevel(samp, coords, mipLevel); +} #endif struct DisplacementParams @@ -122,64 +134,46 @@ namespace ExtendedMaterials { float heightBlend = 1 + blendFactor * HEIGHT_POWER; float heights[6] = { 0, 0, 0, 0, 0, 0 }; + + // Centralized terrain variation check + bool useVariation = false; +# if defined(TERRAIN_VARIATION) + useVariation = SharedData::terrainVariationSettings.enableTilingFix; +# endif [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile0HasDisplacement) != 0 && w1.x > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[0] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement0Sampler, SampTerrainParallaxSampler, coords, mipLevels[0], sharedOffset, dx, dy).x, params[0]); -# else - heights[0] = ScaleDisplacement(TexLandDisplacement0Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[0]).x, params[0]); -# endif + heights[0] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement0Sampler, SampTerrainParallaxSampler, coords, mipLevels[0], useVariation, sharedOffset, dx, dy).x, params[0]); } [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile1HasDisplacement) != 0 && w1.y > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[1] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement1Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], sharedOffset, dx, dy).x, params[1]); -# else - heights[1] = ScaleDisplacement(TexLandDisplacement1Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[1]).x, params[1]); -# endif + heights[1] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement1Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], useVariation, sharedOffset, dx, dy).x, params[1]); } [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile2HasDisplacement) != 0 && w1.z > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[2] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement2Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], sharedOffset, dx, dy).x, params[2]); -# else - heights[2] = ScaleDisplacement(TexLandDisplacement2Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[2]).x, params[2]); -# endif + heights[2] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement2Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], useVariation, sharedOffset, dx, dy).x, params[2]); } [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile3HasDisplacement) != 0 && w1.w > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[3] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement3Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], sharedOffset, dx, dy).x, params[3]); -# else - heights[3] = ScaleDisplacement(TexLandDisplacement3Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[3]).x, params[3]); -# endif + heights[3] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement3Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], useVariation, sharedOffset, dx, dy).x, params[3]); } [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile4HasDisplacement) != 0 && w2.x > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[4] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement4Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], sharedOffset, dx, dy).x, params[4]); -# else - heights[4] = ScaleDisplacement(TexLandDisplacement4Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[4]).x, params[4]); -# endif + heights[4] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement4Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], useVariation, sharedOffset, dx, dy).x, params[4]); } [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile5HasDisplacement) != 0 && w2.y > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[5] = ScaleDisplacement(StochasticEffectParallax(TexLandDisplacement5Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], sharedOffset, dx, dy).x, params[5]); -# else - heights[5] = ScaleDisplacement(TexLandDisplacement5Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[5]).x, params[5]); -# endif + heights[5] = ScaleDisplacement(SampleTerrainTextureEM(TexLandDisplacement5Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], useVariation, sharedOffset, dx, dy).x, params[5]); } float total; ProcessTerrainHeightWeights(heightBlend, w1, w2, heights, weights, total); -# if defined(TERRAIN_VARIATION) - // Boost height by 30% when terrain variation is enabled to enhance depth perception - [branch] if (SharedData::terrainVariationSettings.enableTilingFix) { + + // Apply height boost for terrain variation if enabled + if (useVariation) { total *= 1.3; } -# endif + return total; } # else float GetTerrainHeight(float screenNoise, PS_INPUT input, float2 coords, float mipLevels[6], DisplacementParams params[6], float blendFactor, float4 w1, float2 w2, @@ -191,117 +185,75 @@ namespace ExtendedMaterials float heightBlend = 1 + blendFactor * HEIGHT_POWER; float heights[6] = { 0, 0, 0, 0, 0, 0 }; + // Centralized terrain variation check + bool useVariation = false; +# if defined(TERRAIN_VARIATION) + useVariation = SharedData::terrainVariationSettings.enableTilingFix; +# endif + if (w1.x > 0.01) { [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand0HasDisplacement) != 0) { -# if defined(TERRAIN_VARIATION) - heights[0] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp0Sampler, SampTerrainParallaxSampler, coords, mipLevels[0], sharedOffset, dx, dy).x, params[0]); -# else - heights[0] = ScaleDisplacement(TexLandTHDisp0Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[0]).x, params[0]); -# endif + heights[0] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp0Sampler, SampTerrainParallaxSampler, coords, mipLevels[0], useVariation, sharedOffset, dx, dy).x, params[0]); } else { -# if defined(TERRAIN_VARIATION) - heights[0] = ScaleDisplacement(StochasticEffectParallax(TexColorSampler, SampTerrainParallaxSampler, coords, mipLevels[0], sharedOffset, dx, dy).w, params[0]); -# else - heights[0] = ScaleDisplacement(TexColorSampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[0]).w, params[0]); -# endif + heights[0] = ScaleDisplacement(SampleTerrainTextureEM(TexColorSampler, SampTerrainParallaxSampler, coords, mipLevels[0], useVariation, sharedOffset, dx, dy).w, params[0]); } } if (w1.y > 0.01) { [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand1HasDisplacement) != 0) { -# if defined(TERRAIN_VARIATION) - heights[1] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp1Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], sharedOffset, dx, dy).x, params[1]); -# else - heights[1] = ScaleDisplacement(TexLandTHDisp1Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[1]).x, params[1]); -# endif + heights[1] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp1Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], useVariation, sharedOffset, dx, dy).x, params[1]); } else { -# if defined(TERRAIN_VARIATION) - heights[1] = ScaleDisplacement(StochasticEffectParallax(TexLandColor2Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], sharedOffset, dx, dy).w, params[1]); -# else - heights[1] = ScaleDisplacement(TexLandColor2Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[1]).w, params[1]); -# endif + heights[1] = ScaleDisplacement(SampleTerrainTextureEM(TexLandColor2Sampler, SampTerrainParallaxSampler, coords, mipLevels[1], useVariation, sharedOffset, dx, dy).w, params[1]); } } if (w1.z > 0.01) { [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand2HasDisplacement) != 0) { -# if defined(TERRAIN_VARIATION) - heights[2] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp2Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], sharedOffset, dx, dy).x, params[2]); -# else - heights[2] = ScaleDisplacement(TexLandTHDisp2Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[2]).x, params[2]); -# endif + heights[2] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp2Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], useVariation, sharedOffset, dx, dy).x, params[2]); } else { -# if defined(TERRAIN_VARIATION) - heights[2] = ScaleDisplacement(StochasticEffectParallax(TexLandColor3Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], sharedOffset, dx, dy).w, params[2]); -# else - heights[2] = ScaleDisplacement(TexLandColor3Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[2]).w, params[2]); -# endif + heights[2] = ScaleDisplacement(SampleTerrainTextureEM(TexLandColor3Sampler, SampTerrainParallaxSampler, coords, mipLevels[2], useVariation, sharedOffset, dx, dy).w, params[2]); } } [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand3HasDisplacement) != 0 && w1.w > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[3] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp3Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], sharedOffset, dx, dy).x, params[3]); -# else - heights[3] = ScaleDisplacement(TexLandTHDisp3Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[3]).x, params[3]); -# endif + heights[3] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp3Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], useVariation, sharedOffset, dx, dy).x, params[3]); } else if (w1.w > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[3] = ScaleDisplacement(StochasticEffectParallax(TexLandColor4Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], sharedOffset, dx, dy).w, params[3]); -# else - heights[3] = ScaleDisplacement(TexLandColor4Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[3]).w, params[3]); -# endif + heights[3] = ScaleDisplacement(SampleTerrainTextureEM(TexLandColor4Sampler, SampTerrainParallaxSampler, coords, mipLevels[3], useVariation, sharedOffset, dx, dy).w, params[3]); } [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand4HasDisplacement) != 0 && w2.x > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[4] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp4Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], sharedOffset, dx, dy).x, params[4]); -# else - heights[4] = ScaleDisplacement(TexLandTHDisp4Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[4]).x, params[4]); -# endif + heights[4] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp4Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], useVariation, sharedOffset, dx, dy).x, params[4]); } else if (w2.x > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[4] = ScaleDisplacement(StochasticEffectParallax(TexLandColor5Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], sharedOffset, dx, dy).w, params[4]); -# else - heights[4] = ScaleDisplacement(TexLandColor5Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[4]).w, params[4]); -# endif + heights[4] = ScaleDisplacement(SampleTerrainTextureEM(TexLandColor5Sampler, SampTerrainParallaxSampler, coords, mipLevels[4], useVariation, sharedOffset, dx, dy).w, params[4]); } [branch] if ((Permutation::ExtraFeatureDescriptor & Permutation::ExtraFeatureFlags::THLand5HasDisplacement) != 0 && w2.y > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[5] = ScaleDisplacement(StochasticEffectParallax(TexLandTHDisp5Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], sharedOffset, dx, dy).x, params[5]); -# else - heights[5] = ScaleDisplacement(TexLandTHDisp5Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[5]).x, params[5]); -# endif + heights[5] = ScaleDisplacement(SampleTerrainTextureEM(TexLandTHDisp5Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], useVariation, sharedOffset, dx, dy).x, params[5]); } else if (w2.y > 0.01) { -# if defined(TERRAIN_VARIATION) - heights[5] = ScaleDisplacement(StochasticEffectParallax(TexLandColor6Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], sharedOffset, dx, dy).w, params[5]); -# else - heights[5] = ScaleDisplacement(TexLandColor6Sampler.SampleLevel(SampTerrainParallaxSampler, coords, mipLevels[5]).w, params[5]); -# endif + heights[5] = ScaleDisplacement(SampleTerrainTextureEM(TexLandColor6Sampler, SampTerrainParallaxSampler, coords, mipLevels[5], useVariation, sharedOffset, dx, dy).w, params[5]); } float total; ProcessTerrainHeightWeights(heightBlend, w1, w2, heights, weights, total); -# if defined(TERRAIN_VARIATION) - // Boost height by 30% when terrain variation is enabled to enhance depth perception - [branch] if (SharedData::terrainVariationSettings.enableTilingFix) { + + // Apply height boost for terrain variation if enabled + if (useVariation) { total *= 1.3; } -# endif + return total; } # endif diff --git a/package/Shaders/Lighting.hlsl b/package/Shaders/Lighting.hlsl index ebf45bbfaa..b0c43ab87d 100644 --- a/package/Shaders/Lighting.hlsl +++ b/package/Shaders/Lighting.hlsl @@ -964,6 +964,18 @@ float GetSnowParameterY(float texProjTmp, float alpha) # if defined(TERRAIN_VARIATION) # include "TerrainVariation/TerrainVariation.hlsli" + +// Optimized terrain sampling helper to reduce branching +inline float4 SampleTerrainTexture(Texture2D tex, SamplerState samp, float2 uv, bool useVariation, StochasticOffsets offsets, float2 dx, float2 dy) +{ + return useVariation ? StochasticEffect(tex, samp, uv, offsets, dx, dy) : tex.SampleBias(samp, uv, SharedData::MipBias); +} +# else +// Fallback when terrain variation is not defined +inline float4 SampleTerrainTexture(Texture2D tex, SamplerState samp, float2 uv, bool useVariation, float4 dummy1, float2 dummy2, float2 dummy3) +{ + return tex.SampleBias(samp, uv, SharedData::MipBias); +} # endif # if defined(EXTENDED_TRANSLUCENCY) && !(defined(LOD) || defined(SKIN) || defined(HAIR) || defined(EYE) || defined(TREE_ANIM) || defined(LODOBJECTSHD) || defined(LODOBJECTS) || defined(DEPTH_WRITE_DECALS)) @@ -1210,25 +1222,28 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 blendedRMAOS = 0; # endif - // Compute stochastic offsets and derivatives once for all layers (only when terrain variation is enabled) -# if defined(TERRAIN_VARIATION) - bool useTerrainVariation = SharedData::terrainVariationSettings.enableTilingFix; - // Initialise dx, dy, and sharedOffset for when Terrain Variation is disabled via enableTilingFix but still #defined - float2 dx = 0, dy = 0; - StochasticOffsets sharedOffset; - sharedOffset.offset1 = float2(0, 0); - sharedOffset.offset2 = float2(0, 0); - sharedOffset.offset3 = float2(0, 0); - sharedOffset.weights = float3(0, 0, 0); - [branch] if (useTerrainVariation) - { - dx = ddx(input.TexCoord0.zw); - dy = ddy(input.TexCoord0.zw); - sharedOffset = ComputeStochasticOffsets(input.TexCoord0.zw); - } -# endif + // Optimize terrain variation setup - compute once, use everywhere + bool useTerrainVariation = false; + float2 dx = 0, dy = 0; +# if defined(TERRAIN_VARIATION) + StochasticOffsets sharedOffset; + sharedOffset.offset1 = float2(0, 0); + sharedOffset.offset2 = float2(0, 0); + sharedOffset.offset3 = float2(0, 0); + sharedOffset.weights = float3(0, 0, 0); + + useTerrainVariation = SharedData::terrainVariationSettings.enableTilingFix; + if (useTerrainVariation) + { + dx = ddx(input.TexCoord0.zw); + dy = ddy(input.TexCoord0.zw); + sharedOffset = ComputeStochasticOffsets(input.TexCoord0.zw); + } +# else + float4 sharedOffset = float4(0, 0, 0, 0); // Dummy for fallback +# endif -# if defined(EMAT) +# if defined(EMAT) if (SharedData::extendedMaterialSettings.EnableTerrainParallax) { mipLevels[0] = ExtendedMaterials::GetMipLevel(uv, TexColorSampler); mipLevels[1] = ExtendedMaterials::GetMipLevel(uv, TexLandColor2Sampler); @@ -1322,20 +1337,8 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) if (input.LandBlendWeights1.x > 0.01) { float weight = input.LandBlendWeights1.x; - // Sample diffuse texture for layer 1 -# if defined(TERRAIN_VARIATION) - float4 landColor1; - [branch] if (useTerrainVariation) - { - landColor1 = StochasticEffect(TexColorSampler, SampColorSampler, uv, sharedOffset, dx, dy); - } - else - { - landColor1 = TexColorSampler.SampleBias(SampColorSampler, uv, SharedData::MipBias); - } -# else - float4 landColor1 = TexColorSampler.SampleBias(SampColorSampler, uv, SharedData::MipBias); -# endif + // Sample textures with optimized terrain variation + float4 landColor1 = SampleTerrainTexture(TexColorSampler, SampColorSampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB1 = landColor1.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile0PBR) == 0) @@ -1346,20 +1349,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha1 = landColor1.a; float landSnowMask1 = GetLandSnowMaskValue(landColor1.w); - // Sample normal texture for layer 1 -# if defined(TERRAIN_VARIATION) - float4 landNormal1; - [branch] if (useTerrainVariation) - { - landNormal1 = StochasticEffect(TexNormalSampler, SampNormalSampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal1 = TexNormalSampler.SampleBias(SampNormalSampler, uv, SharedData::MipBias); - } -# else - float4 landNormal1 = TexNormalSampler.SampleBias(SampNormalSampler, uv, SharedData::MipBias); -# endif + float4 landNormal1 = SampleTerrainTexture(TexNormalSampler, SampNormalSampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB1 = landNormal1.rgb; float landNormalAlpha1 = landNormal1.a; # if defined(SNOW) && !defined(TRUE_PBR) @@ -1371,18 +1361,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS1; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile0PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS1 = StochasticEffect(TexRMAOSSampler, SampRMAOSSampler, uv, sharedOffset, dx, dy) * float4(PBRParams1.x, 1, 1, PBRParams1.z); - } - else - { - landRMAOS1 = TexRMAOSSampler.SampleBias(SampRMAOSSampler, uv, SharedData::MipBias) * float4(PBRParams1.x, 1, 1, PBRParams1.z); - } -# else - landRMAOS1 = TexRMAOSSampler.SampleBias(SampRMAOSSampler, uv, SharedData::MipBias) * float4(PBRParams1.x, 1, 1, PBRParams1.z); -# endif + landRMAOS1 = SampleTerrainTexture(TexRMAOSSampler, SampRMAOSSampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(PBRParams1.x, 1, 1, PBRParams1.z); if ((PBRFlags & PBR::TerrainFlags::LandTile0HasGlint) != 0) { glintParameters += weight * LandscapeTexture1GlintParameters; } @@ -1403,20 +1382,8 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) if (input.LandBlendWeights1.y > 0.01) { float weight = input.LandBlendWeights1.y; - // Sample diffuse texture for layer 2 -# if defined(TERRAIN_VARIATION) - float4 landColor2; - [branch] if (useTerrainVariation) - { - landColor2 = StochasticEffect(TexLandColor2Sampler, SampLandColor2Sampler, uv, sharedOffset, dx, dy); - } - else - { - landColor2 = TexLandColor2Sampler.SampleBias(SampLandColor2Sampler, uv, SharedData::MipBias); - } -# else - float4 landColor2 = TexLandColor2Sampler.SampleBias(SampLandColor2Sampler, uv, SharedData::MipBias); -# endif + // Sample textures with optimized terrain variation + float4 landColor2 = SampleTerrainTexture(TexLandColor2Sampler, SampLandColor2Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB2 = landColor2.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile1PBR) == 0) @@ -1427,20 +1394,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha2 = landColor2.a; float landSnowMask2 = GetLandSnowMaskValue(landColor2.w); - // Sample normal texture for layer 2 -# if defined(TERRAIN_VARIATION) - float4 landNormal2; - [branch] if (useTerrainVariation) - { - landNormal2 = StochasticEffect(TexLandNormal2Sampler, SampLandNormal2Sampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal2 = TexLandNormal2Sampler.SampleBias(SampLandNormal2Sampler, uv, SharedData::MipBias); - } -# else - float4 landNormal2 = TexLandNormal2Sampler.SampleBias(SampLandNormal2Sampler, uv, SharedData::MipBias); -# endif + float4 landNormal2 = SampleTerrainTexture(TexLandNormal2Sampler, SampLandNormal2Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB2 = landNormal2.rgb; float landNormalAlpha2 = landNormal2.a; # if defined(SNOW) && !defined(TRUE_PBR) @@ -1452,18 +1406,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS2; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile1PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS2 = StochasticEffect(TexLandRMAOS2Sampler, SampLandRMAOS2Sampler, uv, sharedOffset, dx, dy) * float4(LandscapeTexture2PBRParams.x, 1, 1, LandscapeTexture2PBRParams.z); - } - else - { - landRMAOS2 = TexLandRMAOS2Sampler.SampleBias(SampLandRMAOS2Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture2PBRParams.x, 1, 1, LandscapeTexture2PBRParams.z); - } -# else - landRMAOS2 = TexLandRMAOS2Sampler.SampleBias(SampLandRMAOS2Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture2PBRParams.x, 1, 1, LandscapeTexture2PBRParams.z); -# endif + landRMAOS2 = SampleTerrainTexture(TexLandRMAOS2Sampler, SampLandRMAOS2Sampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(LandscapeTexture2PBRParams.x, 1, 1, LandscapeTexture2PBRParams.z); if ((PBRFlags & PBR::TerrainFlags::LandTile1HasGlint) != 0) { glintParameters += weight * LandscapeTexture2GlintParameters; } @@ -1483,20 +1426,9 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) // Layer 3 (LandBlendWeights1.z) if (input.LandBlendWeights1.z > 0.01) { float weight = input.LandBlendWeights1.z; - // Sample diffuse texture for layer 3 -# if defined(TERRAIN_VARIATION) - float4 landColor3; - [branch] if (useTerrainVariation) - { - landColor3 = StochasticEffect(TexLandColor3Sampler, SampLandColor3Sampler, uv, sharedOffset, dx, dy); - } - else - { - landColor3 = TexLandColor3Sampler.SampleBias(SampLandColor3Sampler, uv, SharedData::MipBias); - } -# else - float4 landColor3 = TexLandColor3Sampler.SampleBias(SampLandColor3Sampler, uv, SharedData::MipBias); -# endif + + // Sample textures with optimized terrain variation + float4 landColor3 = SampleTerrainTexture(TexLandColor3Sampler, SampLandColor3Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB3 = landColor3.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile2PBR) == 0) @@ -1507,20 +1439,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha3 = landColor3.a; float landSnowMask3 = GetLandSnowMaskValue(landColor3.w); - // Sample normal texture for layer 3 -# if defined(TERRAIN_VARIATION) - float4 landNormal3; - [branch] if (useTerrainVariation) - { - landNormal3 = StochasticEffect(TexLandNormal3Sampler, SampLandNormal3Sampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal3 = TexLandNormal3Sampler.SampleBias(SampLandNormal3Sampler, uv, SharedData::MipBias); - } -# else - float4 landNormal3 = TexLandNormal3Sampler.SampleBias(SampLandNormal3Sampler, uv, SharedData::MipBias); -# endif + float4 landNormal3 = SampleTerrainTexture(TexLandNormal3Sampler, SampLandNormal3Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB3 = landNormal3.rgb; float landNormalAlpha3 = landNormal3.a; # if defined(SNOW) && !defined(TRUE_PBR) @@ -1532,18 +1451,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS3; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile2PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS3 = StochasticEffect(TexLandRMAOS3Sampler, SampLandRMAOS3Sampler, uv, sharedOffset, dx, dy) * float4(LandscapeTexture3PBRParams.x, 1, 1, LandscapeTexture3PBRParams.z); - } - else - { - landRMAOS3 = TexLandRMAOS3Sampler.SampleBias(SampLandRMAOS3Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture3PBRParams.x, 1, 1, LandscapeTexture3PBRParams.z); - } -# else - landRMAOS3 = TexLandRMAOS3Sampler.SampleBias(SampLandRMAOS3Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture3PBRParams.x, 1, 1, LandscapeTexture3PBRParams.z); -# endif + landRMAOS3 = SampleTerrainTexture(TexLandRMAOS3Sampler, SampLandRMAOS3Sampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(LandscapeTexture3PBRParams.x, 1, 1, LandscapeTexture3PBRParams.z); if ((PBRFlags & PBR::TerrainFlags::LandTile2HasGlint) != 0) { glintParameters += weight * LandscapeTexture3GlintParameters; } @@ -1563,20 +1471,8 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) if (input.LandBlendWeights1.w > 0.01) { float weight = input.LandBlendWeights1.w; - // Sample diffuse texture for layer 4 -# if defined(TERRAIN_VARIATION) - float4 landColor4; - [branch] if (useTerrainVariation) - { - landColor4 = StochasticEffect(TexLandColor4Sampler, SampLandColor4Sampler, uv, sharedOffset, dx, dy); - } - else - { - landColor4 = TexLandColor4Sampler.SampleBias(SampLandColor4Sampler, uv, SharedData::MipBias); - } -# else - float4 landColor4 = TexLandColor4Sampler.SampleBias(SampLandColor4Sampler, uv, SharedData::MipBias); -# endif + // Sample textures with optimized terrain variation + float4 landColor4 = SampleTerrainTexture(TexLandColor4Sampler, SampLandColor4Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB4 = landColor4.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile3PBR) == 0) @@ -1587,20 +1483,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha4 = landColor4.a; float landSnowMask4 = GetLandSnowMaskValue(landColor4.w); - // Sample normal texture for layer 4 -# if defined(TERRAIN_VARIATION) - float4 landNormal4; - [branch] if (useTerrainVariation) - { - landNormal4 = StochasticEffect(TexLandNormal4Sampler, SampLandNormal4Sampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal4 = TexLandNormal4Sampler.SampleBias(SampLandNormal4Sampler, uv, SharedData::MipBias); - } -# else - float4 landNormal4 = TexLandNormal4Sampler.SampleBias(SampLandNormal4Sampler, uv, SharedData::MipBias); -# endif + float4 landNormal4 = SampleTerrainTexture(TexLandNormal4Sampler, SampLandNormal4Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB4 = landNormal4.rgb; float landNormalAlpha4 = landNormal4.a; # if defined(SNOW) && !defined(TRUE_PBR) @@ -1612,19 +1495,8 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS4; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile3PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS4 = StochasticEffect(TexLandRMAOS4Sampler, SampLandRMAOS4Sampler, uv, sharedOffset, dx, dy) * float4(LandscapeTexture4PBRParams.x, 1, 1, LandscapeTexture4PBRParams.z); - } - else - { - landRMAOS4 = TexLandRMAOS4Sampler.SampleBias(SampLandRMAOS4Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture4PBRParams.x, 1, 1, LandscapeTexture4PBRParams.z); - } -# else - landRMAOS4 = TexLandRMAOS4Sampler.SampleBias(SampLandRMAOS4Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture4PBRParams.x, 1, 1, LandscapeTexture4PBRParams.z); -# endif - if ((PBRFlags & PBR::TerrainFlags::LandTile3HasGlint) != 0) {\ + landRMAOS4 = SampleTerrainTexture(TexLandRMAOS4Sampler, SampLandRMAOS4Sampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(LandscapeTexture4PBRParams.x, 1, 1, LandscapeTexture4PBRParams.z); + if ((PBRFlags & PBR::TerrainFlags::LandTile3HasGlint) != 0) { glintParameters += weight * LandscapeTexture4GlintParameters; } } @@ -1643,20 +1515,9 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) // Layer 5 (LandBlendWeights2.x) if (input.LandBlendWeights2.x > 0.01) { float weight = input.LandBlendWeights2.x; - // Sample diffuse texture for layer 5 -# if defined(TERRAIN_VARIATION) - float4 landColor5; - [branch] if (useTerrainVariation) - { - landColor5 = StochasticEffect(TexLandColor5Sampler, SampLandColor5Sampler, uv, sharedOffset, dx, dy); - } - else - { - landColor5 = TexLandColor5Sampler.SampleBias(SampLandColor5Sampler, uv, SharedData::MipBias); - } -# else - float4 landColor5 = TexLandColor5Sampler.SampleBias(SampLandColor5Sampler, uv, SharedData::MipBias); -# endif + + // Sample textures with optimized terrain variation + float4 landColor5 = SampleTerrainTexture(TexLandColor5Sampler, SampLandColor5Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB5 = landColor5.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile4PBR) == 0) @@ -1667,20 +1528,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha5 = landColor5.a; float landSnowMask5 = GetLandSnowMaskValue(landColor5.w); - // Sample normal texture for layer 5 -# if defined(TERRAIN_VARIATION) - float4 landNormal5; - [branch] if (useTerrainVariation) - { - landNormal5 = StochasticEffect(TexLandNormal5Sampler, SampLandNormal5Sampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal5 = TexLandNormal5Sampler.SampleBias(SampLandNormal5Sampler, uv, SharedData::MipBias); - } -# else - float4 landNormal5 = TexLandNormal5Sampler.SampleBias(SampLandNormal5Sampler, uv, SharedData::MipBias); -# endif + float4 landNormal5 = SampleTerrainTexture(TexLandNormal5Sampler, SampLandNormal5Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB5 = landNormal5.rgb; float landNormalAlpha5 = landNormal5.a; @@ -1693,18 +1541,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS5; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile4PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS5 = StochasticEffect(TexLandRMAOS5Sampler, SampLandRMAOS5Sampler, uv, sharedOffset, dx, dy) * float4(LandscapeTexture5PBRParams.x, 1, 1, LandscapeTexture5PBRParams.z); - } - else - { - landRMAOS5 = TexLandRMAOS5Sampler.SampleBias(SampLandRMAOS5Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture5PBRParams.x, 1, 1, LandscapeTexture5PBRParams.z); - } -# else - landRMAOS5 = TexLandRMAOS5Sampler.SampleBias(SampLandRMAOS5Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture5PBRParams.x, 1, 1, LandscapeTexture5PBRParams.z); -# endif + landRMAOS5 = SampleTerrainTexture(TexLandRMAOS5Sampler, SampLandRMAOS5Sampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(LandscapeTexture5PBRParams.x, 1, 1, LandscapeTexture5PBRParams.z); if ((PBRFlags & PBR::TerrainFlags::LandTile4HasGlint) != 0) { glintParameters += weight * LandscapeTexture5GlintParameters; } @@ -1724,20 +1561,8 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) if (input.LandBlendWeights2.y > 0.01) { float weight = input.LandBlendWeights2.y; - // Sample layer 6 textures -# if defined(TERRAIN_VARIATION) - float4 landColor6; - [branch] if (useTerrainVariation) - { - landColor6 = StochasticEffect(TexLandColor6Sampler, SampLandColor6Sampler, uv, sharedOffset, dx, dy); - } - else - { - landColor6 = TexLandColor6Sampler.SampleBias(SampLandColor6Sampler, uv, SharedData::MipBias); - } -# else - float4 landColor6 = TexLandColor6Sampler.SampleBias(SampLandColor6Sampler, uv, SharedData::MipBias); -# endif + // Sample textures with optimized terrain variation + float4 landColor6 = SampleTerrainTexture(TexLandColor6Sampler, SampLandColor6Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB6 = landColor6.rgb; # if defined(TRUE_PBR) [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile5PBR) == 0) @@ -1748,20 +1573,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float landAlpha6 = landColor6.a; float landSnowMask6 = GetLandSnowMaskValue(landColor6.w); - // Sample normal texture for layer 6 -# if defined(TERRAIN_VARIATION) - float4 landNormal6; - [branch] if (useTerrainVariation) - { - landNormal6 = StochasticEffect(TexLandNormal6Sampler, SampLandNormal6Sampler, uv, sharedOffset, dx, dy); - } - else - { - landNormal6 = TexLandNormal6Sampler.SampleBias(SampLandNormal6Sampler, uv, SharedData::MipBias); - } -# else - float4 landNormal6 = TexLandNormal6Sampler.SampleBias(SampLandNormal6Sampler, uv, SharedData::MipBias); -# endif + float4 landNormal6 = SampleTerrainTexture(TexLandNormal6Sampler, SampLandNormal6Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landNormalRGB6 = landNormal6.rgb; float landNormalAlpha6 = landNormal6.a; # if defined(SNOW) && !defined(TRUE_PBR) @@ -1773,18 +1585,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) float4 landRMAOS6; [branch] if ((PBRFlags & PBR::TerrainFlags::LandTile5PBR) != 0) { -# if defined(TERRAIN_VARIATION) - [branch] if (useTerrainVariation) - { - landRMAOS6 = StochasticEffect(TexLandRMAOS6Sampler, SampLandRMAOS6Sampler, uv, sharedOffset, dx, dy) * float4(LandscapeTexture6PBRParams.x, 1, 1, LandscapeTexture6PBRParams.z); - } - else - { - landRMAOS6 = TexLandRMAOS6Sampler.SampleBias(SampLandRMAOS6Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture6PBRParams.x, 1, 1, LandscapeTexture6PBRParams.z); - } -# else - landRMAOS6 = TexLandRMAOS6Sampler.SampleBias(SampLandRMAOS6Sampler, uv, SharedData::MipBias) * float4(LandscapeTexture6PBRParams.x, 1, 1, LandscapeTexture6PBRParams.z); -# endif + landRMAOS6 = SampleTerrainTexture(TexLandRMAOS6Sampler, SampLandRMAOS6Sampler, uv, useTerrainVariation, sharedOffset, dx, dy) * float4(LandscapeTexture6PBRParams.x, 1, 1, LandscapeTexture6PBRParams.z); if ((PBRFlags & PBR::TerrainFlags::LandTile5HasGlint) != 0) { glintParameters += weight * LandscapeTexture6GlintParameters; } From 7da6558ce15b2fe5f0fca351fb5417be7b94dc01 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 19 Aug 2025 05:30:25 +0000 Subject: [PATCH 2/2] =?UTF-8?q?style:=20=F0=9F=8E=A8=20apply=20pre-commit.?= =?UTF-8?q?ci=20formatting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automated formatting by clang-format, prettier, and other hooks. See https://pre-commit.ci for details. --- .../Shaders/ExtendedMaterials/ExtendedMaterials.hlsli | 10 +++++----- package/Shaders/Lighting.hlsl | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli b/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli index e2313c6067..5535926a3b 100644 --- a/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli +++ b/features/Extended Materials/Shaders/ExtendedMaterials/ExtendedMaterials.hlsli @@ -134,7 +134,7 @@ namespace ExtendedMaterials { float heightBlend = 1 + blendFactor * HEIGHT_POWER; float heights[6] = { 0, 0, 0, 0, 0, 0 }; - + // Centralized terrain variation check bool useVariation = false; # if defined(TERRAIN_VARIATION) @@ -168,12 +168,12 @@ namespace ExtendedMaterials float total; ProcessTerrainHeightWeights(heightBlend, w1, w2, heights, weights, total); - + // Apply height boost for terrain variation if enabled if (useVariation) { total *= 1.3; } - + return total; } # else float GetTerrainHeight(float screenNoise, PS_INPUT input, float2 coords, float mipLevels[6], DisplacementParams params[6], float blendFactor, float4 w1, float2 w2, @@ -248,12 +248,12 @@ namespace ExtendedMaterials float total; ProcessTerrainHeightWeights(heightBlend, w1, w2, heights, weights, total); - + // Apply height boost for terrain variation if enabled if (useVariation) { total *= 1.3; } - + return total; } # endif diff --git a/package/Shaders/Lighting.hlsl b/package/Shaders/Lighting.hlsl index b0c43ab87d..b5c51c749a 100644 --- a/package/Shaders/Lighting.hlsl +++ b/package/Shaders/Lighting.hlsl @@ -1231,7 +1231,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) sharedOffset.offset2 = float2(0, 0); sharedOffset.offset3 = float2(0, 0); sharedOffset.weights = float3(0, 0, 0); - + useTerrainVariation = SharedData::terrainVariationSettings.enableTilingFix; if (useTerrainVariation) { @@ -1426,7 +1426,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) // Layer 3 (LandBlendWeights1.z) if (input.LandBlendWeights1.z > 0.01) { float weight = input.LandBlendWeights1.z; - + // Sample textures with optimized terrain variation float4 landColor3 = SampleTerrainTexture(TexLandColor3Sampler, SampLandColor3Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB3 = landColor3.rgb; @@ -1515,7 +1515,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) // Layer 5 (LandBlendWeights2.x) if (input.LandBlendWeights2.x > 0.01) { float weight = input.LandBlendWeights2.x; - + // Sample textures with optimized terrain variation float4 landColor5 = SampleTerrainTexture(TexLandColor5Sampler, SampLandColor5Sampler, uv, useTerrainVariation, sharedOffset, dx, dy); float3 landColorRGB5 = landColor5.rgb;