Unity3D 流光特效

Shader "Custom/LogoFlas" {
Properties {

_MainTex ("Base (RGB)", 2D) = "white" {}
_FlashColor ("Flash Color", Color) = (1,1,1,1)

_Angle ("Flash Angle", Range(0, 180)) = 45


_Width ("Flash Width", Range(0, 1)) = 0.2

_LoopTime ("Loop Time", Float) = 1

_Interval ("Time Interval", Float) = 3

//_BeginTime ("Begin Time", Float) = 2

}

SubShader

{

Tags { "Queue"="Transparent" "RenderType"="Transparent" }

CGPROGRAM

#pragma surface surf Lambert alpha exclude_path:prepass noforwardadd

//        #pragma target 3.0

sampler2D _MainTex;

float4 _FlashColor;

float _Angle;

float _Width;


float _LoopTime;

float _Interval;

//float _BeginTime;

struct Input

{

half2 uv_MainTex;

} ;

float inFlash(half2 uv)

{

float brightness = 0;

float angleInRad = 0.0174444 * _Angle;

float tanInverseInRad = 1.0 / tan(angleInRad);

float currentTime = _Time.y;

float totalTime = _Interval + _LoopTime;

float currentTurnStartTime = (int)((currentTime / totalTime)) * totalTime;


float currentTurnTimePassed = currentTime - currentTurnStartTime - _Interval;

bool onLeft = (tanInverseInRad > 0);

float xBottomFarLeft = onLeft? 0.0 : tanInverseInRad;

float xBottomFarRight = onLeft? (1.0 + tanInverseInRad) : 1.0;

float percent = currentTurnTimePassed / _LoopTime;


float xBottomRightBound = xBottomFarLeft + percent * (xBottomFarRight - xBottomFarLeft);
float xBottomLeftBound = xBottomRightBound - _Width;

float xProj = uv.x + uv.y * tanInverseInRad;

if(xProj > xBottomLeftBound && xProj < xBottomRightBound)

{
brightness = 1.0 - abs(2.0 * xProj - (xBottomLeftBound + xBottomRightBound)) / _Width;
// brightness = 1.0 – abs(2.0 * xProj – (xBottomLeftBound + xBottomRightBound)) / _Width;

}

return brightness;

}

void surf (Input IN, inout SurfaceOutput o)

{

half4 texCol = tex2D(_MainTex, IN.uv_MainTex);

float brightness = inFlash(IN.uv_MainTex);


o.Albedo = texCol.rgb + _FlashColor.rgb * brightness;

o.Alpha = texCol.a;


}


ENDCG

}

FallBack "Unlit/Transparent"

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值