92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
Shader "TrashMaze/ObjectVisibility"
|
|
{
|
|
Properties
|
|
{
|
|
_MainTex ("Normal Texture (Color)", 2D) = "white" {}
|
|
_OutlineTex ("Outline Texture (White)", 2D) = "white" {}
|
|
[PerRendererData] _IsRevealed ("Is Revealed", Float) = 0
|
|
[PerRendererData] _IsInVision ("Is In Vision", Float) = 0
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags
|
|
{
|
|
"Queue"="Transparent"
|
|
"RenderType"="Transparent"
|
|
"IgnoreProjector"="True"
|
|
}
|
|
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
ZWrite Off
|
|
Cull Off
|
|
|
|
Pass
|
|
{
|
|
HLSLPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float4 positionOS : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 positionCS : SV_POSITION;
|
|
};
|
|
|
|
TEXTURE2D(_MainTex);
|
|
SAMPLER(sampler_MainTex);
|
|
TEXTURE2D(_OutlineTex);
|
|
SAMPLER(sampler_OutlineTex);
|
|
float4 _MainTex_ST;
|
|
|
|
// Per-instance properties (set by RevealableObject component)
|
|
float _IsRevealed;
|
|
float _IsInVision;
|
|
|
|
Varyings vert(Attributes input)
|
|
{
|
|
Varyings output;
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);
|
|
output.positionCS = vertexInput.positionCS;
|
|
output.uv = TRANSFORM_TEX(input.uv, _MainTex);
|
|
return output;
|
|
}
|
|
|
|
half4 frag(Varyings input) : SV_Target
|
|
{
|
|
// Three-state logic:
|
|
// 1. In vision radius -> show normal texture (color)
|
|
// 2. Revealed but outside vision -> show outline texture (white)
|
|
// 3. Never revealed -> transparent (hidden)
|
|
|
|
if (_IsInVision > 0.5)
|
|
{
|
|
// Inside vision radius - show color
|
|
return SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv);
|
|
}
|
|
else if (_IsRevealed > 0.5)
|
|
{
|
|
// Revealed but outside vision - show outline
|
|
return SAMPLE_TEXTURE2D(_OutlineTex, sampler_OutlineTex, input.uv);
|
|
}
|
|
else
|
|
{
|
|
// Never revealed - transparent (hidden)
|
|
return half4(0, 0, 0, 0);
|
|
}
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
|
|
FallBack "Transparent/Diffuse"
|
|
}
|
|
|