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

Commit 23dfcb6

Browse files
committed
Refactored MSVO - prep work for SRP integration
1 parent d19ef8f commit 23dfcb6

5 files changed

Lines changed: 345 additions & 346 deletions

File tree

PostProcessing/Editor/Effects/AmbientOcclusionEditor.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,25 @@ public override void OnEnable()
2727

2828
public override void OnInspectorGUI()
2929
{
30-
if (RuntimeUtilities.scriptableRenderPipelineActive)
30+
int aoMode = m_Mode.value.intValue;
31+
32+
if (RuntimeUtilities.scriptableRenderPipelineActive && aoMode == (int)AmbientOcclusionMode.ScalableAmbientObscurance)
33+
{
34+
EditorGUILayout.HelpBox("Scalable ambient obscurance doesn't work with scriptable render pipelines.", MessageType.Warning);
35+
return;
36+
}
37+
38+
#if !UNITY_2017_1_OR_NEWER
39+
if (aoMode == (int)AmbientOcclusionMode.MultiScaleVolumetricObscurance)
3140
{
32-
EditorGUILayout.HelpBox("This effect doesn't work with scriptable render pipelines yet.", MessageType.Warning);
41+
EditorGUILayout.HelpBox("Multi-scale volumetric obscurance requires Unity 2017.1 or more.", MessageType.Warning);
3342
return;
3443
}
44+
#endif
3545

3646
PropertyField(m_Mode);
3747
PropertyField(m_Intensity);
3848

39-
int aoMode = m_Mode.value.intValue;
40-
4149
if (aoMode == (int)AmbientOcclusionMode.ScalableAmbientObscurance)
4250
{
4351
PropertyField(m_Radius);

PostProcessing/Runtime/Effects/AmbientOcclusion.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public sealed class AmbientOcclusionQualityParameter : ParameterOverride<Ambient
2828
public sealed class AmbientOcclusion : PostProcessEffectSettings
2929
{
3030
// Shared parameters
31-
[Tooltip("The ambient occlusion method to use. \"Modern\" is higher quality and faster on desktop & console platforms but requires compute shader support.")]
31+
[Tooltip("The ambient occlusion method to use. \"MSVO\" is higher quality and faster on desktop & console platforms but requires compute shader support.")]
3232
public AmbientOcclusionModeParameter mode = new AmbientOcclusionModeParameter { value = AmbientOcclusionMode.MultiScaleVolumetricObscurance };
3333

3434
[Range(0f, 4f), Tooltip("Degree of darkness added by ambient occlusion.")]
@@ -63,11 +63,23 @@ public sealed class AmbientOcclusion : PostProcessEffectSettings
6363
public override bool IsEnabledAndSupported(PostProcessRenderContext context)
6464
{
6565
bool state = enabled.value
66-
&& intensity.value > 0f
67-
&& !RuntimeUtilities.scriptableRenderPipelineActive;
66+
&& intensity.value > 0f;
6867

69-
if (mode.value == AmbientOcclusionMode.MultiScaleVolumetricObscurance)
70-
state &= SystemInfo.supportsComputeShaders && SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RFloat);
68+
if (mode.value == AmbientOcclusionMode.ScalableAmbientObscurance)
69+
{
70+
state &= !RuntimeUtilities.scriptableRenderPipelineActive;
71+
}
72+
else if (mode.value == AmbientOcclusionMode.MultiScaleVolumetricObscurance)
73+
{
74+
#if UNITY_2017_1_OR_NEWER
75+
state &= SystemInfo.supportsComputeShaders
76+
&& SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RFloat)
77+
&& SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RHalf)
78+
&& SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.R8);
79+
#else
80+
state = false;
81+
#endif
82+
}
7183

7284
return state;
7385
}
@@ -106,6 +118,13 @@ public bool IsAmbientOnly(PostProcessRenderContext context)
106118
&& camera.allowHDR;
107119
}
108120

121+
// This is a special case we need for SRP support on MSVO as we won't be able to rely on
122+
// the context object passed around (it won't be defined by the time AO is rendered)
123+
internal void SetResources(PostProcessResources resources)
124+
{
125+
((MultiScaleVO)m_Methods[1]).SetResources(resources);
126+
}
127+
109128
public IAmbientOcclusionMethod Get()
110129
{
111130
return m_Methods[(int)settings.mode.value];

0 commit comments

Comments
 (0)