学shader也有一段时间了 好久没有发博了后面会把中间学习的一些成果 包括效果和源码整理一下发出来 不是很喜欢解释很多 我会写很多注释 有什么问题欢迎评论区讨论
具体思路
计算深度值 然后得出每个顶点的ndc坐标
通过视角,投影的逆矩阵计算出每个顶点的世界坐标
计算上一帧和当前帧的顶点位置通过视角投影矩阵得出ndc坐标下的位置差
位置差相当于速度对它的相邻像素采样,去平均后得到一个模糊的效果
C#代码直接挂摄像机上 所以只有摄像机运动时才会有用 如果是物体运动就会出错
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
public class MotionBlurWithDepth : PostEffectsBase
{
public Shader Motionshader;
private Material motionMaterial = null;
public Material material {
get {
motionMaterial = CheckShaderAndCreateMaterial(Motionshader,motionMaterial);
return motionMaterial;
}
}
[Range(0f, 1f)]
public float blurSize = 0.5f;
private Camera myCamera;
public Camera _camera {
get {
if (myCamera == null)
myCamera = GetComponent<Camera>(