You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.5 KiB
115 lines
3.5 KiB
Shader "Hidden/Light2D-Shape" |
|
{ |
|
Properties |
|
{ |
|
[HideInInspector] _SrcBlend("__src", Float) = 1.0 |
|
[HideInInspector] _DstBlend("__dst", Float) = 0.0 |
|
} |
|
|
|
SubShader |
|
{ |
|
Tags { "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } |
|
|
|
Pass |
|
{ |
|
Blend[_SrcBlend][_DstBlend] |
|
ZWrite Off |
|
Cull Off |
|
|
|
HLSLPROGRAM |
|
#pragma vertex vert |
|
#pragma fragment frag |
|
#pragma multi_compile_local SPRITE_LIGHT __ |
|
#pragma multi_compile_local USE_NORMAL_MAP __ |
|
#pragma multi_compile_local USE_ADDITIVE_BLENDING __ |
|
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" |
|
#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" |
|
|
|
struct Attributes |
|
{ |
|
float3 positionOS : POSITION; |
|
float4 color : COLOR; |
|
float2 uv : TEXCOORD0; |
|
}; |
|
|
|
struct Varyings |
|
{ |
|
float4 positionCS : SV_POSITION; |
|
half4 color : COLOR; |
|
half2 uv : TEXCOORD0; |
|
|
|
SHADOW_COORDS(TEXCOORD1) |
|
NORMALS_LIGHTING_COORDS(TEXCOORD2, TEXCOORD3) |
|
}; |
|
|
|
half _InverseHDREmulationScale; |
|
half4 _LightColor; |
|
half _FalloffDistance; |
|
|
|
#ifdef SPRITE_LIGHT |
|
TEXTURE2D(_CookieTex); // This can either be a sprite texture uv or a falloff texture |
|
SAMPLER(sampler_CookieTex); |
|
#else |
|
half _FalloffIntensity; |
|
TEXTURE2D(_FalloffLookup); |
|
SAMPLER(sampler_FalloffLookup); |
|
#endif |
|
NORMALS_LIGHTING_VARIABLES |
|
SHADOW_VARIABLES |
|
|
|
Varyings vert(Attributes attributes) |
|
{ |
|
Varyings o = (Varyings)0; |
|
|
|
float3 positionOS = attributes.positionOS; |
|
|
|
positionOS.x = positionOS.x + _FalloffDistance * attributes.color.r; |
|
positionOS.y = positionOS.y + _FalloffDistance * attributes.color.g; |
|
|
|
o.positionCS = TransformObjectToHClip(positionOS); |
|
o.color = _LightColor * _InverseHDREmulationScale; |
|
o.color.a = attributes.color.a; |
|
|
|
#ifdef SPRITE_LIGHT |
|
o.uv = attributes.uv; |
|
#else |
|
o.uv = float2(o.color.a, _FalloffIntensity); |
|
#endif |
|
|
|
float4 worldSpacePos; |
|
worldSpacePos.xyz = TransformObjectToWorld(positionOS); |
|
worldSpacePos.w = 1; |
|
TRANSFER_NORMALS_LIGHTING(o, worldSpacePos) |
|
TRANSFER_SHADOWS(o) |
|
|
|
return o; |
|
} |
|
|
|
half4 frag(Varyings i) : SV_Target |
|
{ |
|
half4 color = i.color; |
|
#if SPRITE_LIGHT |
|
half4 cookie = SAMPLE_TEXTURE2D(_CookieTex, sampler_CookieTex, i.uv); |
|
#if USE_ADDITIVE_BLENDING |
|
|
|
color *= cookie * cookie.a; |
|
#else |
|
color *= cookie; |
|
#endif |
|
#else |
|
#if USE_ADDITIVE_BLENDING |
|
color *= SAMPLE_TEXTURE2D(_FalloffLookup, sampler_FalloffLookup, i.uv).r; |
|
#else |
|
color.a = SAMPLE_TEXTURE2D(_FalloffLookup, sampler_FalloffLookup, i.uv).r; |
|
#endif |
|
#endif |
|
APPLY_NORMALS_LIGHTING(i, color); |
|
APPLY_SHADOWS(i, color, _ShadowIntensity); |
|
|
|
return color; |
|
} |
|
ENDHLSL |
|
} |
|
} |
|
}
|
|
|