185 lines
5.8 KiB
Plaintext
185 lines
5.8 KiB
Plaintext
|
|
Shader "2D/RenderAs2D-Flattening"
|
||
|
|
{
|
||
|
|
Properties
|
||
|
|
{
|
||
|
|
// Legacy properties. They're here so that materials using this shader can gracefully fallback to the legacy sprite shader.
|
||
|
|
[HideInInspector] _Color("Tint", Color) = (1,1,1,1)
|
||
|
|
[HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
|
||
|
|
[HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
|
||
|
|
[HideInInspector] _AlphaTex("External Alpha", 2D) = "white" {}
|
||
|
|
[HideInInspector] _EnableExternalAlpha("Enable External Alpha", Float) = 0
|
||
|
|
}
|
||
|
|
|
||
|
|
SubShader
|
||
|
|
{
|
||
|
|
Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }
|
||
|
|
|
||
|
|
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
|
||
|
|
Cull Off
|
||
|
|
ZTest Always
|
||
|
|
ZWrite On
|
||
|
|
ColorMask 0
|
||
|
|
|
||
|
|
Stencil
|
||
|
|
{
|
||
|
|
Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask
|
||
|
|
ReadMask 128
|
||
|
|
WriteMask 128
|
||
|
|
Comp equal
|
||
|
|
Pass zero
|
||
|
|
}
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
Tags { "LightMode" = "Universal2D" }
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
|
|
|
||
|
|
#pragma vertex ColorVertex
|
||
|
|
#pragma fragment ColorFragment
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float3 positionOS : POSITION;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct Varyings
|
||
|
|
{
|
||
|
|
float4 positionCS : SV_POSITION;
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
Varyings ColorVertex(Attributes v)
|
||
|
|
{
|
||
|
|
Varyings o = (Varyings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
||
|
|
|
||
|
|
// We need to flatten the object relative to the camera. After it has been transformed to clip space, we can set the z value to the object's origin.
|
||
|
|
float4 originCS = TransformObjectToHClip(float3(0, 0, 0));
|
||
|
|
o.positionCS = TransformObjectToHClip(v.positionOS);
|
||
|
|
//o.positionCS.z = (originCS.z * o.positionCS.w) / originCS.w;
|
||
|
|
o.positionCS.z = 0;
|
||
|
|
return o;
|
||
|
|
}
|
||
|
|
|
||
|
|
half4 ColorFragment(Varyings i) : SV_Target
|
||
|
|
{
|
||
|
|
const half4 color = half4(0,0,1,1);
|
||
|
|
return color;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
Tags { "LightMode" = "NormalsRendering"}
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
|
|
|
||
|
|
#pragma vertex NormalsRenderingVertex
|
||
|
|
#pragma fragment NormalsRenderingFragment
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float3 positionOS : POSITION;
|
||
|
|
float4 color : COLOR;
|
||
|
|
float2 uv : TEXCOORD0;
|
||
|
|
float3 normal : NORMAL;
|
||
|
|
float4 tangent : TANGENT;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct Varyings
|
||
|
|
{
|
||
|
|
float4 positionCS : SV_POSITION;
|
||
|
|
half4 color : COLOR;
|
||
|
|
float2 uv : TEXCOORD0;
|
||
|
|
half3 normalWS : TEXCOORD1;
|
||
|
|
half3 tangentWS : TEXCOORD2;
|
||
|
|
half3 bitangentWS : TEXCOORD3;
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
TEXTURE2D(_MainTex);
|
||
|
|
SAMPLER(sampler_MainTex);
|
||
|
|
TEXTURE2D(_NormalMap);
|
||
|
|
SAMPLER(sampler_NormalMap);
|
||
|
|
half4 _NormalMap_ST; // Is this the right way to do this?
|
||
|
|
|
||
|
|
Varyings NormalsRenderingVertex(Attributes attributes)
|
||
|
|
{
|
||
|
|
Varyings o = (Varyings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(attributes);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
||
|
|
|
||
|
|
float4 originCS = TransformObjectToHClip(float3(0, 0, 0));
|
||
|
|
o.positionCS = TransformObjectToHClip(attributes.positionOS);
|
||
|
|
//o.positionCS.z = (originCS.z * o.positionCS.w) / originCS.w;
|
||
|
|
o.positionCS.z = 0;
|
||
|
|
|
||
|
|
return o;
|
||
|
|
}
|
||
|
|
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl"
|
||
|
|
|
||
|
|
half4 NormalsRenderingFragment(Varyings i) : SV_Target
|
||
|
|
{
|
||
|
|
const half4 color = half4(0,0,1,1);
|
||
|
|
return color;
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
|
||
|
|
Pass
|
||
|
|
{
|
||
|
|
Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"}
|
||
|
|
|
||
|
|
ZTest Never
|
||
|
|
ZWrite Off
|
||
|
|
|
||
|
|
|
||
|
|
HLSLPROGRAM
|
||
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
|
|
|
||
|
|
#pragma vertex UnlitVertex
|
||
|
|
#pragma fragment UnlitFragment
|
||
|
|
|
||
|
|
struct Attributes
|
||
|
|
{
|
||
|
|
float3 positionOS : POSITION;
|
||
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
|
};
|
||
|
|
|
||
|
|
struct Varyings
|
||
|
|
{
|
||
|
|
float4 positionCS : SV_POSITION;
|
||
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
Varyings UnlitVertex(Attributes attributes)
|
||
|
|
{
|
||
|
|
Varyings o = (Varyings)0;
|
||
|
|
UNITY_SETUP_INSTANCE_ID(attributes);
|
||
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
||
|
|
|
||
|
|
o.positionCS = TransformObjectToHClip(attributes.positionOS);
|
||
|
|
return o;
|
||
|
|
}
|
||
|
|
|
||
|
|
float4 UnlitFragment(Varyings i) : SV_Target
|
||
|
|
{
|
||
|
|
return float4(0,0,0,0);
|
||
|
|
}
|
||
|
|
ENDHLSL
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Fallback "Sprites/Default"
|
||
|
|
}
|