博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
暗夜之枪水面shader
阅读量:5124 次
发布时间:2019-06-13

本文共 1926 字,大约阅读时间需要 6 分钟。

Shader "MADFINGER/FX/Anim texture" {

Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _NumTexTiles("Num tex tiles",    Vector) = (4,4,0,0)
    _ReplaySpeed("Replay speed - FPS",float) = 4
    _Color("Color", Color) = (1,1,1,1)
}
SubShader {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    
    Blend One One
    Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
    CGINCLUDE
    #include "UnityCG.cginc"
    sampler2D _MainTex;
    
    float4    _Color;
    float4    _NumTexTiles;
    float        _ReplaySpeed;
    float        _Randomize;
    
    struct v2f {
        float4 pos : SV_POSITION;
        float4 uv : TEXCOORD0;
        fixed4 col: COLOR;
    };
    float2 Rand(float2 ij)
    {
        const float4 a = float4(97.409091034f,54.598150033f,56.205410758f,44.687805943f);
        float4 result  = float4(ij,ij);
        for(int i = 0; i < 2; i++)
        {
            result.x = frac(dot(result, a));
            result.y = frac(dot(result, a));
            result.z = frac(dot(result, a));
            result.w = frac(dot(result, a));
        }
        return result.xy;
    }
    
    v2f vert (appdata_full v)
    {
        v2f o;
        
        float        time            = (v.color.a * 60 + _Time.y) * _ReplaySpeed;
        float        itime            = floor(time);
        float        ntime        = itime + 1;
        float        ftime            = time - itime;
        
        float2    texTileSize = 1.f / _NumTexTiles.xy;        
        float4    tile;
#if 0
        if (_Randomize > 0)
        {
            itime = floor(Rand(itime) * 1000);
            ntime= floor(Rand(ntime) * 1000);
        }
#endif
        #if 1
        tile.xy = float2(itime,floor(itime /_NumTexTiles.x));
        tile.zw= float2(ntime,floor(ntime /_NumTexTiles.x));
        #endif
        
        
        tile = fmod(tile,_NumTexTiles.xyxy);
        
        o.pos= mul(UNITY_MATRIX_MVP, v.vertex);
        o.uv    = (v.texcoord.xyxy + tile) * texTileSize.xyxy;
        o.col    = float4(_Color.xyz * v.color.xyz,ftime);
        
        
        return o;
    }
    ENDCG
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_precision_hint_fastest        
        //fragmentoption is OpenGL Only
        fixed4 frag (v2f i) : COLOR
        {
            return lerp(tex2D (_MainTex, i.uv.xy),tex2D (_MainTex, i.uv.zw),i.col.a) * i.col;
        }
        ENDCG
    }    
}
}

设置参数:

转载于:https://www.cnblogs.com/U-tansuo/archive/2013/04/08/unity3d_shader_water.html

你可能感兴趣的文章
NAT地址转换
查看>>
一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密
查看>>
C#数组的合并拆分
查看>>
[转帖]什么是α射线、β射线、γ射线
查看>>
SQL Server执行计划那些事儿(3)——书签查找
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
ubuntu下sogou突然不能用
查看>>
Linux 普通用户拿到root权限及使用szrz命令上传下载文件
查看>>
联合体union
查看>>
人物角色群体攻击判定(一)
查看>>
JavaWeb学习过程 之c3p0的使用
查看>>
MySql Delimiter
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
使用客户端对象模型读取SharePoint列表数据
查看>>
POJ 1328 Radar Installation 贪心
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
django的url控制系统
查看>>
poj 1753 Flip Game
查看>>
动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )
查看>>