Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c598623
feat: better rain fx
doodlum Nov 13, 2024
73588be
fix: rain occlusion
doodlum Nov 13, 2024
7c4782d
style: 🎨 apply clang-format changes
doodlum Nov 13, 2024
09e195c
fix: use rain density instead of alpha
doodlum Nov 13, 2024
f9cd4f5
chore: remove chaotic ripples
doodlum Nov 13, 2024
3bc00d4
style: 🎨 apply clang-format changes
doodlum Nov 13, 2024
5264340
feat: rain fade in and out
doodlum Nov 14, 2024
11940bd
Merge branch 'rain-fx-fixes' of https://github.com/doodlum/skyrim-com…
doodlum Nov 14, 2024
524fc78
feat: redone wetness and puddle cpu code
doodlum Nov 14, 2024
9980cb8
chore: tweak default wetness settings
doodlum Nov 14, 2024
cc2fe9e
style: 🎨 apply clang-format changes
doodlum Nov 14, 2024
0630609
Merge branch 'rain-fx-fixes' of https://github.com/doodlum/skyrim-com…
doodlum Nov 14, 2024
7a67a09
chore: remove unused constants
doodlum Nov 14, 2024
0aa6aae
chore: bias towards puddles
doodlum Nov 14, 2024
dae1cc2
chore: chore further cleanup
doodlum Nov 14, 2024
9b8f813
chore: further bias puddles
doodlum Nov 14, 2024
96f6a63
fix: correct conversion
doodlum Nov 14, 2024
bf5d585
chore: more fixes
doodlum Nov 14, 2024
85bdad5
fix: bad bracket
doodlum Nov 14, 2024
3241be8
chore: clamp raining amount
doodlum Nov 14, 2024
05f5eec
fix: wetness crash
doodlum Nov 14, 2024
78ef50e
fix: padding
doodlum Nov 14, 2024
f94b8a7
fix: bad settings
doodlum Nov 14, 2024
f5832dd
Merge pull request #748 from doodlum/dev
doodlum Nov 16, 2024
f07277a
chore: tweaked puddles buildup
doodlum Nov 16, 2024
0b14a63
fix: puddle wetness default
doodlum Nov 16, 2024
d49f9ca
Merge pull request #754 from doodlum/dev
doodlum Nov 18, 2024
e877776
fix: vr raindrops
doodlum Nov 18, 2024
a1f40d3
style: 🎨 apply clang-format changes
doodlum Nov 18, 2024
f423f57
chore: fade out rain fx quicker
doodlum Nov 18, 2024
574e906
Merge branch 'rain-fx-fixes' into rain-fix-update
doodlum Nov 18, 2024
e8c0e49
Merge pull request #759 from doodlum/rain-fix-update
doodlum Nov 18, 2024
8a0b57b
chore: update precipitationData access
doodlum Nov 18, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace WetnessEffects
{
Texture2D<float4> TexPrecipOcclusion : register(t31);

// https://www.unrealengine.com/en-US/blog/physically-based-shading-on-mobile
float2 EnvBRDFApproxWater(float3 F0, float Roughness, float NoV)
{
Expand Down Expand Up @@ -58,15 +60,15 @@ namespace WetnessEffects
const float rippleBreadthRcp = rcp(wetnessEffectsSettings.RippleBreadth);

float2 gridUV = worldPos.xy * wetnessEffectsSettings.RaindropGridSizeRcp;
gridUV += normal.xy * 0.5;
gridUV += normal.xy;
int2 grid = floor(gridUV);
gridUV -= grid;

float3 rippleNormal = float3(0, 0, 1);
float wetness = 0;

if (wetnessEffectsSettings.EnableSplashes || wetnessEffectsSettings.EnableRipples)
for (int i = -1; i <= 1; i++)
if (wetnessEffectsSettings.EnableSplashes || wetnessEffectsSettings.EnableRipples) {
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int2 gridCurr = grid + int2(i, j);
float tOffset = float(Random::iqint3(gridCurr)) * uintToFloat;
Expand Down Expand Up @@ -122,12 +124,7 @@ namespace WetnessEffects
}
}
}

if (wetnessEffectsSettings.EnableChaoticRipples) {
float3 turbulenceNormal = Random::perlinNoise(float3(worldPos.xy * wetnessEffectsSettings.ChaoticRippleScaleRcp, t * wetnessEffectsSettings.ChaoticRippleSpeed));
turbulenceNormal.z = turbulenceNormal.z * .5 + 5;
turbulenceNormal = normalize(turbulenceNormal);
rippleNormal = normalize(rippleNormal + float3(turbulenceNormal.xy * wetnessEffectsSettings.ChaoticRippleStrength, 0));
}
}

wetness *= wetnessEffectsSettings.SplashesStrength;
Expand Down
14 changes: 5 additions & 9 deletions package/Shaders/Common/SharedData.hlsli
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ struct LightLimitFixSettings

struct WetnessEffectsSettings
{
row_major float4x4 OcclusionViewProj;

float Time;
float Raining;
float Wetness;
Expand All @@ -92,26 +94,20 @@ struct WetnessEffectsSettings

bool EnableSplashes;
bool EnableRipples;
bool EnableChaoticRipples;
float RaindropFxRange;

float RaindropGridSizeRcp;
float RaindropIntervalRcp;

float RaindropChance;
float SplashesLifetime;

float SplashesStrength;
float SplashesMinRadius;

float SplashesMaxRadius;
float RippleStrength;

float RippleRadius;
float RippleBreadth;
float RippleLifetimeRcp;
float ChaoticRippleStrength;

float ChaoticRippleScaleRcp;
float ChaoticRippleSpeed;
float RippleLifetimeRcp;
};

struct SkylightingSettings
Expand Down
19 changes: 13 additions & 6 deletions package/Shaders/Lighting.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -1783,16 +1783,23 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace
# endif

float4 raindropInfo = float4(0, 0, 1, 0);
if (worldSpaceNormal.z > 0 && wetnessEffectsSettings.Raining > 0.0f && wetnessEffectsSettings.EnableRaindropFx &&
(dot(input.WorldPosition, input.WorldPosition) < wetnessEffectsSettings.RaindropFxRange * wetnessEffectsSettings.RaindropFxRange)) {
if (wetnessOcclusion > 0.0)
if (worldSpaceNormal.z > 0 && wetnessEffectsSettings.Raining > 0.0f && wetnessEffectsSettings.EnableRaindropFx) {
float4 precipOcclusionTexCoord = mul(wetnessEffectsSettings.OcclusionViewProj, float4(input.WorldPosition.xyz, 1));
precipOcclusionTexCoord.y = -precipOcclusionTexCoord.y;
float2 precipOcclusionUV = precipOcclusionTexCoord.xy * 0.5 + 0.5;

if (saturate(precipOcclusionUV.x) == precipOcclusionUV.x && saturate(precipOcclusionUV.y) == precipOcclusionUV.y) {
float precipOcclusionZ = WetnessEffects::TexPrecipOcclusion.SampleLevel(SampColorSampler, precipOcclusionUV, 0).x;

if (precipOcclusionTexCoord.z < precipOcclusionZ + 0.1)
# if defined(SKINNED)
raindropInfo = WetnessEffects::GetRainDrops(input.ModelPosition.xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
raindropInfo = WetnessEffects::GetRainDrops(input.ModelPosition.xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
# elif defined(DEFERRED)
raindropInfo = WetnessEffects::GetRainDrops(input.WorldPosition.xyz + CameraPosAdjust[eyeIndex].xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
raindropInfo = WetnessEffects::GetRainDrops(input.WorldPosition.xyz + CameraPosAdjust[eyeIndex].xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
# else
raindropInfo = WetnessEffects::GetRainDrops(!FrameParams.y ? input.ModelPosition.xyz : input.WorldPosition.xyz + CameraPosAdjust[eyeIndex].xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
raindropInfo = WetnessEffects::GetRainDrops(!FrameParams.y ? input.ModelPosition.xyz : input.WorldPosition.xyz + CameraPosAdjust[eyeIndex].xyz, wetnessEffectsSettings.Time, worldSpaceNormal);
# endif
}
}

float rainWetness = wetnessEffectsSettings.Wetness * minWetnessAngle * wetnessEffectsSettings.MaxRainWetness;
Expand Down
6 changes: 3 additions & 3 deletions package/Shaders/Particle.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -248,11 +248,11 @@ PS_OUTPUT main(PS_INPUT input)
# endif // !VR

# if defined(ENVCUBE)
float2 precipitationOcclusionUv = (input.PrecipitationOcclusionTexCoord.xy * 0.5 + 0.5) * TextureSize.x;
float2 precipitationOcclusionUV = (input.PrecipitationOcclusionTexCoord.xy * 0.5 + 0.5) * TextureSize.x;
# ifdef VR
precipitationOcclusionUv *= DynamicResolutionParams1.x; // only difference in VR
precipitationOcclusionUV *= DynamicResolutionParams1.x; // only difference in VR
# endif
float precipitationOcclusion = -input.PrecipitationOcclusionTexCoord.z + TexPrecipitationOcclusionTexture.SampleLevel(SampSourceTexture, precipitationOcclusionUv, 0).x;
float precipitationOcclusion = -input.PrecipitationOcclusionTexCoord.z + TexPrecipitationOcclusionTexture.Load(float3(precipitationOcclusionUV, 0)).x;
float2 underwaterMaskUv = TextureSize.yz * input.Position.xy;
float underwaterMask = TexUnderwaterMask.Sample(SampUnderwaterMask, underwaterMaskUv).x;
if (precipitationOcclusion - underwaterMask < 0) {
Expand Down
Loading