Grab Pass实现玻璃材质

一、GrabPass简单例子

Grab Pass技术,可以理解为屏幕截图,也就是将帧缓存抓出来一张贴图,并在当前物体或者后续渲染当中,复用这张帖图的技术。
在这里插入图片描述
代码如下:

Shader "TYX/07VFMat"
{
	Properties{
		_MainTex("Texture",2D)="white"{}
		_ScaleUVX("Scale X",Range(0,10))=1
		_ScaleUVY("Scale Y",Range(0,10))=1
	}
	
    SubShader
    {
		Tags{ "Queue"="Transparent" }
		GrabPass{}   //启用GrabPass
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
				float2 uv:TEXCOORD0;
            };

            struct v2f
            {
				float2 uv:TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _GrabTexture;
            sampler2D _MainTex;
            float4 _MainTex_ST;
			float _ScaleUVX;
			float _ScaleUVY;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv=TRANSFORM_TEX(v.uv,_MainTex);
				o.uv.x=sin(o.uv.x*_ScaleUVX);
				o.uv.y=sin(o.uv.y*_ScaleUVY);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_GrabTexture,i.uv);
                return col;
            }
            ENDCG
        }
    }
}

注意

1、代码中sampler2D _GrabTexture 是固定写法,不能改名称,在读取Grab中的图像时会用到。
2、上面的代码如果不加Tags{ “Queue”=“Transparent” },该物体就会无限次地获取帧缓存中的贴图,变成下面的效果
在这里插入图片描述
因为当他们都是Geometry绘制的时候,如果你先绘制了该物体,之后又绘制了兔子,帧缓冲里的内容就改变了,那么grab就会再次读取帧缓存的内容再次绘制,这样就会变成下面的套娃效果
GrabPass 通常用于渲染透明物体,尽管代码里并不包括混合指令,但我们往往仍然需要把物体的渲染队列设置成透明队列(即 “Queue”=“Transparent”)。这样才可以保证当渲染该物体时,所有的不透明物体都已经被绘制在屏幕上,从而获取正确的屏幕图像。

二、GrabPass实现玻璃扭曲效果

在这里插入图片描述
可以看出来兔子的顶点发生了扭曲效果

代码:

Shader "TYX/08Glass"
{
   
    Properties
    {
   
        _MainTex ("Texture", 2D) = "white" 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值