欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

unity实现流光效果

程序员文章站 2022-05-14 22:20:11
本文实例为大家分享了unity实现流光效果的具体代码,供大家参考,具体内容如下1.通过一些简单效果可以让我们更好的去理解shader,具体都在代码注释中:shader "unlit/movelight...

本文实例为大家分享了unity实现流光效果的具体代码,供大家参考,具体内容如下

1.通过一些简单效果可以让我们更好的去理解shader,具体都在代码注释中:

shader "unlit/movelightimage"
{
 properties
 {
 //主纹理
 _maintex ("texture", 2d) = "white" {}
 //灯光纹理
 _lighttex("light texture",2d)="white"{}
 //遮罩纹理
 _masktex("mask texture",2d)="white"{}
 }
 subshader
 {
 tags {"queue"="transparent" "rendertype"="transparent" }
 lod 100
 //透明混合
 blend srcalpha oneminussrcalpha

 pass
 {
 cgprogram
 #pragma vertex vert
 #pragma fragment frag
 // make fog work
 #pragma multi_compile_fog
 
 #include "unitycg.cginc"

 struct appdata
 {
 float4 vertex : position;
 float2 uv : texcoord0;
 };

 struct v2f
 {
 float2 uv : texcoord0;
 unity_fog_coords(1)
 float4 vertex : sv_position;
 };

 sampler2d _maintex;
 float4 _maintex_st;
 sampler2d _lighttex;
 sampler2d _masktex;
 fixed4 _color;

 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = mul(unity_matrix_mvp, v.vertex);
 o.uv = transform_tex(v.uv, _maintex);
 unity_transfer_fog(o,o.vertex);
 return o;
 }
 
 fixed4 frag (v2f i) : sv_target
 {
 //灯光贴图 取一半uv
 float2 uv=i.uv*0.5;
 //不断改变uv的x轴,让他往x轴方向移动,_time为shader的时间函数,会一直执行
 uv.x+=-_time.y*0.4;
 //取灯光贴图的alpha值,黑色为0,白色为1 
 fixed lighttexa=tex2d(_lighttex,uv).a;
 //获取遮罩贴图的alpha值,黑色为0,白色为1 这里的uv和上面的uv是调用的不一样的函数
 fixed maska=tex2d(_masktex,i.uv).a;

 //主纹理+灯光贴图*遮罩贴图 简单原理任何数*0为0 这样就避免了遮罩外出现不协调灯光贴图
 fixed4 col = tex2d(_maintex, i.uv)+lighttexa*maska*0.6;
 // apply fog
 unity_apply_fog(i.fogcoord, col); 
 return col;
 }
 endcg
 }
 }
}

2.材质参数:

unity实现流光效果

3.效果展示

unity实现流光效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: unity 流光