Unity中使用Shader制作雨中的玻璃窗学习笔记

本文介绍了在Unity中使用Shader制作雨中玻璃窗的效果,包括如何使背景模糊模拟雾气、处理玻璃透明度,以及手写模糊算法。通过调整纹理的Mip Maps和Filter Mode实现背景模糊,利用GrabPass截屏并处理透明度问题,最后讲解了自定义模糊算法来增强视觉效果。
摘要由CSDN通过智能技术生成

Unity中使用Shader制作雨中的玻璃窗学习笔记


https://www.youtube.com/watch?v=EBrAdahFtuo 观看油管大神的教程后的笔记。
在这里插入图片描述

使背景变得模糊,模拟雾气

  1. 纹理的Inspector面板中,勾选Generate Mip Maps,会生成八个MipMaps,具有不同的细节度。
  2. tex2Dlod(_MainTex,float4(x,y,z,w));该纹理采样函数中,除了uv以外,还可以控制细节等级,和偏移 ,w控制细节。
  3. 纹理的Inspector面板中的Filter Mode,表示当纹理被三维变换拉伸时如何被过滤。其中有三个选项:Point无过滤器,Bilinear当近距离看时变模糊,Trilinear 比Bilinear多一条在不同的Mip Level之间也模糊。就是模糊的等级更多了,有无级变速的感觉。

使玻璃变得透明

  1. 在SubShader中添加GrabPass{"_GrabTexture"},意为截屏,存储起来使用。效果如下有两个问题:1、和后方的背景衔接不正确 2、无法显示后方的游戏对象,原因为unity默认为靠近摄像机的先渲染。
  2. 问题1:在V2F结构中添加变量float4 grabUv : TEXCOORD1;,在顶点着色器中添加语句o.grabUv = UNITY_PROJ_COORD(ComputeGrabScreenPos(o.vertex));
    float4 UNITY_PROJ_COORD( float4 )输入一个四分量的向量,返回适合纹理采样的坐标。
    float4 ComputeGrabScreenPos( float4 )输入剪辑空间的坐标,返回用于GrabPass的坐标。
    问题2:在SubShader的Tag中添加"Queue"=“Transparent”,告诉Unity这个对象是透明的,需要在最后渲染。

手写模糊算法

  1. 由于使用GrabPass得到的纹理无法使用Mipmap,通过对每一像素和周围像素迭代求平均值,实现模糊,这是最简单的模糊方法,但是代价高昂。
				//blur为模糊的程度以及水滴划过的地方没有雾气的遮罩
				float blur = _Blur * 7 * (1-drops.z);
				float2 projUv = i.grabUv.xy/i.grabUv.w;
                projUv+=drops
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值