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. 34
      Assets/Scripts/Fsr2Controller.cs

4
Assets/Scenes/SampleScene.unity

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

34
Assets/Scripts/Fsr2Controller.cs

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

Loading…
Cancel
Save