本篇博客主要是学习网址: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