高斯模糊与Compute Shader
模糊是游戏中常见的一种效果。模糊算法的一般做法是,对某一点的像素,将它与它周围的m*n个像素按照一定的权值累加起来,作为该点的新的像素值。
高斯模糊是指权值根据高斯方程来确定的模糊算法。
假设我们选择做一个1*5的高斯模糊计算,定义0为目标像素,则共有-2,-1,0,1,2五个像素点,它们的系数G(x)可以由以下的方程确定
Demo中实现的算法实际上是按照横向和纵向对同一点做两次1x11的模糊,所以可以完全拆分为两个部分,即横向和纵向。
代码部分我们先看Shader代码,以横向为例。
cbuffer cbFixed
{
static const int gBlurRadius = 5;
}
#define N 256
#define CACHE_SIZE (N+2*gBlurRadius)
groupshared float4 gCache[CACHE_SIZE];
[numthreads(N,1,1)]
void HorzBlurCS(int3 groupThreadID : SV_GroupThreadID,
int3 dispatchThreadID