Browse Source

Allow option flags to be set from Unity and set motion vector gamma to 1 by default

pssr
Nico de Poel 1 year ago
parent
commit
dc12bc4a45
  1. BIN
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx
  2. 20
      Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs
  3. 10
      Tools/PSSRPlugin/pssrplugin.cpp

BIN
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PS5/PSSRPlugin.prx

20
Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/Upscaling/PSSRUpscaler.cs

@ -98,6 +98,10 @@ namespace UnityEngine.Rendering.PostProcessing
// TODO: if PSSR needs a copy of the previous depth and motion vectors anyway, why not just double-buffer those resources ourselves and make good use of these otherwise dumb copies? // TODO: if PSSR needs a copy of the previous depth and motion vectors anyway, why not just double-buffer those resources ourselves and make good use of these otherwise dumb copies?
PrepareInputs(cmd, context, config, _inputColor, _inputDepth, _inputMotionVectors); PrepareInputs(cmd, context, config, _inputColor, _inputDepth, _inputMotionVectors);
var flags = PSSRPlugin.OptionFlags.None;
if (SystemInfo.usesReversedZBuffer) flags |= PSSRPlugin.OptionFlags.ReverseDepth;
if (config.exposureSource == Upscaling.ExposureSource.Auto) flags |= PSSRPlugin.OptionFlags.AutoExposure;
_dispatchParams.color = ToNativePtr(_inputColor); _dispatchParams.color = ToNativePtr(_inputColor);
_dispatchParams.depth = ToNativePtr(_inputDepth); _dispatchParams.depth = ToNativePtr(_inputDepth);
@ -119,6 +123,7 @@ namespace UnityEngine.Rendering.PostProcessing
_dispatchParams.FromCamera(context.camera); _dispatchParams.FromCamera(context.camera);
_dispatchParams.preExposure = config.preExposure; _dispatchParams.preExposure = config.preExposure;
_dispatchParams.resetHistory = config.Reset ? 1u : 0u; _dispatchParams.resetHistory = config.Reset ? 1u : 0u;
_dispatchParams.flags = flags;
Marshal.StructureToPtr(_dispatchParams, _dispatchParamsBuffer, false); Marshal.StructureToPtr(_dispatchParams, _dispatchParamsBuffer, false);
cmd.IssuePluginEventAndData(PSSRPlugin.GetRenderEventAndDataFunc(), 1, _dispatchParamsBuffer); cmd.IssuePluginEventAndData(PSSRPlugin.GetRenderEventAndDataFunc(), 1, _dispatchParamsBuffer);
@ -185,12 +190,11 @@ namespace UnityEngine.Rendering.PostProcessing
public double camPositionX; public double camPositionX;
public double camPositionY; public double camPositionY;
public double camPositionZ; public double camPositionZ;
public float pad;
public float camNear; public float camNear;
public float camFar; public float camFar;
public float preExposure; public float preExposure;
public uint resetHistory; public uint resetHistory;
public OptionFlags flags;
public void FromCamera(Camera cam) public void FromCamera(Camera cam)
{ {
@ -201,12 +205,20 @@ namespace UnityEngine.Rendering.PostProcessing
camPositionX = cam.transform.position.x; camPositionX = cam.transform.position.x;
camPositionY = cam.transform.position.y; camPositionY = cam.transform.position.y;
camPositionZ = cam.transform.position.z; camPositionZ = cam.transform.position.z;
pad = 0f;
camNear = cam.nearClipPlane; camNear = cam.nearClipPlane;
camFar = cam.farClipPlane; camFar = cam.farClipPlane;
} }
} }
[Flags]
public enum OptionFlags: uint
{
None = 0u,
ViewSpaceDepth = 1u << 14,
ReverseDepth = 1u << 15,
AutoExposure = 1u << 16,
PassThrough = 1u << 31,
}
} }
#else #else
public static bool IsSupported => false; public static bool IsSupported => false;

10
Tools/PSSRPlugin/pssrplugin.cpp

@ -245,17 +245,16 @@ typedef struct pssr_dispatch_params_s
Vector2f jitter; Vector2f jitter;
Vector2f motionVectorScale; Vector2f motionVectorScale;
Matrix4f camProjection;
Matrix4f camProjectionNoJitter;
Vector3f camForward; Vector3f camForward;
Vector3f camUp; Vector3f camUp;
Vector3f camRight; Vector3f camRight;
Vector3d camPosition; Vector3d camPosition;
float pad;
float camNear; float camNear;
float camFar; float camFar;
float preExposure; float preExposure;
uint32_t resetHistory; uint32_t resetHistory;
MfsrOptionFlags flags;
} pssr_dispatch_params_t; } pssr_dispatch_params_t;
@ -410,7 +409,7 @@ static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data)
dispatchParams.m_reactiveMask = params->reactiveMask; dispatchParams.m_reactiveMask = params->reactiveMask;
dispatchParams.m_prevMotionVectors = nullptr; // MFSR context keeps a copy of the previous motion vectors internally dispatchParams.m_prevMotionVectors = nullptr; // MFSR context keeps a copy of the previous motion vectors internally
dispatchParams.m_preExposure = params->preExposure; dispatchParams.m_preExposure = params->preExposure;
dispatchParams.m_projectionNoJitter = params->camProjection;
dispatchParams.m_projectionNoJitter = params->camProjectionNoJitter;
dispatchParams.m_camForward = params->camForward; dispatchParams.m_camForward = params->camForward;
dispatchParams.m_camUp = params->camUp; dispatchParams.m_camUp = params->camUp;
dispatchParams.m_camRight = params->camRight; dispatchParams.m_camRight = params->camRight;
@ -421,8 +420,9 @@ static void UNITY_INTERFACE_API OnRenderEventAndData(int eventID, void* data)
dispatchParams.m_renderHeight = params->renderHeight; dispatchParams.m_renderHeight = params->renderHeight;
dispatchParams.m_jitter = params->jitter; dispatchParams.m_jitter = params->jitter;
dispatchParams.m_motionVectorScale = params->motionVectorScale; dispatchParams.m_motionVectorScale = params->motionVectorScale;
dispatchParams.m_motionVectorGamma = 1.0f;
dispatchParams.m_reset = params->resetHistory != 0; dispatchParams.m_reset = params->resetHistory != 0;
dispatchParams.m_flags = MfsrOptionFlags::kReverseDepth; // TODO: make flags available as plugin input
dispatchParams.m_flags = params->flags;
dispatchMfsr(s_mfsrContext, cmd, &dispatchParams); dispatchMfsr(s_mfsrContext, cmd, &dispatchParams);

Loading…
Cancel
Save