72 lines
1.4 KiB
GLSL
72 lines
1.4 KiB
GLSL
Shader "UChart/HeatMap/Simple"
|
|
{
|
|
Properties
|
|
{
|
|
_HeatMapTex("Texture",2D) = "white"{}
|
|
_Alpha("Alpha",range(0,1)) = 0.8
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags {"RenderType"="Overlay" "Queue"="Transparent" }
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
ZTest [unity_GUIZTestMode]
|
|
ZWrite On
|
|
// Cull off
|
|
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
sampler2D _HeatMapTex;
|
|
half _Alpha;
|
|
uniform int _FactorCount = 0;
|
|
uniform float3 _Factors[100];
|
|
uniform float3 _FactorsProperties[100];
|
|
|
|
struct a2v
|
|
{
|
|
float4 pos : POSITION;
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
float4 pos : POSITION;
|
|
fixed3 worldPos : TEXCOORD1;
|
|
};
|
|
|
|
v2f vert(a2v input)
|
|
{
|
|
v2f o;
|
|
o.pos = UnityObjectToClipPos(input.pos);
|
|
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;
|
|
float temperatureFacator = _FactorsProperties[i].z;
|
|
half ratio = 1 - saturate(dis/radius);
|
|
heat += intensity * ratio * temperatureFacator;
|
|
heat = clamp(heat,0.05,0.95);
|
|
}
|
|
half4 color = tex2D(_HeatMapTex,fixed2(heat,0.5));
|
|
color.a = _Alpha;
|
|
return color;
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
}
|
|
|
|
FallBack "Diffuse"
|
|
} |