我是靠谱客的博主 单纯中心,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部