我是靠谱客的博主 单纯中心,最近开发中收集的这篇文章主要介绍Unity Shader学习:噪声图、GrabPassUnity Shader学习:噪声图、GrabPass,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Unity Shader学习:噪声图、GrabPass
关于噪声图和GrabPass还是比较简单的,详细原理可以看puppet_Master大神原文,这里简单的实现联系下。
shader部分:
Shader "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 Shader学习:噪声图、GrabPassUnity Shader学习:噪声图、GrabPass所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复