UE4中后处理描边效果实现与分析(二)(Outline Post Process)
前言
本篇文章将阐述如何使用自定义深度进行模型边缘划分。自定义深度介绍,请参照之前的文章进行学习(传送门)。建议各位创建个项目进行试验,这样更容易理解文章中介绍的内容。
对于图形学中,分析图像边缘,最常用的莫过于Sobel算子(索贝尔算子)。百科中的介绍非常清楚,但是理解起来可能稍微有一些难度,那么本篇博文将从最简单的方向进行详细阐述,如何进行图像边缘识别。
Sobel算子中提到了一个非常重要的概念,就是权重划分概念。这种方法,对于边缘的识别更加的清晰明确。我们这里不选用卷积算法(请自行百科),而是直接采用深度信息权重加成方式,进行边缘识别。这样更容易理解!
分析
在后处理中,我们将会得到一张渲染图像,那么如果我们抽取其中的像素深度进行剖析,从之前的文章我们可以得出如下验证结果
- Render中勾选了自定义深度通道不做的物体,最终会获取到深度信息记录(距离摄像机距离)
- 未被勾选自定义深度通道的物体,将会被标记为深度信息无穷大的值
通过这个结果,我们可以简化三维图像到二维图像中,并将渲染的图形设定为正方形,将会得到如下的图像深度信息表,参照图一
我们对图一进行简要说明,其中橙色部分为渲染矩形并勾选了自定义深度通道,其他部分为普通渲染信息。10表示渲染像素距离摄像机为10个单位,n表示无穷大距离,每个方格代表一个渲染像素单位。
注意:这张图中,橙色区域距离相机距离是相同的,但是如果距离不同也是没有问题的,也就是值不为10也是可以的,但是必须是小于n,因为橙色部分的图形是被勾选自定义深度信息记录了,n是无穷大,有距离,那么距离应该不会无穷大。
进行图像边缘划分
通过图一,我们进行矩形边缘识别,那么他的边缘应该是图二中底色为橙色的区域圈选出来的部分
那么我们将要处理的问题是:
- 如何将底色是橙色的部分划分出来
- 借助已有数据信息进行逻辑划分
- 不能过份踢除距离边缘过远的区域
处理
如果我们采用权重划分,即处理过程是为当前像素划分权重,借助像素上下左右,左上,左下,右上,右下距离摄像机的距离之和当作权重值,如图三处理方案
其中蓝色底色的四周被用红色线框划分,最后,他的权重为n+n+n+n+n+10+10+10,最后等于5n+30
我们使用上面的权重划分规则,进行整张图像中的像素格子权重划分,将得到图四中的图像结果。
如果您仔细观察,会发现,在图二中被标记出来的边缘内部,即图四中底色为白色的区域,他们的权重值为不包含n的值,其他区域均包含n。
回顾下
进行域划分
我们在得到上面的结果后,左右两图进行同样的运算操作,假设n为1000,我们将n带入上面的图形,依次进行计算减去100,圈定值域到0-1,将会得到下面的计算结果
接下来我们将使用图六中的两张图进行边缘拾取操作,将图六中的右图进行1减操作,将会得到下图结果
此时,我们将图六中的左图,与图七进行相乘计算,将会得到一张我们想要的图
至此,我们已经将图像中的边缘部分提取完成
总结
- 进行权重获取,通过权重进行值域划分
- 将得到的权重值图,与原自定义深度图进行运算
- 运算过程减去一个数,圈定范围,一减取反,相乘
好了,本篇文章到此结束,我们将在下一篇文章中介绍如何使用这篇文章中的知识,进行实际操作。谢谢大家~