Я попробовал radial fade от Battle Angel Alita, в тройку он импортится нормально,
но вот этот сурфейс шейдер (типа порт, надеюсь корректный) работает лучше (сводит края в альфу, глюков нет):
сурфейс шейдер вот:
Синтаксис:
Используется glsl
Shader "RadialFade" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Range ("Range", Range (1.0, 8.0)) = 4.0
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert alpha
sampler2D _MainTex;
float _Range;
struct Input {
float2 uv_MainTex;
float3 viewDir;
};
void surf (Input IN, inout SurfaceOutput o) {
float4 albedo = tex2D(_MainTex, IN.uv_MainTex);
float3 normal = normalize(o.Normal);
float3 viewDir = normalize(IN.viewDir);
float fade = dot(normal, viewDir);
fade = fade * _Range;
fade = min(fade, 1.0);
o.Albedo.rgb = albedo.rgb;
o.Alpha = fade;
}
ENDCG
}
FallBack "Diffuse"
}
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Range ("Range", Range (1.0, 8.0)) = 4.0
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert alpha
sampler2D _MainTex;
float _Range;
struct Input {
float2 uv_MainTex;
float3 viewDir;
};
void surf (Input IN, inout SurfaceOutput o) {
float4 albedo = tex2D(_MainTex, IN.uv_MainTex);
float3 normal = normalize(o.Normal);
float3 viewDir = normalize(IN.viewDir);
float fade = dot(normal, viewDir);
fade = fade * _Range;
fade = min(fade, 1.0);
o.Albedo.rgb = albedo.rgb;
o.Alpha = fade;
}
ENDCG
}
FallBack "Diffuse"
}
оригинал вот:
(не работает на фоне скайбокса в тройке)
Синтаксис:
Используется glsl
Shader "_radial_fade"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Range ("Range", Range (1.0, 8.0)) = 4.0
}
SubShader
{
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
Tags {"Queue" = "Transparent"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
V2F_POS_FOG;
float2 uv;
float3 normal;
float3 viewDir;
};
uniform float4 _MainTex_ST;
v2f vert(appdata_tan v)
{
v2f o;
PositionFog(v.vertex, o.pos, o.fog);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.normal = v.normal;
o.viewDir = ObjSpaceViewDir(v.vertex);
return o;
}
uniform sampler2D _MainTex;
uniform float _Range;
float4 frag(v2f i) : COLOR
{
float4 albedo = tex2D(_MainTex, i.uv);
float3 normal = normalize(i.normal);
float3 viewDir = normalize(i.viewDir);
float fade = dot(normal, viewDir);
fade = fade * _Range;
fade = min(fade, 1.0);
float4 c;
c.rgb = albedo;
c.a = fade;
return c;
}
ENDCG
}
}
}
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Range ("Range", Range (1.0, 8.0)) = 4.0
}
SubShader
{
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
Tags {"Queue" = "Transparent"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
V2F_POS_FOG;
float2 uv;
float3 normal;
float3 viewDir;
};
uniform float4 _MainTex_ST;
v2f vert(appdata_tan v)
{
v2f o;
PositionFog(v.vertex, o.pos, o.fog);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.normal = v.normal;
o.viewDir = ObjSpaceViewDir(v.vertex);
return o;
}
uniform sampler2D _MainTex;
uniform float _Range;
float4 frag(v2f i) : COLOR
{
float4 albedo = tex2D(_MainTex, i.uv);
float3 normal = normalize(i.normal);
float3 viewDir = normalize(i.viewDir);
float fade = dot(normal, viewDir);
fade = fade * _Range;
fade = min(fade, 1.0);
float4 c;
c.rgb = albedo;
c.a = fade;
return c;
}
ENDCG
}
}
}