unity shader 流光(1)

本篇博客主要是学习网址:https://www.cnblogs.com/crazylights/p/4040965.html
之后的记录。
关于流光网上一堆的例子,按需进行cv+修改即可。
所以本篇博客命名为流光(1),随着学习的慢慢的推进我想越来越多的效果会逐渐增加的。

接下来是流光的第一个例子。
效果我们可以看到如下:
这里写图片描述

接下来就把代码上传上来了:

Shader "Custom/shader_flowlight_step02" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _FlowTex ("Light Texture(A)", 2D) = "black" {} //流光贴图
        _uvaddspeed   ("",float) = 2//流光uv改变速度

    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert

        sampler2D _MainTex;
        sampler2D _FlowTex;//属性
        float _uvaddspeed;//属性
        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);

            float2 uv =IN.uv_MainTex;//计算流光uv
            uv.x/=2;//取一半
            uv.x+=_Time.y*_uvaddspeed;//横向加上


            float flow = tex2D (_FlowTex, uv).a;//取流光亮度

            o.Albedo = c.rgb +  float3(flow,flow,flow);//加上流光亮度颜色
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

ok效果有了,我们接下来看下,用到的资源图片。
这里写图片描述

我们看到最终颜色的叠加方式:
o.Albedo = c.rgb + float3(flow,flow,flow);//加上流光亮度颜色
图片的黑色是0,白色为255,那么我们在原有的c.rgb+流光颜色值。所以全黑的部分没有改变颜色,而如果加上255白色,那么此点就变为全白了,好像高光一样的效果。

至于为啥每次都用uv.x/=2;//取一半 我不知道啥意思。懵逼中……

==========================================================

下面我们在此基础上,再多加一个图片,这个图片的目的是啥呢?使得模型只在指定的地方有流光,什么叫指定的地方呢?我们可以在图片上进行定义,比如我么可以限定只在白色的地方进行流光,而在全黑的地方没有流光。
比如我们将要使用的图是:
这里写图片描述

这个和我们的主贴图有啥区别呢?
这里写图片描述
这个看到了吗?我们只想在logo的文字部分有流光效果,那么用一个遮罩贴图就可以了。
全部shader代码如下:

Shader "Custom/shader_flowlight_step02" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _FlowTex ("Light Texture(A)", 2D) = "black" {} //流光贴图
        _MaskTex("Mask Texture(A)",2D)="whilte"{} //遮罩贴图
        _uvaddspeed   ("",float) = 2//流光uv改变速度

    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert

        sampler2D _MainTex;
        sampler2D _FlowTex;//属性
        sampler2D _MaskTex;//属性
        float _uvaddspeed;//属性
        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);

            float2 uv =IN.uv_MainTex;//计算流光uv
            uv.x/=4;//取一半
            uv.x+=_Time.y*_uvaddspeed;//横向加上


            float flow = tex2D (_FlowTex, uv).a;//取流光亮度
            float mask = tex2D(_MaskTex, IN.uv_MainTex).a;
            o.Albedo = c.rgb +  float3(flow,flow,flow)*mask;//加上流光亮度颜色
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

使用遮罩贴图的最关键代码:
o.Albedo = c.rgb + float3(flow,flow,flow)*mask;//加上流光亮度颜色
黑色的部分mask=0,而白色的地方为255,那么可以起到只在logo的文字部分有流光的效果。
效果如下:
这里写图片描述

ok,至此我们已经学习如何使用两个贴图完成流光效果了。一个是流光贴图,一个是遮罩贴图,而遮罩贴图是为了让其在指定的部分进行流光。

最后的最后给出项目下载地址:
https://pan.baidu.com/s/17qbILdQjqh29McZo-dbs6w

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值