Files
ScienceLab.TimeAndSpace/Assets/Shaders/CountryURP.shader
2026-03-17 18:10:00 +02:00

85 lines
3.0 KiB
Plaintext

Shader "Custom/CountryURP"
{
Properties
{
_BaseColor("Колір країни", Color) = (0.8, 0.8, 0.8, 1)
_HoverColor("Колір при наведенні", Color) = (1, 1, 0.6, 1)
_SelectedColor("Колір при виборі", Color) = (1, 0.85, 0.1, 1)
_HoverStrength("Сила hover ефекту", Range(0, 1)) = 0
_SelectStrength("Сила вибору", Range(0, 1)) = 0
_EdgeColor("Колір межі", Color) = (0.1, 0.1, 0.1, 1)
_EdgeWidth("Товщина межі", Range(0, 1)) = 0.4
}
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "Queue" = "Geometry" }
Pass
{
Name "ForwardLit"
Tags { "LightMode" = "UniversalForward" }
Cull Back
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
CBUFFER_START(UnityPerMaterial)
float4 _BaseColor;
float4 _HoverColor;
float4 _SelectedColor;
float _HoverStrength;
float _SelectStrength;
float4 _EdgeColor;
float _EdgeWidth;
CBUFFER_END
struct Attributes
{
float4 positionOS : POSITION;
float3 normalOS : NORMAL;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float3 normalWS : TEXCOORD0;
float3 positionWS : TEXCOORD1;
float edge : TEXCOORD2;
};
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.normalWS = TransformObjectToWorldNormal(IN.normalOS);
OUT.positionWS = TransformObjectToWorld(IN.positionOS.xyz);
float3 viewDir = normalize(_WorldSpaceCameraPos - OUT.positionWS);
OUT.edge = abs(dot(normalize(OUT.normalWS), viewDir));
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
float3 normal = normalize(IN.normalWS);
Light mainLight = GetMainLight();
float NdotL = saturate(dot(normal, mainLight.direction));
float lighting = 0.4 + 0.6 * NdotL;
float4 col = lerp(_BaseColor, _HoverColor, _HoverStrength);
col = lerp(col, _SelectedColor, _SelectStrength);
col.rgb *= lighting;
float edgeFactor = 1.0 - smoothstep(0.0, _EdgeWidth, IN.edge);
col.rgb = lerp(col.rgb, _EdgeColor.rgb, edgeFactor * 0.85);
return col;
}
ENDHLSL
}
}
}