由于游戏死亡时一般都需要屏幕抖一下下. 所以百度了下相关写法,发现方法很多~~~ 找来找去,找到个简单粗暴地,啥都不需要,一个脚本拖动到Camera上就可以了 略微修改了一点点,share一下 using UnityEngine; using System.Collections; public class ShakeCamera : MonoBehaviour { // 震动标志位 private bool isshakeCamera = false; // 震动幅度 public float…
屏幕后效果指的是,当前整个场景图已经渲染完成输出到屏幕后,再对输出的屏幕图像进行的操作. 在Unity中,一般过程通常是: 1.建立用于处理效果的shader和临时材质,给shader脚本传递需要控制的参数和变量 2.利用OnRenderImage函数抓取当前屏幕渲染纹理 OnRenderImage(RenderTexture source, RenderTexture destination){  } 第一个参数为处理前纹理,第二个为最终显示纹理 3.在OnRenderImage函数中调用Gr…
关于屏幕后效果的控制类详细见之前写的另一篇博客: https://www.cnblogs.com/koshio0219/p/11131619.html 这篇主要是基于之前的控制类,实现另一种常见的屏幕后效果——边缘检测. 概念和原理部分: 首先,我们需要知道在图形学中经常处理像素的一种操作——卷积. 卷积操作的实质在于,对于图像中的每个像素与其周围的像素进行的重新融合计算行为,以得到不同的像素处理效果,例如锐化图像,模糊图像,检测边缘等. 卷积操作通过不同的像素融合算法能得到各不相同的效果,这主…
Unity内置的雾效需要在每个shader中分别编写,造成了极大的不便.这里利用屏幕后处理产生可单独控制且自由度更高的雾效. 屏幕后雾效的本质在于,通过深度纹理重构出每个像素在世界空间中的位置,根据得到的世界坐标计算出雾效系数,最后利用雾效系数与雾的颜色相乘并与原始颜色进行插值运算得出最终效果. float3 afterFog=f*fogColor+(1-f)*origColor; 上面的插值运算中f代表雾效系数, 它有多种计算方法: 1.线性运算: f=(dmax-Abs(z))/dmax-d…
景深效果的原理是,在摄像机的近裁剪平面和远裁剪平面之间可以设置一个焦距,在这个距离所在的平面上的物体最为清晰,而这个距离之前或之后的物体成像是一种模糊状态(根据距离逐渐模糊,最终达到最为模糊的状态). 在shader中,需要一张清晰的场景图和一张模糊的场景图,可以通过每个像素相对焦距的距离来判定这个像素最终的清晰程度.在清晰图和模糊图之间做关于深度变化的插值运算. 关于摄像机的近裁剪平面和远裁剪平面,可以直接在Camera组件的属性面板中调节(默认的远裁剪平面距离是1000): 模糊图可以直接采…
高斯模糊是图像模糊处理中非常经典和常见的一种算法,也是Bloom屏幕效果的基础. 实现高斯模糊同样用到了卷积的概念,关于卷积的概念和原理详见我的另一篇博客: https://www.cnblogs.com/koshio0219/p/11137155.html 通过高斯方程计算出的卷积核称为高斯核,一个5*5的高斯核对它进行权重归一化如下: 0.0030 0.0133 0.0219 0.0133 0.0030 0.0133 0.0596 0.0983 0.0596 0.0133 0.0219 0.…
速度映射图主要是为了得到每个像素相对于前一帧的运动矢量,其中一种方法是使用摄像机的深度纹理来推导. 推导过程如下: 先由深度纹理逆推出NDC(归一化的设备坐标)下的顶点坐标,利用VP矩阵(视角*投影矩阵)的逆矩阵反向变换出每个像素在世界空间中的位置, 再利用世界空间下的坐标与前一帧的VP矩阵顺向变换出前一帧的NDC坐标,利用NDC下前一帧和相当帧的坐标差来确定速度的方向, 最后利用速度的方向对纹理采样的结果进行加权平均并多次绘制,以达到带有物体运动方向的模糊效果. 基于这一原理,需要准备的要素有…
Bloom的原理很简单,主要是提取渲染图像中的亮部区域,并对亮部区域进行模糊处理,再与原始图像混合而成. 一般对亮部进行模糊处理的部分采用高斯模糊,关于高斯模糊,详见之前的另一篇博客: https://www.cnblogs.com/koshio0219/p/11152534.html 计算方法: 总共需要用到4个Pass,它们的顺序如下: Pass 1:得到纹理的亮度值(灰度值),由此计算出亮部区域,传递给一个临时的新纹理,这里叫_Bloom Pass 2,3:单独对_Bloom进行高斯模糊(…
Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063.html 如代码如下: 基类: using UnityEngine; [RequireComponent(typeof(Camera))] public abstract class PostEffectRenderer : GameBehaviour { protected abstract s…
建立一个基本的屏幕后处理脚本系统 屏幕后处理,顾名思义,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效.使用这种技术,可以为游戏画面添加更多艺术效果,例如景深.运动模糊等. 因此,想要实现屏幕后处理的基础在于得到渲染后的屏幕图像,即抓取屏幕,而Unity为我们提供了这样一个方便的接口OnRenderImage函数.它的函数声明如下: MonoBehaviour.OnRenderImage(RenderTexture src,RenderTexture de…