Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
b18dde9
squash merge
jiayev Jul 18, 2025
c4c6209
fix flickering
jiayev Jul 28, 2025
b6e34f7
fix complex material
jiayev Jul 31, 2025
1314998
add dynamic cubemaps for nondeferred
jiayev Jul 31, 2025
ee9a677
fix complex material
jiayev Aug 1, 2025
0371899
fix define
jiayev Aug 1, 2025
29ca178
fix vanilla/cm reflectance
jiayev Aug 2, 2025
10d9f00
fix vanilla/cm env, add dynamic cubemap for envmask shader
jiayev Aug 2, 2025
99a8d92
fix eye color
jiayev Aug 2, 2025
e47a146
remove basecolor lerp
jiayev Aug 3, 2025
38e3e0d
vanilla fresnel as feature
jiayev Aug 8, 2025
bc44835
add ini
jiayev Aug 8, 2025
5d62784
add more control
jiayev Aug 8, 2025
de91dc8
fix cubemap conversion
jiayev Aug 8, 2025
1064e24
more on cm
jiayev Aug 8, 2025
228ae08
fix error
jiayev Aug 9, 2025
23523dc
fix error
jiayev Aug 23, 2025
3037ff3
some tweaks
jiayev Sep 18, 2025
1e4180f
add spec lod fade
jiayev Sep 18, 2025
bcd3424
tweak f0 for cm
jiayev Sep 18, 2025
9b6b62f
indirect energy conserve for vanilla fresnel
jiayev Sep 18, 2025
23d9e74
fix grass
jiayev Nov 13, 2025
2a90172
Merge branch 'dev' into vanilla-fresnel-2
jiayev Nov 13, 2025
011b912
Merge branch 'dev' into vanilla-fresnel-2
jiayev Dec 14, 2025
ffa802e
fix vf
jiayev Dec 14, 2025
dee665a
Merge branch 'dev' into vanilla-fresnel-2
jiayev Feb 26, 2026
a1b6a14
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 6, 2026
de4e90c
feat(VanillaFresnel): add eye special handling and specular roughness…
jiayev May 7, 2026
d8dbbcd
Merge branch 'community-shaders:dev' into vanilla-fresnel-2
jiayev May 12, 2026
17bab5c
Reorder feature settings in FeatureBuffer.cpp
jiayev May 12, 2026
224858d
Update F0 calculation to use SkyrimGammaToLinear
jiayev May 12, 2026
e7bfd47
move to core
jiayev May 13, 2026
52a232a
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 14, 2026
795d2ee
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 15, 2026
7ae589d
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 16, 2026
3e606ee
fix(VanillaFresnel): remove deprecated GetFeatureModLink method
jiayev May 16, 2026
247cbc3
affect base color for cubemap conversion
jiayev May 20, 2026
d1cdc0c
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 20, 2026
4281f7a
fix wrong applying to other stuff
jiayev May 25, 2026
c26cc63
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 25, 2026
021b341
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 27, 2026
498fa7d
forbid cubemap conversion when not ggx
jiayev May 27, 2026
c896cb6
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 28, 2026
83a1063
feat: add IsEye flag and update eye material handling in VanillaFresnel
jiayev May 28, 2026
2db170c
Merge branch 'dev' into vanilla-fresnel-2
jiayev May 31, 2026
cdcbb2f
Merge branch 'dev' into vanilla-fresnel-2
jiayev Jun 1, 2026
fdc0e34
chore: update GrassLighting.ini version to 2-1-0
jiayev Jun 1, 2026
87351d0
Merge branch 'dev' into vanilla-fresnel-2
jiayev Jun 1, 2026
cd7cff7
Merge branch 'dev' into vanilla-fresnel-2
jiayev Jun 2, 2026
b453fba
Merge branch 'dev' into vanilla-fresnel-2
davo0411 Jun 4, 2026
506488a
Merge branch 'dev' into vanilla-fresnel-2
jiayev Jun 9, 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
2 changes: 1 addition & 1 deletion features/Grass Lighting/Shaders/Features/GrassLighting.ini
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
[Info]
Version = 2-0-3
Version = 2-1-0
21 changes: 19 additions & 2 deletions features/Grass Lighting/Shaders/GrassLighting/GrassLighting.hlsli
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
#include "Common/BRDF.hlsli"
#include "Common/Color.hlsli"

namespace GrassLighting
{
float3 GetLightSpecularInput(float3 L, float3 V, float3 N, float3 lightColor, float shininess)
float3 GetLightSpecularInput(float3 L, float3 V, float3 N, float3 lightColor, float roughness, float3 F0)
{
float3 H = normalize(V + L);
float HdotN = saturate(dot(H, N));
#if defined(VANILLA_FRESNEL)
if (SharedData::vanillaFresnelSettings.Enable && SharedData::vanillaFresnelSettings.EnableGGXOnGrass) {
float NdotL = saturate(dot(N, L));
float NdotV = saturate(dot(N, V));
float NdotH = saturate(dot(N, H));
float VdotH = saturate(dot(V, H));

float D = BRDF::D_GGX(roughness, NdotH);
float G = BRDF::Vis_SmithJointApprox(roughness, NdotL, NdotV);
Comment thread
jiayev marked this conversation as resolved.
float3 F = BRDF::F_Schlick(F0, VdotH);
float3 specular = D * G * F;
return specular * lightColor * NdotL * Color::PBRLightingCompensation;
}
#endif
float shininess = (1.0 - roughness) * 100.f;
float HdotN = saturate(dot(H, N));
float lightColorMultiplier = exp2(shininess * log2(HdotN));
return lightColor * lightColorMultiplier.xxx;
}
Expand Down
Empty file added features/Vanilla Fresnel/CORE
Empty file.
2 changes: 2 additions & 0 deletions features/Vanilla Fresnel/Shaders/Features/VanillaFresnel.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[Info]
Version = 1-0-0
30 changes: 30 additions & 0 deletions package/Shaders/Common/LightingEval.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,25 @@ float3 VanillaSpecular(DirectContext context, float shininess, float2 uv, float2
return lightColorMultiplier;
}

float3 MicrofacetSpecular(DirectContext context, float3 F0, float roughness)
{
const float3 N = context.worldNormal;
const float3 V = context.viewDir;
const float3 L = context.lightDir;
const float3 H = context.halfVector;

float NdotL = clamp(dot(N, L), EPSILON_DOT_CLAMP, 1);
float NdotV = saturate(abs(dot(N, V)) + EPSILON_DOT_CLAMP);
float NdotH = saturate(dot(N, H));
float VdotH = saturate(dot(V, H));

float D = BRDF::D_GGX(roughness, NdotH);
float G = BRDF::Vis_SmithJointApprox(roughness, NdotV, NdotL);
float3 F = BRDF::F_Schlick(F0, VdotH);

return D * G * F * NdotL;
}

void EvaluateLighting(DirectContext context, MaterialProperties material, float3x3 tbnTr, float2 uv, float2 uv_ddx, float2 uv_ddy, out DirectLightingOutput lightingOutput)
{
lightingOutput = (DirectLightingOutput)0;
Expand Down Expand Up @@ -145,6 +164,17 @@ void EvaluateLighting(DirectContext context, MaterialProperties material, float3
# if defined(BACK_LIGHTING)
lightingOutput.diffuse += softLightColor * saturate(-NdotL) * material.backLightColor * Color::VanillaNormalization();
# endif

# if defined(VANILLA_FRESNEL)
if (SharedData::vanillaFresnelSettings.Enable && SharedData::vanillaFresnelSettings.EnableGGX) {
lightingOutput.specular = diffuseLightColor * MicrofacetSpecular(context, material.F0, material.Roughness) * Color::PBRLightingCompensation * Color::PBRLightingScale;

float2 specularBRDF = BRDF::EnvBRDF(material.Roughness, saturate(dot(context.worldNormal, context.viewDir)));
lightingOutput.specular *= 1 + material.F0 * (1 / (specularBRDF.x + specularBRDF.y) - 1);
Comment thread
jiayev marked this conversation as resolved.
return;
}
# endif

lightingOutput.specular = VanillaSpecular(context, material.Shininess, uv, uv_ddx, uv_ddy) * material.SpecularColor * material.Glossiness * diffuseLightColor * Color::VanillaNormalization();
#endif
}
Expand Down
1 change: 1 addition & 0 deletions package/Shaders/Common/Permutation.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ namespace Permutation
static const uint GrassSphereNormal = (1 << 3);
static const uint IsSun = (1 << 4);
static const uint SuppressExternalEmittance = (1 << 5);
static const uint IsEye = (1 << 6);
}

namespace ExtraFeatureFlags
Expand Down
17 changes: 17 additions & 0 deletions package/Shaders/Common/SharedData.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,22 @@ namespace SharedData
float4 wetParams;
};

struct VanillaFresnelSettings
{
uint Enable;
uint EnableGGX;
uint EnableGGXOnGrass;
uint EnableDynamicCubemapsConversion;
uint EnableEyeSpecialHandling;
float RoughnessMultiplier;
float SpecularRoughnessBlend;
float BaseF0Multiplier;
float MinF0;
float CubemapToF0Multiplier;
float ComplexMaterialF0Multiplier;
float pad;
};

cbuffer FeatureData : register(b6)
{
GrassLightingSettings grassLightingSettings;
Expand All @@ -330,6 +346,7 @@ namespace SharedData
ExponentialHeightFogSettings exponentialHeightFogSettings;
TruePBRSettings truePBRSettings;
SkinData skinData;
VanillaFresnelSettings vanillaFresnelSettings;
};

Texture2D<float4> DepthTexture : register(t17);
Expand Down
97 changes: 89 additions & 8 deletions package/Shaders/Lighting.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -1870,6 +1870,9 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
shininess = lerp(shininess, shininess * complexMaterialColor.y, complexMaterial);
if (complexMaterial) {
complexSpecular = lerp(1.0, baseColor.xyz, complexMaterialColor.z);
# if defined(VANILLA_FRESNEL)
complexSpecular = saturate(complexSpecular * (SharedData::vanillaFresnelSettings.Enable ? SharedData::vanillaFresnelSettings.ComplexMaterialF0Multiplier : 1.0));
# endif
baseColor.xyz = lerp(baseColor.xyz, 0.0, complexMaterialColor.z);
}
# endif // defined (EMAT) && defined(ENVMAP)
Expand Down Expand Up @@ -2120,7 +2123,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# endif // SPECULAR
# endif // SPARKLE

# endif // SNOW
# endif // SNOW

# if defined(WORLD_MAP)
baseColor.xyz = GetWorldMapBaseColor(rawBaseColor.xyz, baseColor.xyz, projWeight);
Expand Down Expand Up @@ -2277,7 +2280,27 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# if defined(BACK_LIGHTING)
material.backLightColor = backLightColor.xyz;
# endif
# endif // TRUE_PBR

# if defined(VANILLA_FRESNEL)
const bool enableVanillaFresnel = SharedData::vanillaFresnelSettings.Enable;
const bool isEyeMaterial = (Permutation::ExtraShaderDescriptor & Permutation::ExtraFlags::IsEye) != 0;
material.F0 = enableVanillaFresnel ? SharedData::vanillaFresnelSettings.MinF0 : 0.0;
# if defined(SPECULAR)
if (enableVanillaFresnel && !isEyeMaterial) {
material.F0 = saturate(glossiness * SpecularColor.xyz / Math::PI);
float roughnessFromSpecular = (1.0 - glossiness) * (1.0 - glossiness);
float roughnessFromShininess = ShininessToRoughness(material.Shininess);
material.Roughness = lerp(roughnessFromShininess, roughnessFromSpecular, SharedData::vanillaFresnelSettings.SpecularRoughnessBlend * (1.0 - glossiness));
}
# endif
if (enableVanillaFresnel && isEyeMaterial && SharedData::vanillaFresnelSettings.EnableEyeSpecialHandling) {
material.F0 = 0.027;
material.Roughness = 0.1;
}
material.F0 = max((enableVanillaFresnel ? SharedData::vanillaFresnelSettings.MinF0 : 0.0), material.F0 * SharedData::vanillaFresnelSettings.BaseF0Multiplier);
const float3 baseF0 = material.F0;
# endif // VANILLA_FRESNEL
# endif // TRUE_PBR

# if defined(SKIN) && defined(CS_SKIN)
const float ExtraRoughness = BRDF::F_Schlick(0.04, saturate(dot(worldNormal.xyz, viewDirection))) * SharedData::skinData.fuzzParams.w;
Expand Down Expand Up @@ -2346,10 +2369,16 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
uint2 envSize;
TexEnvSampler.GetDimensions(envSize.x, envSize.y);

# if defined(EMAT)
# if defined(EMAT) && !defined(VANILLA_FRESNEL)
if (envSize.x == 1 && envSize.y == 1 || complexMaterial) {
# elif defined(VANILLA_FRESNEL)
bool vfStartDynamicCubemapTest = (enableVanillaFresnel && SharedData::vanillaFresnelSettings.EnableDynamicCubemapsConversion);
# if defined(EMAT)
vfStartDynamicCubemapTest = complexMaterial || vfStartDynamicCubemapTest;
# endif
if (vfStartDynamicCubemapTest || (envSize.x == 1 && envSize.y == 1)) {
# else
if (envSize.x == 1 && envSize.y == 1) {
if (envSize.x == 1 && envSize.y == 1) {
# endif

dynamicCubemap = true;
Expand All @@ -2369,15 +2398,26 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
}
# endif

# if defined(VANILLA_FRESNEL)
dynamicCubemap = dynamicCubemap || (SharedData::vanillaFresnelSettings.EnableDynamicCubemapsConversion && enableVanillaFresnel);
const float originRoughness = material.Roughness;
# endif

if (dynamicCubemap) {
float4 envColorBase = TexEnvSampler.SampleLevel(SampEnvSampler, float3(1.0, 0.0, 0.0), 15);
bool usingDynamicCubemap = envColorBase.a < 1.0;

if (envColorBase.a < 1.0) {
if (usingDynamicCubemap) {
material.F0 = Color::SkyrimGammaToLinear(envColorBase.rgb);
material.Roughness = envColorBase.a;
} else {
# if defined(VANILLA_FRESNEL)
material.F0 = saturate(Color::SkyrimGammaToLinear(envColorBase.rgb) * Math::PI * SharedData::vanillaFresnelSettings.CubemapToF0Multiplier);
material.Roughness = material.Roughness;
# else
material.F0 = 1.0;
material.Roughness = 1.0 / 7.0;
# endif
}

# if defined(CREATOR)
Expand All @@ -2392,10 +2432,42 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
material.Roughness = lerp(material.Roughness, complexMaterialRoughness, complexMaterial);
material.F0 = lerp(material.F0, complexSpecular, complexMaterial);
# endif

envMask = saturate(envMask);
# if defined(VANILLA_FRESNEL)
if (enableVanillaFresnel) {
# if defined(SPECULAR)
material.F0 = max(lerp(baseF0, material.F0, envMask), SharedData::vanillaFresnelSettings.MinF0);
# else
material.F0 = max(lerp(0, material.F0, envMask), SharedData::vanillaFresnelSettings.MinF0);
# endif
# if defined(EMAT)
if (!complexMaterial) {
# endif
material.Roughness = lerp(originRoughness, material.Roughness, envMask);
if (!isEyeMaterial && !usingDynamicCubemap) {
material.F0 = saturate(material.F0 + envMask * material.BaseColor);
material.BaseColor = lerp(material.BaseColor, 0, envMask);
}
# if defined(EMAT)
}
# endif
}
# endif
}
}
# endif

# if defined(VANILLA_FRESNEL) && !defined(TRUE_PBR)
if (enableVanillaFresnel) {
if (isEyeMaterial && SharedData::vanillaFresnelSettings.EnableEyeSpecialHandling) {
material.F0 = 0.027;
material.Roughness = 0.1;
}
material.Roughness = clamp(material.Roughness * SharedData::vanillaFresnelSettings.RoughnessMultiplier, 0.04, 1.0);
}
# endif

if (!dynamicCubemap) {
float3 envColorBase = Color::SkyrimGammaToLinear(TexEnvSampler.Sample(SampEnvSampler, envSamplingPoint).xyz);
envColor = envColorBase.xyz * envMask;
Expand Down Expand Up @@ -3029,7 +3101,10 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# endif
# endif
# if defined(ENVMAP) || defined(MULTI_LAYER_PARALLAX) || defined(EYE)
indirectLobeWeights.specular *= envMask;
# if defined(VANILLA_FRESNEL)
if (!enableVanillaFresnel)
# endif
indirectLobeWeights.specular *= envMask;
# endif

# if defined(SPECULAR) && !defined(TRUE_PBR)
Expand Down Expand Up @@ -3093,12 +3168,18 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# if defined(DYNAMIC_CUBEMAPS)
if (!dynamicCubemap)
# endif
specularColor += envColor * Color::IrradianceToLinear(diffuseColor);
# if defined(VANILLA_FRESNEL)
if (!(enableVanillaFresnel && SharedData::vanillaFresnelSettings.EnableDynamicCubemapsConversion))
# endif
specularColor += envColor * Color::IrradianceToLinear(diffuseColor);
indirectLobeWeights.diffuse += envColor;
Comment thread
jiayev marked this conversation as resolved.
# endif

# if defined(EMAT_ENVMAP)
specularColor *= complexSpecular;
# if defined(VANILLA_FRESNEL)
if (!(enableVanillaFresnel && SharedData::vanillaFresnelSettings.EnableGGX))
# endif
specularColor *= complexSpecular;
# endif // defined (EMAT) && defined(ENVMAP)

# if defined(LOD_LAND_BLEND) && defined(TRUE_PBR)
Expand Down
37 changes: 30 additions & 7 deletions package/Shaders/RunGrass.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -279,12 +279,10 @@ struct PS_OUTPUT
float4 NormalGlossiness: SV_Target2;
float4 Albedo: SV_Target3;
float4 Specular: SV_Target4;
# if defined(TRUE_PBR)
float4 Reflectance: SV_Target5;
# endif // TRUE_PBR
float4 Masks: SV_Target6;
float4 Masks2: SV_Target7;
# endif // RENDER_DEPTH
# endif // RENDER_DEPTH
};
#else
struct PS_OUTPUT
Expand Down Expand Up @@ -476,6 +474,14 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
baseColor.xyz *= SharedData::grassLightingSettings.BasicGrassBrightness;
# endif // !TRUE_PBR

# if defined(VANILLA_FRESNEL)
const bool enableVanillaFresnel = SharedData::vanillaFresnelSettings.Enable;
float3 F0 = enableVanillaFresnel ? max(SharedData::vanillaFresnelSettings.MinF0, saturate(specColor.w * SharedData::grassLightingSettings.SpecularStrength * SharedData::vanillaFresnelSettings.BaseF0Multiplier / Math::PI)) : 0.0;
# else
float3 F0 = 0.0;
# endif
float roughness = saturate(1.0 - SharedData::grassLightingSettings.Glossiness * 0.01);

# if defined(TRUE_PBR)
float4 rawRMAOS = TexRMAOSSampler.SampleBias(SampRMAOSSampler, input.TexCoord.xy, SharedData::MipBias) * float4(PBRParams1.x, 1, 1, PBRParams1.y);

Expand Down Expand Up @@ -567,7 +573,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
float3 subsurfaceColor = dirLightColor * dirDetailedShadow * (GetSoftLightMultiplier(dirLightAngle, softLightRolloff)) * Color::VanillaNormalization();

if (complex)
lightsSpecularColor += dirDetailedShadow * GrassLighting::GetLightSpecularInput(SharedData::DirLightDirection.xyz, viewDirection, normal, dirLightColor, SharedData::grassLightingSettings.Glossiness) * Color::VanillaNormalization();
lightsSpecularColor += dirDetailedShadow * GrassLighting::GetLightSpecularInput(SharedData::DirLightDirection.xyz, viewDirection, normal, dirLightColor, roughness, F0) * Color::VanillaNormalization();
# endif

# if defined(LIGHT_LIMIT_FIX)
Expand Down Expand Up @@ -633,7 +639,7 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
lightsDiffuseColor += lightDiffuseColor * Color::VanillaNormalization();

if (complex)
lightsSpecularColor += GrassLighting::GetLightSpecularInput(normalizedLightDirection, viewDirection, normal, lightColor, SharedData::grassLightingSettings.Glossiness) * Color::VanillaNormalization();
lightsSpecularColor += GrassLighting::GetLightSpecularInput(normalizedLightDirection, viewDirection, normal, lightColor, roughness, F0) * Color::VanillaNormalization();
# endif
}
}
Expand Down Expand Up @@ -680,7 +686,10 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# endif

specularColor += lightsSpecularColor;
specularColor *= specColor.w * SharedData::grassLightingSettings.SpecularStrength;
# if defined(VANILLA_FRESNEL)
if (!(SharedData::vanillaFresnelSettings.Enable && SharedData::vanillaFresnelSettings.EnableGGXOnGrass))
# endif
specularColor *= specColor.w * SharedData::grassLightingSettings.SpecularStrength;
# endif

# if defined(LIGHT_LIMIT_FIX) && defined(LLFDEBUG)
Expand All @@ -705,8 +714,22 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
psout.NormalGlossiness = float4(GBuffer::EncodeNormal(normalVS), 1 - pbrSurfaceProperties.Roughness, 1);
psout.Reflectance = float4(indirectSpecularLobeWeight, 1);
# else

float3 reflectance = 0;
# if defined(DYNAMIC_CUBEMAPS) && (defined(VANILLA_FRESNEL) || defined(TRUE_PBR))
# if defined(VANILLA_FRESNEL)
if (SharedData::vanillaFresnelSettings.Enable) {
# endif
float2 specularBDRF = BRDF::EnvBRDF(roughness, saturate(dot(viewDirection, normal)));
reflectance = F0 * specularBDRF.x + specularBDRF.y;
# if defined(VANILLA_FRESNEL)
}
# endif
# endif

psout.Reflectance = float4(reflectance, 1);
psout.Albedo = float4(albedo, 1);
psout.NormalGlossiness = float4(GBuffer::EncodeNormal(normalVS), specColor.w, 1);
psout.NormalGlossiness = float4(GBuffer::EncodeNormal(normalVS), 1.0 - roughness, 1);
# endif

psout.Specular = float4(specularColor, 1);
Expand Down
2 changes: 2 additions & 0 deletions src/Feature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "Features/TerrainVariation.h"
#include "Features/UnifiedWater.h"
#include "Features/Upscaling.h"
#include "Features/VanillaFresnel.h"
#include "Features/VolumetricLighting.h"
#include "Features/VolumetricShadows.h"
#include "Features/WaterEffects.h"
Expand Down Expand Up @@ -231,6 +232,7 @@ const std::vector<Feature*>& Feature::GetFeatureList()
&globals::features::skySync,
&globals::features::terrainBlending,
&globals::features::terrainHelper,
&globals::features::vanillaFresnel,
&globals::features::volumetricLighting,
&globals::features::lodBlending,
&globals::features::inverseSquareLighting,
Expand Down
Loading
Loading