Init
This commit is contained in:
@ -0,0 +1,92 @@
|
||||
Shader "Hidden/ScreenPosInputsNode"
|
||||
{
|
||||
SubShader
|
||||
{
|
||||
CGINCLUDE
|
||||
#include "UnityCG.cginc"
|
||||
#include "Preview.cginc"
|
||||
#pragma vertex vert_img
|
||||
#pragma fragment frag
|
||||
|
||||
uniform float4 _ASEPreviewSize;
|
||||
|
||||
inline float4 CalculateScreenPos( float2 uv, bool norm = true, float z = 0.01 )
|
||||
{
|
||||
float2 xy = 2 * uv - 1;
|
||||
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 );
|
||||
screenPos = norm ? screenPos / screenPos.w : screenPos;
|
||||
return screenPos;
|
||||
}
|
||||
ENDCG
|
||||
|
||||
// Normalized
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
float4 frag( v2f_img i ) : SV_Target
|
||||
{
|
||||
return CalculateScreenPos( i.uv );
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
|
||||
// Raw
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
float4 frag( v2f_img i ) : SV_Target
|
||||
{
|
||||
return CalculateScreenPos( i.uv, false, 0.99 );
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
|
||||
// Center
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
float4 frag( v2f_img i ) : SV_Target
|
||||
{
|
||||
float4 screenPos = CalculateScreenPos( i.uv );
|
||||
return float4( screenPos.xy * 2 - 1, 0, 0 );
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
|
||||
// Tiled
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
float4 frag( v2f_img i ) : SV_Target
|
||||
{
|
||||
float4 screenPos = CalculateScreenPos( i.uv );
|
||||
return frac( float4( ( screenPos.x * 2 - 1 ) * _ASEPreviewSize.x / _ASEPreviewSize.y, screenPos.y * 2 - 1, 0, 0 ) );
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
|
||||
// Screen
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
float4 frag( v2f_img i ) : SV_Target
|
||||
{
|
||||
float4 screenPos = CalculateScreenPos( i.uv );
|
||||
screenPos.xy *= _ASEPreviewSize.xy;
|
||||
#if UNITY_UV_STARTS_AT_TOP
|
||||
screenPos.xy = float2( screenPos.x, ( _ProjectionParams.x < 0 ) ? _ASEPreviewSize.y - screenPos.y : screenPos.y );
|
||||
#else
|
||||
screenPos.xy = float2( screenPos.x, ( _ProjectionParams.x > 0 ) ? _ASEPreviewSize.y - screenPos.y : screenPos.y );
|
||||
#endif
|
||||
return float4( screenPos.xy, 0, 0 );
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user