Browse Source

Allow reactive mask and T&C mask to be provided through the inspector

mac-autoexp
Nico de Poel 3 years ago
parent
commit
17cc461613
  1. 4
      Assets/Scenes/SampleScene.unity
  2. 36
      Assets/Scripts/Fsr2Controller.cs

4
Assets/Scenes/SampleScene.unity

@ -320,7 +320,9 @@ MonoBehaviour:
performSharpenPass: 1
sharpness: 0.8
enableFP16: 0
generateReactiveMask: 1
reactiveMask: {fileID: 0}
transparencyAndCompositionMask: {fileID: 0}
autoGenerateReactiveMask: 1
generateReactiveParameters:
scale: 1
cutoffThreshold: 0.2

36
Assets/Scripts/Fsr2Controller.cs

@ -16,20 +16,21 @@ namespace FidelityFX
[SerializeField] private Fsr2.QualityMode qualityMode = Fsr2.QualityMode.Quality;
[SerializeField] private bool performSharpenPass = true;
[SerializeField, Range(0, 1)] private float sharpness = 0.8f;
[Tooltip("Allow the use of half precision compute operations, potentially improving performance")]
[SerializeField] private bool enableFP16 = false;
[Header("Reactive Mask")]
[SerializeField] private bool generateReactiveMask = false;
[Header("Reactivity, Transparency & Composition")]
[SerializeField] private Texture reactiveMask = null;
[SerializeField] private Texture transparencyAndCompositionMask = null;
[SerializeField] private bool autoGenerateReactiveMask = true;
[SerializeField] private GenerateReactiveParameters generateReactiveParameters = new GenerateReactiveParameters();
[System.Serializable]
public class GenerateReactiveParameters
{
[Range(0, 2)] public float scale = 1.0f;
[Range(0, 10)] public float scale = 1.0f;
[Range(0, 1)] public float cutoffThreshold = 0.2f;
[Range(0, 1)] public float binaryValue = 0.9f;
public Fsr2.GenerateReactiveFlags flags = Fsr2.GenerateReactiveFlags.ApplyTonemap | Fsr2.GenerateReactiveFlags.ApplyThreshold | Fsr2.GenerateReactiveFlags.UseComponentsMax;
@ -85,7 +86,7 @@ namespace FidelityFX
_inputsCommandBuffer.SetGlobalTexture(Fsr2Pipeline.SrvInputMotionVectors, BuiltinRenderTextureType.MotionVectors);
_renderCamera.AddCommandBuffer(CameraEvent.BeforeImageEffects, _inputsCommandBuffer);
if (generateReactiveMask)
if (autoGenerateReactiveMask)
{
_renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer);
}
@ -96,7 +97,7 @@ namespace FidelityFX
_prevDisplaySize = _displaySize;
_prevQualityMode = qualityMode;
_prevGenReactiveMask = generateReactiveMask;
_prevGenReactiveMask = autoGenerateReactiveMask;
}
private void OnDisable()
@ -142,14 +143,14 @@ namespace FidelityFX
OnEnable();
}
if (generateReactiveMask != _prevGenReactiveMask)
if (autoGenerateReactiveMask != _prevGenReactiveMask)
{
if (generateReactiveMask)
if (autoGenerateReactiveMask)
_renderCamera.AddCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer);
else
_renderCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardAlpha, _opaqueInputCommandBuffer);
_prevGenReactiveMask = generateReactiveMask;
_prevGenReactiveMask = autoGenerateReactiveMask;
}
}
@ -166,7 +167,7 @@ namespace FidelityFX
_renderCamera.rect = new Rect(0, 0, _originalRect.width * _renderSize.x / _displaySize.x, _originalRect.height * _renderSize.y / _displaySize.y);
// Set up the parameters to auto-generate a reactive mask
if (generateReactiveMask)
if (autoGenerateReactiveMask)
{
_genReactiveDescription.ColorOpaqueOnly = null;
_genReactiveDescription.ColorPreUpscale = null;
@ -224,7 +225,7 @@ namespace FidelityFX
_dispatchCommandBuffer.Clear();
if (generateReactiveMask)
if (autoGenerateReactiveMask)
{
_dispatchCommandBuffer.GetTemporaryRT(Fsr2Pipeline.UavAutoReactive, _renderSize.x, _renderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true);
_context.GenerateReactiveMask(_genReactiveDescription, _dispatchCommandBuffer);
@ -232,6 +233,15 @@ namespace FidelityFX
_dispatchDescription.Reactive = Fsr2Pipeline.UavAutoReactive;
}
else if (reactiveMask != null)
{
_dispatchDescription.Reactive = reactiveMask;
}
if (transparencyAndCompositionMask != null)
{
_dispatchDescription.TransparencyAndComposition = transparencyAndCompositionMask;
}
_dispatchDescription.InputResourceSize = new Vector2Int(src.width, src.height);
@ -258,7 +268,7 @@ namespace FidelityFX
_dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2Pipeline.UavUpscaledOutput);
}
if (generateReactiveMask)
if (autoGenerateReactiveMask)
{
_dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2Pipeline.UavAutoReactive);
}

Loading…
Cancel
Save