Показать сообщение отдельно
Старый 14.01.2017, 10:40   #1
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 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, я призываю тебя!
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием