Unity ShaderLab特效教程 着色器实例 代码+注释 【沿x轴y轴方向移动贴图动画】

如果代码中有什么不清楚请查看以下基础知识

Shader基础知识
unity3d 中 七种坐标知识详解

沿x轴y轴方向移动贴图动画

设置移动速度和贴图,就动起来了

Shader "Custom/ScrollSurfaceShader"
{
	Properties{
		//叠加颜色
		_Color("Color", Color) = (1,1,1,1)
		//指定贴图
		_MainTex("Albedo (RGB)", 2D) = "white" {}
		//光泽
		_Glossiness("Smoothness", Range(0,1)) = 0.5
		//金属度
		_Metallic("Metallic", Range(0,1)) = 0.0
		//x轴滚动
		_ScrollXSpeed("X Scroll Speed", Range(0, 10)) = 0.2
		//y轴滚动
		_ScrollYSpeed("Y Scroll Speed", Range(0, 10)) = 0.2
	}
		SubShader{
			Tags { "RenderType" = "Opaque" }
			LOD 200

			//没在pass中,因为时表面着色器
			CGPROGRAM

			//声明表面着色器
			#pragma surface surf Standard fullforwardshadows // Physically based Standard lighting model, and enable shadows on all light types
			#pragma target 3.0 // Use shader model 3.0 target, to get nicer looking lighting

			sampler2D _MainTex;
			//定义输入结构
			struct Input {
				float2 uv_MainTex;
			};

			half _Glossiness;
			half _Metallic;
			fixed4 _Color;
			fixed _ScrollXSpeed;
			fixed _ScrollYSpeed;

			//表面着色器正文 第一个参数为输入,第二个参数为输出
			void surf(Input IN, inout SurfaceOutputStandard o)
			{
				//输入的速度值 * 时间
				fixed2 scrollValue = fixed2(_ScrollXSpeed * _Time.y, _ScrollYSpeed * _Time.y);
				//uv = 当前的uv值+根据时间变动的值
				float2 scrolledUV = IN.uv_MainTex + scrollValue;
				//返回小数部分   这是i因为uv 的满值是1,要接受1以内的小数
				scrolledUV = frac(scrolledUV);
				//镜像播放
				//scrolledUV = sin(scrolledUV);

				// 设置主色,由贴图颜色 * color设置颜色
				fixed4 c = tex2D(_MainTex, scrolledUV) * _Color;
				o.Albedo = c.rgb;
				//金属
				o.Metallic = _Metallic;
				//平滑
				o.Smoothness = _Glossiness;
				//透明度
				o.Alpha = c.a;
			}
			ENDCG
		}
			//默认效果
			FallBack "Diffuse"
}
发布了134 篇原创文章 · 获赞 37 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/lengyoumo/article/details/103955860