Browse Source

Allow reactive mask generation parameters to be set from the inspector.

Also set a default quality mode and reintroduced the Native quality mode, to make FSR2 into an expensive TAA + sharpen.
mac-autoexp
Nico de Poel 3 years ago
parent
commit
b7c49ea0e3
  1. 2
      Assets/Scripts/Fsr2.cs
  2. 31
      Assets/Scripts/Fsr2Controller.cs

2
Assets/Scripts/Fsr2.cs

@ -50,6 +50,7 @@ namespace FidelityFX
return 2.0f;
case QualityMode.UltraPerformance:
return 3.0f;
case QualityMode.Native:
default:
return 1.0f;
}
@ -105,6 +106,7 @@ namespace FidelityFX
public enum QualityMode
{
Native = 0,
Quality = 1,
Balanced = 2,
Performance = 3,

31
Assets/Scripts/Fsr2Controller.cs

@ -13,15 +13,18 @@ namespace FidelityFX
[RequireComponent(typeof(Camera))]
public class Fsr2Controller : MonoBehaviour
{
[SerializeField] private Fsr2.QualityMode qualityMode;
[SerializeField] private Fsr2.QualityMode qualityMode = Fsr2.QualityMode.Quality;
[SerializeField] private bool performSharpenPass = true;
[SerializeField, Range(0, 1)] private float sharpness = 0.8f;
[SerializeField] private bool generateReactiveMask = false;
[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;
[SerializeField] private GenerateReactiveParameters generateReactiveParameters = new GenerateReactiveParameters();
private Fsr2Context _context;
private Vector2Int _renderSize;
@ -153,6 +156,18 @@ namespace FidelityFX
_renderCamera.aspect = (Screen.width * _originalRect.width) / (Screen.height * _originalRect.height);
_renderCamera.rect = new Rect(0, 0, _originalRect.width * _renderSize.x / _displaySize.x, _originalRect.height * _renderSize.y / _displaySize.y);
if (generateReactiveMask)
{
_genReactiveDescription.ColorOpaqueOnly = null;
_genReactiveDescription.ColorPreUpscale = null;
_genReactiveDescription.OutReactive = null;
_genReactiveDescription.RenderSize = _renderSize;
_genReactiveDescription.Scale = generateReactiveParameters.scale;
_genReactiveDescription.CutoffThreshold = generateReactiveParameters.cutoffThreshold;
_genReactiveDescription.BinaryValue = generateReactiveParameters.binaryValue;
_genReactiveDescription.Flags = generateReactiveParameters.flags;
}
_dispatchDescription.Color = null;
_dispatchDescription.Depth = null;
_dispatchDescription.MotionVectors = null;
@ -198,7 +213,6 @@ namespace FidelityFX
if (generateReactiveMask)
{
_genReactiveDescription.RenderSize = _renderSize;
_dispatchCommandBuffer.GetTemporaryRT(Fsr2Pipeline.UavAutoReactive, _renderSize.x, _renderSize.y, 0, default, GraphicsFormat.R8_UNorm, 1, true);
_context.GenerateReactiveMask(_genReactiveDescription, _dispatchCommandBuffer);
_dispatchCommandBuffer.ReleaseTemporaryRT(Fsr2Pipeline.SrvOpaqueOnly);
@ -241,5 +255,14 @@ namespace FidelityFX
// Shut up the Unity warning about not writing to the destination texture
Graphics.SetRenderTarget(dest);
}
[System.Serializable]
public class GenerateReactiveParameters
{
public float scale = 1.0f;
public float cutoffThreshold = 0.2f;
public float binaryValue = 0.9f;
public Fsr2.GenerateReactiveFlags flags = Fsr2.GenerateReactiveFlags.ApplyTonemap | Fsr2.GenerateReactiveFlags.ApplyThreshold | Fsr2.GenerateReactiveFlags.UseComponentsMax;
}
}
}
Loading…
Cancel
Save