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?
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.depth = ToNativePtr(_inputDepth);
@ -119,6 +123,7 @@ namespace UnityEngine.Rendering.PostProcessing
_dispatchParams.FromCamera(context.camera);
_dispatchParams.preExposure = config.preExposure;
_dispatchParams.resetHistory = config.Reset ? 1u : 0u;
_dispatchParams.flags = flags;
Marshal.StructureToPtr(_dispatchParams, _dispatchParamsBuffer, false);
cmd.IssuePluginEventAndData(PSSRPlugin.GetRenderEventAndDataFunc(), 1, _dispatchParamsBuffer);
@ -185,12 +190,11 @@ namespace UnityEngine.Rendering.PostProcessing
public double camPositionX;
public double camPositionY;
public double camPositionZ;
public float pad;
public float camNear;
public float camFar;
public float preExposure;
public uint resetHistory;
public OptionFlags flags;
public void FromCamera(Camera cam)
{
@ -201,12 +205,20 @@ namespace UnityEngine.Rendering.PostProcessing
camPositionX = cam.transform.position.x;
camPositionY = cam.transform.position.y;
camPositionZ = cam.transform.position.z;
pad = 0f;
camNear = cam.nearClipPlane;
camFar = cam.farClipPlane;
}
}
[Flags]
public enum OptionFlags: uint
{
None = 0u,
ViewSpaceDepth = 1u << 14,
ReverseDepth = 1u << 15,
AutoExposure = 1u << 16,
PassThrough = 1u << 31,
}
}
#else
public static bool IsSupported => false;

10
Tools/PSSRPlugin/pssrplugin.cpp

@ -245,17 +245,16 @@ typedef struct pssr_dispatch_params_s
Vector2f jitter;
Vector2f motionVectorScale;
Matrix4f camProjection;
Matrix4f camProjectionNoJitter;
Vector3f camForward;
Vector3f camUp;
Vector3f camRight;
Vector3d camPosition;
float pad;
float camNear;
float camFar;
float preExposure;
uint32_t resetHistory;
MfsrOptionFlags flags;
} 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_prevMotionVectors = nullptr; // MFSR context keeps a copy of the previous motion vectors internally
dispatchParams.m_preExposure = params->preExposure;
dispatchParams.m_projectionNoJitter = params->camProjection;
dispatchParams.m_projectionNoJitter = params->camProjectionNoJitter;
dispatchParams.m_camForward = params->camForward;
dispatchParams.m_camUp = params->camUp;
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_jitter = params->jitter;
dispatchParams.m_motionVectorScale = params->motionVectorScale;
dispatchParams.m_motionVectorGamma = 1.0f;
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);

Loading…
Cancel
Save