Unity Shader学习:噪声图、GrabPass
关于噪声图和GrabPass还是比较简单的,详细原理可以看puppet_Master大神原文,这里简单的实现联系下。
shader部分:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61Shader "Custom/GrabPassTest" { Properties{ _NoiseTex("NoiseTex",2D)="white"{} //扭曲偏移系数 _DistortFactor("DistortFactor",Range(0,1))=1 //时间速度系数 _DistortTimeFactor("DistortTimeFactor",Range(0,1))=1 } SubShader{ ZWrite Off //获取屏幕图像 GrabPass{ "_GPTex" } Pass{ Tags{ "Queue" = "Transparent" } CGPROGRAM //申明GrabPass sampler2D _GPTex; float4 _GPTex_ST; sampler2D _NoiseTex; float4 _NoiseTex_ST; float _DistortFactor; float _DistortTimeFactor; #include "UnityCG.cginc" #pragma vertex vert #pragma fragment frag struct v2f { float4 pos:SV_POSITION; float4 grabPos:TEXCOORD1; float2 uv:TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); //计算GrabPass的位置,xy输出pos转化到(0,1)区间,zw输出pos的zw o.grabPos = ComputeGrabScreenPos(o.pos); o.uv = v.texcoord; return o; } float4 frag(v2f i) :SV_Target{ //偏移=噪声随时间偏移采样的rg通道 float4 offset = tex2D(_NoiseTex,i.uv - _Time.xy*_DistortTimeFactor); //GrabPass采样的位置直接加个偏移 i.grabPos.xy -= offset.xy*_DistortFactor; //给采样点左边进行一次投影变换 //猜测基本相当于把grabPos当作(01)区间的uv进行采样,然后投影到屏幕上 float4 color = tex2Dproj(_GPTex,i.grabPos); return color; } ENDCG } } }
最后
以上就是单纯中心最近收集整理的关于Unity Shader学习:噪声图、GrabPassUnity Shader学习:噪声图、GrabPass的全部内容,更多相关Unity内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复