DirectX11 使用计算着色器实现高斯模糊

高斯模糊,是一种使画面产生朦胧感的技术。在游戏中也可以可以经常看见使用高斯模糊的技术:

这里写图片描述

(《赛达尔传说:荒野之息》中对游戏背景使用高斯模糊,就将我们的主角们与背景分离出来,形成了前景、背景两个层面)

这节我们就来学习下如何使用DirectX11的计算着色器来实现高斯模糊。

一、计算着色器(Compute Shader)

如下图所示,计算着色器不属于渲染管线的一部分,但是计算着色器可以读写渲染管线。

这里写图片描述

计算着色器的计算能力和处理器数量有关,比如如果你的GPU有16个多处理器,那么就可以开启16个线程组。每个线程组,可以有n个线程。NVIDIA显卡基于SIMD32,n必须是一个warp(即32)的倍数。而ATI显卡是基于一个wavefront(即64)的倍数。一个线程组可以互相共享内存,而且等待每个线程同步,但是不同线程组是没有该能力的。

二、高斯模糊计算原理

可以这样通俗地描述,高斯模糊就是对每个像素点综合周围的像素点进行混合,最终产生模糊的像素点。

例如对于某个点pij会有如下图综合周围像素点的计算。而且需要一个权重矩阵(Weight Matrix),该矩阵对应着其周围像素的颜色贡献比例(而且所有权加起来必须等于1,大于1会过亮,小于1会过暗)。

这里写图片描述

对于高斯模糊的算法,我们可以用这样一个严谨的数学形式来描述它(说白了,其实就是我上面说的那段话,不需要害怕数学公式):

这里写图片描述

好了,有了这样一个基本的高斯模糊思路之后,后面的内容就是主要围绕着如何实现这个算法。

那周围的像素和自身的像素应该如何贡献呢?我们可以自己想想,应该自身的像素贡献最大(否则模糊后连基本的轮廓都认不出来),因此就需要引入一个高斯分布函数(其实就是高中学的正态分布函数)来计算权值:

这里写图片描述

这里写图片描述
(正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。)

有没有发现上面的高斯分布函数是一维的?但是我们的图像是二维的,权重矩阵也是二维

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值