图形卷积相关

一开始听到这个名词的时候觉得是个特别遥远的数学名词,后来理解发现当我还不知道它的时候我已经在用了,其实说来也简单,在采样某个像素的贴图时,将当前像素与周围像素按照一定比例叠加到一起,最终就得到一个新的像素颜色,最简单的用途就是模糊了。开个坑记录一下,我用到或知道的一些卷积核

高斯模糊

首先是高斯模糊,它满足正态分布,具体正态分布的公式我也忘了,所以直接给出最后的推导结果。这里σ我们自己定,值越大它模糊效果越强,然后我们根据这个公式做一个3x3的算子,计算出来的算子全部加起来不等于1,我们需要执行归一化,让他们全部加起来为1,然后直接投入使用就好了。查了下资料二维的可以降成两个一维的,将n*m的复杂度降到n+m,没仔细看,看起来是用在CPU计算图形像素时优化,横向计算一次,纵向计算一次。因为我主要是GPU计算,直接计算n*m吧,没研究过不确定2个DrawCall划不划得来。忘了在哪看到过,当σ越大时用对应大小的卷积核可能效果更好,不过太大的卷积核性能消耗越大,所以一般用3x3达到效果就行

图片引用自https://www.jianshu.com/p/8d2d93c4229b,文章一开始还介绍了一些卷积核,因为我暂时没用过先Mark一下

热浪扭曲效果

一般我都用这个做模糊效果,因为一开始我是看别人代码学会的这个,然后一直用到现在,效果还不错,所以我都没怎么学高斯模糊。然后来说说怎么用,下面的数组指的是xy的偏移,意味着包括自身和这12个位置,每个像素总共要采样13个像素,网上他们的权值各是1/13,我自己用的是其他占1/15,中心像素占了3/15。没有为什么,看别人就是这么写的,所以我也就这么用了,总归也只是更偏向中心像素而已

Sobel算子

其实这个东西主要是检测颜色变化,如果是只想画模型外轮廓的话还是会描出模型身上上一些东西的轮廓的。那么来说说是怎么计算的,一种是将图像像素转成灰度图的像素,这样整张图片每个像素就是一个浮点数了,套第一个矩阵计算出Gx,套第二个矩阵计算出Gy,然后用下面公式算出G之后,画出来就是一张描边图片,可以将值为0弄成背景色,非0的地方画描边色,这样就算有描边效果了。还有一种方式是直接那颜色去算Gx和Gy,最后算G的时候其实会将颜色转成浮点数,我看别人shader里直接用sqrt(Gx*Gx + Gy*Gy),这里Gx和Gy都是颜色,然后将计算结果赋值给了浮点数变量,然后用它去跟背景色和描边色插值。

测了下感觉画出来挺丑的,最好还是用深度图去算描边,而不是用FrameBuffer去算,灰度图还是挺不靠谱的。而深度图的话物体所在的像素深度基本一致,那样的话轮廓边比较分明。把深度值直接用算子去算就行了。

https://blog.csdn.net/SittingAtThisMoment/article/details/83716251 可以参考这篇文章就是用的深度图去算的描边

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值