U3D log Flash shader 效果(标题流光效果)

整理下用到的shader效果,其中用到最多的,或则很大几率在游戏中会用到的,可能是标题的流光效果,

如果用帧动画实现,不仅资源耗费明显,最终效果也没shader来得逼真,废话不多说,直接上代码了(其实也是根据网上shader小改了下得到的):


Shader "Env/LogoFlash" 
{  
    Properties {  
        //_MainTex ("Base (RGB)", 2D) = "white" {}  
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {}
        _FlashColor ("Flash Color", Color) = (1,1,1,0)  
        _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" 
        }  
//       Blend SrcAlpha OneMinusSrcAlpha 
//       AlphaTest Greater 0.1
        CGPROGRAM  
        //#pragma surface surf Lambert alpha exclude_path:prepass noforwardadd  
        #pragma surface surf Lambert alpha
        #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 - _BeginTime;  
       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;  
            }  
  
            return brightness;  
        }  
          
        void surf (Input IN, inout SurfaceOutput o)  
        {                  
            float4 texCol = tex2D(_MainTex, IN.uv_MainTex);  
            float brightness = inFlash(IN.uv_MainTex);  
          
            o.Albedo = texCol.rgb + _FlashColor.rgb * brightness;  
            //o.Alpha =  texCol.a;   
            o.Alpha = texCol.a *  brightness;
        }  
          
        ENDCG       
    }  
      
    FallBack "Unlit/Transparent GrayscaleEffect"  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
U3D(Unity3D)是一种广泛应用于游戏开发的多功能游戏引擎。而卡通水shader是一种用于在游戏中实现卡通风格水体效果的特殊材质。 在U3D中,实现卡通风格水体效果的方式有很多种。一种常见的方法是使用自定义的Shader来创建卡通水体效果。这种Shader可以通过编程语言如Cg或HLSL编写,并通过Unity的着色器编程功能来集成到游戏项目中。卡通水shader可以通过Unity Asset Store或其他第三方资源网站进行下载。 在下载卡通水shader之前,您需要确保您的项目中已经导入了U3D引擎。然后,您可以通过在Unity Asset Store中搜索相关关键词,如“卡通水shader”或“toon水效果”,以找到符合需求的资源。 下载卡通水shader后,您可以按照资源提供者提供的说明,将其导入到您的项目中。一般来说,导入过程通常包括将资源文件复制到项目文件夹中的相应位置,然后在Unity编辑器中进行一些设置和调整。 一旦成功导入和设置了卡通水shader,您就可以在项目中应用这个新的材质。通过在场景中创建水体对象,并将卡通水shader指定为该对象的材质,您就可以在游戏中看到卡通风格的水体效果了。 总结来说,要下载U3D卡通水shader,您需要先导入U3D引擎,在Unity Asset Store或其他资源网站搜索相关资源,并按照说明将其导入到项目中。然后,您可以应用这个新的材质到游戏场景中的水体对象上,以实现卡通风格的水体效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值