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