【Unity5.x Shaders】使用Shader制作河流效果

来源:互联网 发布:银行服务排名 知乎 编辑:程序博客网 时间:2024/05/24 05:57

感觉终于开始做一些有意思的Shader了。这次来学习如何通过更改UV值来滚动纹理以达到河流,瀑布等动画效果。

这是相关Shader代码

Shader "Custom/ScrollingShader" {    Properties {        _MainTint("Diffuse Tint",Color)=(1,1,1,1)        _MainTex ("Base (RGB)", 2D) = "white" {}        _ScrollXSpeed ("X Scroll Speed", Range(0,10)) = 2  //1        _ScrollYSpeed ("Y Scroll Speed", Range(0,10)) = 2    }    SubShader {        Tags { "RenderType"="Opaque" }        LOD 200        CGPROGRAM           #pragma surface surf Standard fullforwardshadows        #pragma target 3.0        struct Input {            float2 uv_MainTex;        };        fixed4  _MainTint;        fixed   _ScrollXSpeed;  //2        fixed   _ScrollYSpeed;        sampler2D   _MainTex;        void surf (Input IN, inout SurfaceOutputStandard o) {             fixed2 scrolledUV  =  IN.uv_MainTex ;  //3            fixed xScrollValue = _ScrollXSpeed * _Time;  //4            fixed yScrollValue = _ScrollYSpeed * _Time;            scrolledUV += fixed2(xScrollValue, yScrollValue);  //5            half4 c = tex2D (_MainTex,  scrolledUV);  //6            o.Albedo =  c.rgb * _MainTint;            o.Alpha = c.a;        }        ENDCG    }    FallBack "Diffuse"}
  1. 为了控制纹理流动的速度我们添加了两个新属性:X方向的速度和Y方向的速度,因为UV就是这两个方向的数据

  2. 在CGPROGRAM中添加上相应的变量

  3. 在我们使用tex2D()之前新建一个变量存储UV值

  4. 新建两个fixed,分别存储按时间缩放的UV的x和y值,这里使用了内置变量_Time
    Unity官方文档对内置变量的介绍:https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html
    Unity圣典:http://www.ceeger.com/Components/SL-BuiltinValues.html

  5. 得到最终的UV偏移

  6. 应用纹理和颜色

    书上的效果
    这里写图片描述

Tips

我使用书中的资源时直接把河流贴上面的时候河流变得很不自然,会觉得感觉河流被拉伸了
这里写图片描述

我们来看一下Material的Inspector面板
这里写图片描述

控制拉伸程度的是Tiling,它的值代表沿着XY轴平铺纹理的数量,如果使用它的默认值都为1的话,那就沿X,Y轴方向都只平铺一张纹理

注意:选中的这张纹理WrapMode必须设置成Repeat,否则你会看到更加拉伸的效果 (⊙﹏⊙)
这里写图片描述

这里我们将Material的Tiling的X,Y值分别设为1和7,这样一看效果好多了
这里写图片描述

1 0
原创粉丝点击