GQ_Communicate/GQ_TongXin/Assets/Shaders/HeatMapShaderPeak.shader

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"
}