效果:
透明度加强.gif原图
作用:将图片中半透明的像素进行加深
//////////////////////////////////////////////
/// 2DxFX v3 - by VETASOFT 2018 //
//////////////////////////////////////////////
//////////////////////////////////////////////
Shader "2DxFX_Extra_Shaders/AlphaIntensity"
{
Properties
{
//精灵纹理
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
//透明度衰减(实际上这里应该是描边强度) 范围
_AlphaIntensity_Fade_1("_AlphaIntensity_Fade_1", Range(0, 6)) = 1
//精灵渐淡
_SpriteFade("SpriteFade", Range(0, 1)) = 1.0
// required for UI.Mask
[HideInInspector]_StencilComp("Stencil Comparison", Float) = 8
[HideInInspector]_Stencil("Stencil ID", Float) = 0
[HideInInspector]_StencilOp("Stencil Operation", Float) = 0
[HideInInspector]_StencilWriteMask("Stencil Write Mask", Float) = 255
[HideInInspector]_StencilReadMask("Stencil Read Mask", Float) = 255
[HideInInspector]_ColorMask("Color Mask", Float) = 15
}
SubShader
{
// 渲染队列=透明通道 忽略投影 渲染类型 预览类型 = 平面 可以使用精灵图片吗
Tags {"Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType" = "Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" }
ZWrite Off //是否要将像素的深度写入深度缓存中
Blend SrcAlpha OneMinusSrcAlpha //Shader Blend混合效果:透明度混合
Cull Off//背面渲染剔除
// required for UI.Mask
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Pass
{
CGPROGRAM
// vert函数 包含 顶点着色器代码
#pragma vertex vert
// frag函数 包含 片元着色器代码
#pragma fragment frag
//使用用低精度(一般是指fp16),以提升片段着色器的运行速度,减少时间。
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
//顶点着色器的输入结构体
struct appdata_t{
float4 vertex : POSITION;//顶点坐标
float4 color : COLOR;//颜色
float2 texcoord : TEXCOORD0;//纹理坐标集
};
//顶点着色器的输出/片元着色器的输入结构体
struct v2f
{
float2 texcoord : TEXCOORD0;//纹理坐标集
float4 vertex : SV_POSITION;//平面顶点坐标
float4 color : COLOR;//颜色
};
//对应最上面材质属性声明
sampler2D _MainTex;
float _SpriteFade;
float _AlphaIntensity_Fade_1;
//顶点着色器
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);//将顶点转换到裁剪坐标系
OUT.texcoord = IN.texcoord;
OUT.color = IN.color;
return OUT;
}
//New 透明度计算 纹理 透明度强度
float4 AlphaIntensity(float4 txt,float fade)
{
//如果纹理透明度小于1,将透明度与透明度强度相乘
if (txt.a < 1)
txt.a = txt.a*fade;
return txt;
}
//片元着色器
float4 frag (v2f i) : COLOR
{
float4 _MainTex_1 = tex2D(_MainTex, i.texcoord);//纹理采样
//New 这里将材质中半透明的顶点进行透明度加深
float4 AlphaIntensity_1 = AlphaIntensity(_MainTex_1,_AlphaIntensity_Fade_1);
float4 FinalResult = AlphaIntensity_1;//声明最终输出纹理
FinalResult.rgb *= i.color.rgb;
FinalResult.a = FinalResult.a * _SpriteFade * i.color.a;//透明度与渐淡参数相乘
return FinalResult;
}
ENDCG
}
}
Fallback "Sprites/Default"
}
网友评论