Shader "HSH/UpgradeColorEffect"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
_MaskTex("Mask", 2D) = "white" {}
_NoiseTex("Noise Texture", 2D) = "white" {}
_LightColor("Light Color", Color) = (1, 1, 1, 1)
_LightIntensity("Light Intensity", Range(0, 5)) = 1.0
_NoiseScale("Noise Scale", Range(0, 5)) = 1.0
_NoiseSpeed("Noise Speed", Range(0, 5)) = 1.0
[HideInInspector] _Color("Tint", Color) = (1,1,1,1)
[HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
}
SubShader
{
Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }
LOD 100
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
Cull Off
ZWrite Off
Pass
{
Tags { "LightMode" = "Universal2D" }
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile USE_SHAPE_LIGHT_TYPE_0 __
#pragma multi_compile USE_SHAPE_LIGHT_TYPE_1 __
#pragma multi_compile USE_SHAPE_LIGHT_TYPE_2 __
#pragma multi_compile USE_SHAPE_LIGHT_TYPE_3 __
#pragma multi_compile _ DEBUG_DISPLAY
struct Attributes
{
float4 positionOS : POSITION;
float4 color : COLOR;
float2 uv : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float4 color : COLOR;
float2 uv : TEXCOORD0;
half2 lightingUV : TEXCOORD2;
float4 screenPos : TEXCOORD1;
#if defined(DEBUG_DISPLAY)
float3 positionWS : TEXCOORD2;
#endif
UNITY_VERTEX_OUTPUT_STEREO
};
#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl"
TEXTURE2D(_MainTex);
TEXTURE2D(_NoiseTex);
TEXTURE2D(_MaskTex);
SAMPLER(sampler_MainTex);
SAMPLER(sampler_NoiseTex);
SAMPLER(sampler_MaskTex);
float4 _LightColor;
float _LightIntensity;
float _NoiseScale;
float _NoiseSpeed;
float4 _Color;
half4 _RendererColor;
#if USE_SHAPE_LIGHT_TYPE_0
SHAPE_LIGHT(0)
#endif
#if USE_SHAPE_LIGHT_TYPE_1
SHAPE_LIGHT(1)
#endif
#if USE_SHAPE_LIGHT_TYPE_2
SHAPE_LIGHT(2)
#endif
#if USE_SHAPE_LIGHT_TYPE_3
SHAPE_LIGHT(3)
#endif
CBUFFER_START(UnityPerMaterial)
float4 _MainTex_ST;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
UNITY_SETUP_INSTANCE_ID(IN);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.uv = TRANSFORM_TEX(IN.uv, _MainTex);
OUT.screenPos = ComputeScreenPos(OUT.positionHCS);
OUT.color = IN.color;
OUT.lightingUV = half2(ComputeScreenPos(OUT.positionHCS / OUT.positionHCS.w).xy);\
OUT.color = IN.color * _Color * _RendererColor;
return OUT;
}
#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/CombinedShapeLightShared.hlsl"
half4 frag(Varyings IN) : SV_Target
{
half4 textureColor = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv) * IN.color;
half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, IN.uv);
half noiseValue = SAMPLE_TEXTURE2D(_NoiseTex, sampler_NoiseTex, IN.uv * (_NoiseScale * 0.4) + _Time.y * (_NoiseSpeed * 0.01)).r;
half4 lightEffect = _LightColor * noiseValue * _LightIntensity;
SurfaceData2D surfaceData;
InputData2D inputData;
InitializeSurfaceData(textureColor.rgb, textureColor.a, mask, surfaceData);
InitializeInputData(IN.uv, IN.lightingUV, inputData);
half4 lightResult = CombinedShapeLightShared(surfaceData, inputData);
return lerp(lightResult, lightResult + lightEffect, saturate(lightResult.a));
}
ENDHLSL
}
}
}