Last active
July 5, 2022 05:54
-
-
Save RamType0/3cbbf58b9e3808b607cf2419fd9a6334 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //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