85 lines
3.0 KiB
Plaintext
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
|
|
}
|
|
}
|
|
}
|