diff options
author | chai <chaifix@163.com> | 2020-10-22 23:30:02 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-22 23:30:02 +0800 |
commit | 917e9e0b320775634dc2e710f7deac74fd0822f0 (patch) | |
tree | 637f3cccc80e7738c8a077fa3ff59218b8b18ee8 /Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader | |
parent | 8268e4e308bd110dfea4ad849a7ff74e66951349 (diff) |
* amplify shader editor
Diffstat (limited to 'Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader')
-rw-r--r-- | Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader new file mode 100644 index 00000000..4c0338c4 --- /dev/null +++ b/Assets/AmplifyShaderEditor/Plugins/EditorResources/Previews/Preview_ScreenPosInputsNode.shader @@ -0,0 +1,62 @@ +Shader "Hidden/ScreenPosInputsNode" +{ + SubShader + { + CGINCLUDE + #include "UnityCG.cginc" + inline float4 PrevComputeNonStereoScreenPos (float4 pos) { + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*_ProjectionParams.x) + o.w; + o.zw = pos.zw; + return o; + } + + inline float4 CalculateScreenPos (float2 uv) + { + float2 xy = 2 * uv - 1; + float z = -sqrt (1 - saturate (dot (xy,xy))); + float3 vertexPos = float3(xy, z); + float4x4 P = float4x4(1,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,1); //UNITY_MATRIX_P + float4x4 V = UNITY_MATRIX_V;//float4x4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); //UNITY_MATRIX_V + float4x4 M = unity_ObjectToWorld;//float4x4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); //unity_ObjectToWorld + float4x4 VPmatrix = mul (P, V); + float4 clipPos = mul (VPmatrix, mul (M, float4(vertexPos, 1.0))); //same as object to clip pos + float4 screenPos = ComputeScreenPos (clipPos); + return screenPos; + } + ENDCG + + //Normalized + Pass + { + CGPROGRAM + #pragma vertex vert_img + #pragma fragment frag + + + float4 frag( v2f_img i ) : SV_Target + { + return CalculateScreenPos(i.uv); + } + ENDCG + } + + //Screen + Pass + { + CGPROGRAM + #pragma vertex vert_img + #pragma fragment frag + + uniform float4 _ASEPreviewSize; + + float4 frag (v2f_img i) : SV_Target + { + float4 screenPos = CalculateScreenPos (i.uv); + screenPos.xy *= _ASEPreviewSize.xy; + return screenPos; + } + ENDCG + } + } +} |