Skip to content

Instantly share code, notes, and snippets.

@RamType0
Last active July 5, 2022 05:54
Show Gist options
  • Select an option

  • Save RamType0/3cbbf58b9e3808b607cf2419fd9a6334 to your computer and use it in GitHub Desktop.

Select an option

Save RamType0/3cbbf58b9e3808b607cf2419fd9a6334 to your computer and use it in GitHub Desktop.
//clipPos.w = 1, viewPos.z = -1
float2 ClipXYToViewXY(float2 clipXY)
{
//clipXY.xy = mad(1, UNITY_MATRIX_P._m02_m12, clipXY.xy);
clipXY.xy += UNITY_MATRIX_P._m02_m12;
return float2(clipXY.x / UNITY_MATRIX_P._m00, clipXY.y / UNITY_MATRIX_P._m11);
}
float2 InverseTransformStereoScreenSpaceTex(float2 uv, float w)
{
#if UNITY_SINGLE_PASS_STEREO
float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
uv.xy = mad(scaleOffset.zw, -w, uv.xy);
return uv.xy / scaleOffset.xy;
#else
return uv;
#endif
}
float2 InverseTransformStereoScreenSpaceTex(float2 uv)
{
#if UNITY_SINGLE_PASS_STEREO
return InverseTransformStereoScreenSpaceTex(saturate(uv), 1);
#else
return uv;
#endif
}
float PreComputeLinearEyeDepthFactor(in float3 viewPos){
return mad(
//mad(viewPos.x , UNITY_MATRIX_P._m20 , viewPos.y * UNITY_MATRIX_P._m21),
viewPos.x * UNITY_MATRIX_P._m20 + viewPos.y * UNITY_MATRIX_P._m21 ,
//dot(viewPos.xy,UNITY_MATRIX_P._m20_m21),
rcp(viewPos.z) ,
UNITY_MATRIX_P._m22
);
}
//W = 1
float2 GrabUVToClipXY(float2 grabUV)
{
float2 o;
o.xy = InverseTransformStereoScreenSpaceTex(grabUV);
#if UNITY_UV_STARTS_AT_TOP
o.x = mad(o.x, 2, -1);
o.y = mad(o.y, -2, 1);
#else
o.xy = mad(o.xy, 2, -1);
#endif
return o;
}
///W = 1
float2 ScreenUVToClipXY(float2 screenUV)
{
float2 o;
o.xy = InverseTransformStereoScreenSpaceTex(screenUV);
o.xy = mad(o.xy, 2, -1);
o.y *= _ProjectionParams.x;
return o;
}
float LinearEyeDepth(in float zBuffer,in float linearEyeDepthFactor){
return UNITY_MATRIX_P._m23 /(linearEyeDepthFactor + zBuffer);
}
float LinearEyeDepth(in float zBuffer,in float3 viewPos)
{
return LinearEyeDepth(zBuffer,PreComputeLinearEyeDepthFactor(viewPos));
}
//viewXY = viewPos.xy/ -viewPos.z
float PreComputeLinearEyeDepthFactorViewXY(float2 viewXY){
//return dot(viewXY,-UNITY_MATRIX_P._m20_m21) + UNITY_MATRIX_P._m22;
return mad(viewXY.x , -UNITY_MATRIX_P._m20, mad(viewXY.y , -UNITY_MATRIX_P._m21 , UNITY_MATRIX_P._m22));
//return (viewXY.x * -UNITY_MATRIX_P._m20+viewXY.y * -UNITY_MATRIX_P._m21) + UNITY_MATRIX_P._m22;
}
//viewXY = viewPos.xy/ -viewPos.z
float LinearEyeDepthViewXY(float zBuffer, float2 viewXY)
{
return LinearEyeDepth(zBuffer,PreComputeLinearEyeDepthFactorViewXY(viewXY));
}
float LinearEyeDepthScreenUV(float zBuffer, float2 screenUV)
{
float2 viewXY = ClipXYToViewXY(ScreenUVToClipXY(screenUV));
return LinearEyeDepthViewXY(zBuffer, viewXY);
}
float LinearEyeDepthGrabUV(float zBuffer, float2 grabUV)
{
float2 viewXY = ClipXYToViewXY(GrabUVToClipXY(grabUV));
return LinearEyeDepthViewXY(zBuffer, viewXY);
//return LinearEyeDepth(zBuffer,ClipXYWToViewPos( GrabUVToClipXYW(grabUV,1)));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment