效果: c# using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //编辑模式可见 [ExecuteInEditMode] public class TestImageEffect : MonoBehaviour { public Material EffectMaterial; // Start is called before the first fram…
高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加为1,因此e前面的系数实际不会对结果产生任何影响. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7238032.html 综上,公式简化为: G(x,y) = e-(x*x+y*y)/2 因此,高斯核计算代码如下: using System; namesp…
Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063.html 如代码如下: 基类: using UnityEngine; [RequireComponent(typeof(Camera))] public abstract class PostEffectRenderer : GameBehaviour { protected abstract s…
Bloom特效是游戏中常见的一种屏幕效果.这种特效可以模拟真实摄像机的一种图像效果,它让画面中较亮的区域“扩散”到周围的区域中,造成一种朦胧的效果. Bloom的实现原理很简单,首先根据一个阈值提取出图像中较亮的区域,把它们存储在一张渲染纹理中,再利用高斯模糊对这张渲染纹理进行模糊处理,模拟光线扩散的效果,最后再将其和原图像进行混合,得到最终的效果. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7243444.html 如实现代码如下: using U…
这里使用一种更高效地从深度纹理中重建世界坐标的方法. 首先计算摄像机的视锥体的四条射线向量进行线性插值,插值后的值便是该像素在世界空间坐标下到摄像机的方向. 然后通过与深度值相乘即可得到摄像机位置到该像素的向量,加上摄像机的位置则是该像素在世界空间中的位置. 转载请注明出处:https://www.cnblogs.com/jietian331/p/9443343.html c#代码: using UnityEngine; public class HighFog2 : PostEffectRen…
运动模糊,代码如下: using UnityEngine; public class MotionBlurRenderer : PostEffectRenderer { [Range(0.1f, 0.9f)] [SerializeField] float m_blurAmount = 0.1f; RenderTexture m_accumulationTexture; void OnDisable() { DestroyImmediate(m_accumulationTexture); } pr…
均值模糊,也使用卷积来实现,之不过卷积中每个值均相等,且相加等于1. 代码如下, 子类: using UnityEngine; public class MeanBlurRenderer : PostEffectRenderer { protected override string ShaderName { get { return "Custom/Mean Blur"; } } } MeanBlurRenderer shader Shader "Custom/Mean B…
边缘检测的原理是利用一些边缘检测算子对图像进行卷积操作. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7232707.html 例如: 代码如下: using UnityEngine; public class EdgeDetectRenderer : PostEffectRenderer { [SerializeField] Color m_edgeColor; protected override void OnRenderImage(Render…
目录 Chapter3 Unity Shader 基础 Chapter3 Unity Shader 基础 概述 在Unity需要材质(Material)与Unity Shader配合使用来达到满意的效果. Unity Shader定义了渲染需要的各种代码(顶点着色器与片元着色器等),属性(使用哪些纹理)和指令(渲染和标签设置),我们通过材质调节这些属性,再赋给相应的模型. 材质:配合GameObject的Mesh或者Particle Systems组件来工作. Unity Shader: Sta…
线纹理的代码非常简单,但是我们有必要在这之前首先了解它们背后的实现原理. 深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值而是一个高精度的深度值.由于被存储在一张纹理中,深度纹理里的深度值范围是[0,1],而且通常是非线性分布的.那么,这些深度值是从哪里得到的呢?总体来说,这些深度值来自于顶点变换后得到的归一化的设备坐标(Normalized Device Coordinates, NDC).一个模型要想最终被绘制在屏幕上,需要把它的顶点从模型空间变换到齐次裁剪坐标系下,这是通…