Skip to content
This repository was archived by the owner on Nov 30, 2020. It is now read-only.

Commit c030a05

Browse files
authored
Merge pull request #358 from gokselgoktas/v2
Screen-space Reflections improvements
2 parents e680f54 + 8259630 commit c030a05

4 files changed

Lines changed: 20 additions & 16 deletions

File tree

PostProcessing/Editor/Effects/ScreenSpaceReflectionsEditor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public sealed class ScreenSpaceReflectionsEditor : PostProcessEffectEditor<Scree
1212
SerializedParameterOverride m_Resolution;
1313
SerializedParameterOverride m_MaximumMarchDistance;
1414
SerializedParameterOverride m_DistanceFade;
15-
SerializedParameterOverride m_Attenuation;
15+
SerializedParameterOverride m_Vignette;
1616

1717
public override void OnEnable()
1818
{
@@ -22,7 +22,7 @@ public override void OnEnable()
2222
m_Resolution = FindParameterOverride(x => x.resolution);
2323
m_MaximumMarchDistance = FindParameterOverride(x => x.maximumMarchDistance);
2424
m_DistanceFade = FindParameterOverride(x => x.distanceFade);
25-
m_Attenuation = FindParameterOverride(x => x.attenuation);
25+
m_Vignette = FindParameterOverride(x => x.vignette);
2626
}
2727

2828
public override void OnInspectorGUI()
@@ -52,7 +52,7 @@ public override void OnInspectorGUI()
5252

5353
PropertyField(m_MaximumMarchDistance);
5454
PropertyField(m_DistanceFade);
55-
PropertyField(m_Attenuation);
55+
PropertyField(m_Vignette);
5656
}
5757
}
5858
}

PostProcessing/Runtime/Effects/ScreenSpaceReflections.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ public enum ScreenSpaceReflectionResolution
1616
}
1717

1818
[Serializable]
19-
public sealed class ScreenSpaceReflectionPresetParameter : ParameterOverride<ScreenSpaceReflectionPreset> {}
19+
public sealed class ScreenSpaceReflectionPresetParameter : ParameterOverride<ScreenSpaceReflectionPreset> { }
2020

2121
[Serializable]
22-
public sealed class ScreenSpaceReflectionResolutionParameter : ParameterOverride<ScreenSpaceReflectionResolution> {}
22+
public sealed class ScreenSpaceReflectionResolutionParameter : ParameterOverride<ScreenSpaceReflectionResolution> { }
2323

2424
[Serializable]
2525
[PostProcess(typeof(ScreenSpaceReflectionsRenderer), "Unity/Screen-space reflections")]
@@ -43,8 +43,8 @@ public sealed class ScreenSpaceReflections : PostProcessEffectSettings
4343
[Range(0f, 1f), Tooltip("Fades reflections close to the near planes.")]
4444
public FloatParameter distanceFade = new FloatParameter { value = 0.5f };
4545

46-
[Range(0f, 1f), Tooltip("Fades reflections close to the screen borders.")]
47-
public FloatParameter attenuation = new FloatParameter { value = 0.25f };
46+
[Range(0f, 1f), Tooltip("Fades reflections close to the screen edges.")]
47+
public FloatParameter vignette = new FloatParameter { value = 0.5f };
4848

4949
public override bool IsEnabledAndSupported(PostProcessRenderContext context)
5050
{
@@ -161,7 +161,7 @@ public override void Render(PostProcessRenderContext context)
161161
sheet.properties.SetMatrix(ShaderIDs.InverseViewMatrix, context.camera.worldToCameraMatrix.inverse);
162162
sheet.properties.SetMatrix(ShaderIDs.InverseProjectionMatrix, projectionMatrix.inverse);
163163
sheet.properties.SetMatrix(ShaderIDs.ScreenSpaceProjectionMatrix, screenSpaceProjectionMatrix);
164-
sheet.properties.SetVector(ShaderIDs.Params, new Vector4(settings.attenuation.value, settings.distanceFade.value, settings.maximumMarchDistance.value, lodCount));
164+
sheet.properties.SetVector(ShaderIDs.Params, new Vector4((float)settings.vignette.value, settings.distanceFade.value, settings.maximumMarchDistance.value, lodCount));
165165
sheet.properties.SetVector(ShaderIDs.Params2, new Vector4((float)context.width / (float)context.height, (float)size / (float)noiseTex.width, settings.thickness.value, settings.maximumIterationCount.value));
166166

167167
cmd.GetTemporaryRT(ShaderIDs.Test, size, size, 0, FilterMode.Point, context.sourceFormat);

PostProcessing/Runtime/Utils/ShaderIDs.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ static class ShaderIDs
1111
internal static readonly int Sharpness = Shader.PropertyToID("_Sharpness");
1212
internal static readonly int FinalBlendParameters = Shader.PropertyToID("_FinalBlendParameters");
1313
internal static readonly int HistoryTex = Shader.PropertyToID("_HistoryTex");
14-
14+
1515
internal static readonly int SMAA_Flip = Shader.PropertyToID("_SMAA_Flip");
1616
internal static readonly int SMAA_Flop = Shader.PropertyToID("_SMAA_Flop");
1717

@@ -38,7 +38,7 @@ static class ShaderIDs
3838
internal static readonly int Combined1 = Shader.PropertyToID("Combined1");
3939
internal static readonly int Combined2 = Shader.PropertyToID("Combined2");
4040
internal static readonly int Combined3 = Shader.PropertyToID("Combined3");
41-
41+
4242
internal static readonly int SSRResolveTemp = Shader.PropertyToID("_SSRResolveTemp");
4343
internal static readonly int Noise = Shader.PropertyToID("_Noise");
4444
internal static readonly int Test = Shader.PropertyToID("_Test");
@@ -49,7 +49,7 @@ static class ShaderIDs
4949
internal static readonly int InverseProjectionMatrix = Shader.PropertyToID("_InverseProjectionMatrix");
5050
internal static readonly int ScreenSpaceProjectionMatrix = Shader.PropertyToID("_ScreenSpaceProjectionMatrix");
5151
internal static readonly int Params2 = Shader.PropertyToID("_Params2");
52-
52+
5353
internal static readonly int FogColor = Shader.PropertyToID("_FogColor");
5454
internal static readonly int FogParams = Shader.PropertyToID("_FogParams");
5555

PostProcessing/Shaders/Builtins/ScreenSpaceReflections.hlsl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
#define SSR_MINIMUM_ATTENUATION 0.275
1010
#define SSR_ATTENUATION_SCALE (1.0 - SSR_MINIMUM_ATTENUATION)
1111

12-
#define SSR_VIGNETTE_INTENSITY 0.7
13-
#define SSR_VIGNETTE_SMOOTHNESS 0.25
12+
#define SSR_VIGNETTE_INTENSITY _VignetteIntensity
13+
#define SSR_VIGNETTE_SMOOTHNESS 5.
1414

1515
#define SSR_COLOR_NEIGHBORHOOD_SAMPLE_SPREAD 1.0
1616

@@ -73,9 +73,10 @@ float4x4 _InverseViewMatrix;
7373
float4x4 _InverseProjectionMatrix;
7474
float4x4 _ScreenSpaceProjectionMatrix;
7575

76-
float4 _Params; // x: attenuation, y: distance fade, z: maximum march distance, w: blur pyramid lod count
76+
float4 _Params; // x: vignette intensity, y: distance fade, z: maximum march distance, w: blur pyramid lod count
7777
float4 _Params2; // x: aspect ratio, y: noise tiling, z: thickness, w: maximum iteration count
78-
#define _Attenuation _Params.x
78+
#define _Attenuation .25
79+
#define _VignetteIntensity _Params.x
7980
#define _DistanceFade _Params.y
8081
#define _MaximumMarchDistance _Params.z
8182
#define _BlurPyramidLODCount _Params.w
@@ -100,6 +101,7 @@ float Attenuate(float2 uv)
100101
float Vignette(float2 uv)
101102
{
102103
float2 k = abs(uv - 0.5) * SSR_VIGNETTE_INTENSITY;
104+
k.x *= _MainTex_TexelSize.y * _MainTex_TexelSize.z;
103105
return pow(saturate(1.0 - dot(k, k)), SSR_VIGNETTE_SMOOTHNESS);
104106
}
105107

@@ -381,7 +383,9 @@ float4 FragComposite(VaryingsDefault i) : SV_Target
381383
float4 color = _MainTex.Sample(sampler_MainTex, i.texcoordStereo);
382384
color.rgb = max(0.0, color.rgb - reflectionProbes.rgb);
383385

384-
float fade = 1.0 - resolve.a * _DistanceFade;
386+
resolve.a *= 2. * resolve.a; // 2 and 1.5 are quite important for the correct ratio of 3:2 distribution
387+
float fade = 1.0 - saturate(1.5 * resolve.a * smoothstep(0.5, 1.0, 1.5 * resolve.a) * _DistanceFade);
388+
385389
resolve.rgb = lerp(reflectionProbes.rgb, resolve.rgb, confidence * fade);
386390
color.rgb += resolve.rgb * gbuffer0.a;
387391

0 commit comments

Comments
 (0)