80 lines
1.8 KiB
GLSL
80 lines
1.8 KiB
GLSL
|
|
Shader "UChart/HeatMap/Peak"
|
|
{
|
|
Properties
|
|
{
|
|
_HeatMapTex("HeatMapTex",2D) = "white"{}
|
|
_Alpha("Alpha",range(0,1)) = 0.8
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags{"Queue"="Transparent"}
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "unitycg.cginc"
|
|
|
|
sampler2D _HeatMapTex;
|
|
half _Alpha;
|
|
uniform int _FactorCount;
|
|
uniform float4 _Factors[100];
|
|
uniform float2 _FactorsProperties[100];
|
|
|
|
struct a2v
|
|
{
|
|
float4 pos : POSITION;
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
float4 pos : POSITION;
|
|
fixed3 worldPos : TEXCOORD1;
|
|
};
|
|
|
|
v2f vert(a2v input)
|
|
{
|
|
v2f o;
|
|
half3 worldPos = mul(unity_ObjectToWorld,input.pos).xyz;
|
|
half heat = 0;
|
|
for( int i = 0 ; i < _FactorCount;i++ )
|
|
{
|
|
half dis = distance(worldPos,_Factors[i].xyz);
|
|
float radius = _FactorsProperties[i].x;
|
|
float intensity = _FactorsProperties[i].y;
|
|
half ratio = 1 - saturate(dis/radius);
|
|
heat += intensity * ratio;
|
|
}
|
|
o.pos = UnityObjectToClipPos(input.pos + half3(0,heat*3,0));
|
|
o.worldPos = mul(unity_ObjectToWorld,input.pos).xyz;
|
|
return o;
|
|
}
|
|
|
|
half4 frag(v2f input):COLOR
|
|
{
|
|
half heat = 0;
|
|
for( int i = 0 ; i < _FactorCount;i++ )
|
|
{
|
|
half dis = distance(input.worldPos,_Factors[i].xyz);
|
|
float radius = _FactorsProperties[i].x;
|
|
float intensity = _FactorsProperties[i].y;
|
|
half ratio = 1 - saturate(dis/radius);
|
|
heat += intensity * ratio;
|
|
heat = clamp(heat,0.05,0.95);
|
|
}
|
|
half4 color = tex2D(_HeatMapTex,fixed2(heat,0.5));
|
|
color.a = _Alpha;
|
|
return color;
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
}
|
|
|
|
Fallback "Diffuse"
|
|
} |