[小明学Shader]14.热扭曲效果

1.代码

Shader "AAAA/HeatIsland" {
Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _OffsetTex ("Shui (RGB)", 2D) = "white" {}
    _ClipTex ("Clip (RGB)", 2D) = "white" {}
    _Speed("速度",range(2,12))=12
    _Range("range",range(0,20))=10
}

SubShader {
    Pass {
        ZTest Always Cull Off ZWrite Off
        Fog { Mode off }

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"

uniform sampler2D _MainTex;
uniform sampler2D _OffsetTex;
uniform float _Speed;
uniform float _Range;

struct v2f {
    float4 pos : POSITION;
    float2 uv : TEXCOORD0;
};

v2f vert( appdata_img v )
{
    v2f o;
    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
    o.uv = v.texcoord;
    return o;
}

float4 frag (v2f i) : COLOR{
    float2 offset = i.uv;

    //噪声图的uv随着时间增长一直向下移动
    float2 offsetUV=float2(i.uv.x,i.uv.y-_Time.x*_Speed);
    //计算下移后的uv所对应的color
    float4 shuiColor = tex2D(_OffsetTex, offsetUV);
    //将MainTex的uv进行偏移
    offsetUV = offset + shuiColor.xy/_Range;

    return tex2D(_MainTex, offsetUV);
}
ENDCG

    }
}

Fallback off

}

2.效果

3.注意 

  扭曲的本质是UV偏移,便宜信息写在一张噪声图里而已.

时间: 2024-08-01 10:45:01

[小明学Shader]14.热扭曲效果的相关文章

[小明学shader高级篇----后期效果]1.Graphics的两个方法

一,介绍 Render to Texture即渲染到纹理的特性,是一种高级操作,利用这种特性,我们可以实现各种各样难以在普通渲染过程中实现的华丽效果. 想要做屏幕的后期效果,就必须使用Graphics的Blit和BlitMultiTap方法.和相机的Render,RenderWithShader方法的不同之处在于,Graphics的这两个方法都是在屏幕上又做了一个和屏幕大小一样的平面,对此平面

[小明学Shader]15.基于Grid的地形混合shader

1.写在前面 好久没有写博客了,最近面试不太顺利,认识到应该把学习心得或者说是结果都落实到博客上来,一来加深印象,二来有利于自我展示. 本片博客的内容是讲地形纹理混合,是关于手游sgl大地图的shader实现. slg大地图,如cok,是很大的.在渲染时,只渲染屏幕周围的一部分. 在渲染屏幕地形时,会提供一组地形数据,shader会根据地形数据对地形进行混合. 2.混合方法 混合使用的方法是非常常见的纹理混合. 基本原理是为shader提供多张可以选用的地形贴图.然后根据一张alpha贴图或者其

[小明学Shader]9.顶点方法(Vertex Function)和顶点色

渲染过程中,Shader总是优先对每个顶点进行计算(这里如果我们用顶点方法,那么我们的顶点方法就会被调用);顶点计算出后按照一定的格式输出给下面的流程,其中的某一步就是我们放置的surfa方法,它接收的输入可以进行一定的控制(我们将用顶点方法输出). 整个 shader 相关流程如下: 1. shader 准备对一个顶点进行计算.因我们自定义顶点方法,因此 vert 被调? 2. vert 的第一参数决定该顶点需要带进来哪些属性,我们得到这个属性里的顶点色,把这个顶点色放到 Input 结构中,

[小明学Shader]2.理解Shader和Material的关系

每一个Material都要选择一个使用的Shader.每一个Material都会存储自己的值 我们新建一个混色的Shader,再分别创建四个Material,其效果如下: Shader代码如下: Shader"Custom/11.25/2"{ Properties{ _Value("Cofficient",Range(0,10))=2.5 _AmbientColor("Ambient Color",color)=(1,1,1,1) _Emissi

[小明学Shader]4.自定义光照----RampTexture

上一篇讲了自定义光照的HalfLambert,这一次和它有些类似,但是计算的时候,不再用方向和atten相乘了. 将光入射方向与法相的点乘积HalfLam作为坐标,找到RampTexture中(HalfLam,HalfLam)点的rgb值作为混合值与s.的Albedo和入射光颜色相乘. 代码如下: Shader"Custom/11.26/2"{ Properties{ _RampTex("Ramp Texture",2D)="white"{} _

[小明学算法]4.Dijkstra(迪杰斯特拉)算法

1.定义概念 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.值得注意的是,该算法要求图中不存在负权边. 2.基本思想 设置顶点集合S,初始时,S中仅含有起始点,把从起始点到u且中间只经过S中顶点的路称为从起始点到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径的长度.Dijkstra算法每次从S外取出对应dist值最小的节点u,将其添加到S中,并对所有与u点直接相连

[小明学算法]5.常用排序算法

#include<iostream> using namespace std; void Print(int arr[], int length) { for (int i = 0; i < length; i++) { cout << arr[i] << " "; } cout << endl; } int partition(int a[], int low, int height) { cout << "

[小明学算法]6.字符串匹配算法---KMP

1.简介  字符串匹配就是看看那字符串b是不是字符串a的子串.常用的Knuth-Morris-Pratt 算法,又称KMP算法. 2.主要思想 当patter在某一位置与string匹配失败时,我们除了知道从string的这个位置进行匹配失败这个结果外,是否可以从前面的匹配中获得更多的信息呢.即当前匹配点匹配失败之后,向右滑动的距离是可以提前计算出来的. 3.举例 abcabcabcdef   --------- string abcabcdef         --------- patter

nyist oj 19 擅长排列的小明(dfs搜索+STL)

擅长排列的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长.现在需要你写一个程序来验证擅长排列的小明到底对不对. 输入 第一行输入整数N(1<N<10)表示多少组测试数据, 每组测试数据第一行两个整数 n m (1<n<9,0<m<=n) 输出 在1-n中选