Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Не работает альфа.
Есть такой шейдер, который рисует колечки и сектора.
Shader "Custom/Circle" {
Properties{
_Color("Color", Color) = (1,0,0,0)
_Thickness("Thickness", Range(0.0,0.5)) = 0.05
_Radius("Radius", Range(0.0, 0.5)) = 0.4
_Dropoff("Dropoff", Range(0.01, 4)) = 0.1
_StartAngle("StartAngle", Range(0.0, 360.0)) = 0.0
_Angle("Angle", Range(0.0, 360.0)) = 360.0
}
SubShader{
Pass{
Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#define M_PI 3.1415926535897932384626433832795
fixed4 _Color; // low precision type is usually enough for colors
float _Thickness;
float _Radius;
float _Dropoff;
float _StartAngle;
float _Angle;
struct fragmentInput {
float4 pos : SV_POSITION;
float2 uv : TEXTCOORD0;
};
fragmentInput vert(appdata_base v)
{
fragmentInput o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord.xy - fixed2(0.5,0.5);
return o;
}
// r = radius
// d = distance
// t = thickness
// p = % thickness used for dropoff
float antialias(float r, float d, float t, float p) {
if (d < (r - 0.5*t))
return -pow(d - r + 0.5*t,2) / pow(p*t, 2) + 1.0;
else if (d > (r + 0.5*t))
return -pow(d - r - 0.5*t,2) / pow(p*t, 2) + 1.0;
else
return 1.0;
}
//s = start angle radians
//a = angle radian
//pos = position
float arc(fixed2 pos, float s, float a) {
float c = atan2(pos.y, pos.x);
if (c < 0)
c = 2*M_PI + c;
float cut = 0;
if (s + a > 2*M_PI)
cut = s + a - 2*M_PI;
if (c >= s && (c <= s + a || (cut > 0 && c <= cut ) )) {
return 1.0;
}
return 0.0;
}
fixed4 frag(fragmentInput i) : SV_Target{
float distance = sqrt(pow(i.uv.x, 2) + pow(i.uv.y,2));
float aas = antialias(_Radius, distance, _Thickness, _Dropoff);
float s = M_PI * _StartAngle / 180.0;
float a = M_PI * _Angle / 180.0;
float mul = arc(i.uv, s, a) * aas;
return fixed4(_Color.r, _Color.g, _Color.b, _Color.a * mul);
}
ENDCG
}
}
}
Но как-то невзначай этот шейдер стал работать без прозрачности, при этом я его никак не менял.
Компилятор на ошибки не указывает:
Т.е вот так теперь (1 перекрывает 2, хотя не должно!):
До смены Unit на 5.5 нормально работал на телефоне, теперь вообще не работает!
Mr_F, я призываю тебя!
|