【Shader】使用Unity创建水流岩浆等流动效果

来源:互联网 发布:淘宝网老年人秋季上衣 编辑:程序博客网 时间:2024/04/30 02:11
Shader "Custom/Stream" {Properties {        _MainTex ("Albedo (RGB)", 2D) = "white" {}        _MainTint ("Diffuse Tint", Color) = (1,1,1,1)_ScrollXSpeed ("X Scroll Speed", Range(0,10)) = 2_ScrollYSpeed ("Y Scroll Speed", Range(0,10)) = 2}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM// Physically based Standard lighting model, and enable shadows on all light types        #pragma surface surf Standard fullforwardshadows// Use shader model 3.0 target, to get nicer looking lighting#pragma target 3.0        // 将类型转换到CG中的可用类型sampler2D _MainTex;        fixed4 _MainTint;        fixed _ScrollXSpeed;        fixed _ScrollYSpeed;        // 读取模型数据的结构体,名字有些迷惑人struct Input {float2 uv_MainTex;};        // inout类型是一个输出数据的类型,顶点着色器处理好数据之后传递给片段着色器        // 就是通过inout修饰的参数来传递的,也就是说inout修饰的类型是提供给片段着色器进一步渲染的     void surf (Input IN, inout SurfaceOutputStandard o) {                    // 先将UV坐标保存起来(这个值的类型是float2或者fixed2都可以)            float2 scrolledUV = IN.uv_MainTex;            // 可以根据自己的需求来决定滚动方向,此处为xy两个方向偏移            // _Time:是基于Unity的系统内置的时间变量            fixed xScrollValue = _ScrollXSpeed * _Time;            fixed yScrollValue = _ScrollYSpeed * _Time;            // fixed2(x,y):这个就不用过多解释了,将xy合并成一个二元的数据类型            scrolledUV += fixed2(xScrollValue,yScrollValue);            // tex2D(sampler2D,fixed2)官方定义叫:二维纹理查询            // 给出一张图和纹理坐标计算出颜色half4 c = tex2D (_MainTex, scrolledUV)* _MainTint;o.Albedo = c.rgb;o.Alpha = c.a;}ENDCG}FallBack "Diffuse"}