|
|
@ -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); |
|
|
} |
|
|
} |
|
|
|