Files
Ipseity-Demo/Assets/Unheimlich_POC/Materials/Shaders/Portal/Portal.shader
T

79 lines
2.0 KiB
Plaintext

Shader "Custom/Portal_URP"
{
Properties
{
_InactiveColour ("Inactive Colour", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {}
_DisplayMask ("Display Mask", Float) = 1
}
SubShader
{
Tags
{
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"Queue"="Geometry+500"
}
Cull Off
ZWrite On
ZTest LEqual
Pass
{
Name "Unlit"
Tags { "LightMode"="SRPDefaultUnlit" }
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
CBUFFER_START(UnityPerMaterial)
float4 _InactiveColour;
float _DisplayMask;
CBUFFER_END
struct Attributes
{
float3 positionOS : POSITION;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float4 screenPos : TEXCOORD0;
};
Varyings vert (Attributes v)
{
Varyings o;
o.positionHCS = TransformObjectToHClip(v.positionOS);
o.screenPos = ComputeScreenPos(o.positionHCS);
return o;
}
half4 frag (Varyings i) : SV_Target
{
float2 uv = i.screenPos.xy / max(i.screenPos.w, 1e-5);
half4 portalCol = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv);
half displayMask = saturate(_DisplayMask);
half4 finalCol = lerp(_InactiveColour, portalCol, displayMask);
if (displayMask > 0.5h && portalCol.a < 0.1h)
return _InactiveColour;
return finalCol;
}
ENDHLSL
}
}
}