原理
利用深度纹理在片元着色器中为每个像素计算其在世界空间下的位置,使用前一阵的视角*投影矩阵对其进行变换,得到该位置在前一阵中的NDC坐标。然后,计算前一阵和当前帧的位置差,生成该像素的速度.
脚本实现:
using UnityEngine;
using System.Collections;
public class MotionBlurWithDepthTexture : PostEffectsBase
{
public Shader motionBlurShader;
private Material motionBlurMaterial = null;
public Material material
{
get
{
motionBlurMaterial = CheckShaderAndCreateMaterial(motionBlurShader, motionBlurMaterial);
return motionBlurMaterial;
}
}
private Camera myCamera;
public Camera Camera
{
get
{
if (myCamera == null)
{
myCamera = GetComponent<Camera>();
}
return myCamera;
}
}
[Range(0.0f, 1.0f)]
public float blurSize = 0.5f;
private Matrix4x4 previousViewProjectionMa