You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

38 lines
1.3 KiB

#ifndef UNITY_PATH_TRACING_AOV_INCLUDED
#define UNITY_PATH_TRACING_AOV_INCLUDED
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingPayload.hlsl"
struct AOVData
{
float3 albedo;
float3 normal;
};
bool NeedAOVData(PathPayload payload)
{
return payload.segmentID == 0 && IsOutputFlagOn(payload, OUTPUT_FLAG_AOV);
}
void WriteAOVData(AOVData aovData, float3 positionWS, inout PathPayload payload)
{
// Check if we have anything to write to the payload
if (!NeedAOVData(payload))
return;
// Compute motion vector (from pixel coordinates and world position passed as inputs)
float3 positionOS = TransformWorldToObject(positionWS);
float4 prevPosWS = mul(GetPrevObjectToWorldMatrix(), float4(positionOS, 1.0));
float4 prevClipPos = mul(UNITY_MATRIX_PREV_VP, prevPosWS);
prevClipPos.xy /= prevClipPos.w;
prevClipPos.y = -prevClipPos.y;
float2 viewportSize = _ScreenSize.xy;
float2 prevPixelCoord = (prevClipPos.xy * 0.5 + 0.5) * viewportSize;
// Write final AOV values to the payload
payload.aovMotionVector -= prevPixelCoord;
payload.aovAlbedo = aovData.albedo;
payload.aovNormal = aovData.normal;
}
#endif //UNITY_PATH_TRACING_AOV_INCLUDED