33 lines
866 B
HLSL
33 lines
866 B
HLSL
#ifndef GETCAMERAMOTIONVECTORS_INCLUDE
|
|
#define GETCAMERAMOTIONVECTORS_INCLUDE
|
|
|
|
|
|
float4x4 _ViewProjM;
|
|
float4x4 _PrevViewProjM;
|
|
|
|
|
|
void GetCameraMotionVectors_float(float4 UV, float3 positionOS, out float2 velocity)
|
|
{
|
|
velocity = 0;
|
|
#ifndef SHADERGRAPH_PREVIEW
|
|
float4 positionCS = TransformObjectToHClip(positionOS);
|
|
float4 projPos = positionCS * 0.5;
|
|
projPos.xy = projPos.xy + projPos.w;
|
|
|
|
half depth = 1.0;
|
|
float3 viewPos = ComputeViewSpacePosition(projPos.xy, depth, unity_CameraInvProjection);
|
|
float4 worldPos = float4(mul(unity_CameraToWorld, float4(viewPos, 1.0)).xyz, 1.0);
|
|
|
|
float4 prevClipPos = mul(_PrevViewProjM, worldPos);
|
|
float4 curClipPos = mul(_ViewProjM, worldPos);
|
|
|
|
float2 prevPosCS = prevClipPos.xy / prevClipPos.w;
|
|
float2 curPosCS = curClipPos.xy / curClipPos.w;
|
|
|
|
velocity = prevPosCS - curPosCS;
|
|
|
|
|
|
velocity.xy *= 0.5;
|
|
#endif
|
|
}
|
|
#endif |