UE4透视描边实现

参考https://www.tomlooman.com/the-many-uses-of-custom-depth-in-unreal-4/

原理:

描边:

1.原始图像灰度化,R=G=B的值叫灰度值,平均值法,最大值法,加权平均值法

2.边缘检测:原图灰度化后,取当前像素位置相邻\相连的左右、左上左下右上右下八个方向的像素颜色之和为当前像素颜色,原理就是经过这样计算后,边缘部分灰度值会显著的突变,从而和自定义一个阈值判断比较,输出0或1,得到边缘图像。

透视:

使用后处理特效材质和模板深度值,把需要描边模型设置模版值(可自定义的),写到模板缓冲,通过在材质中判断模板值(模版测试),当前像素是否需要透视描边,然后和边缘图像,原始图像合成得到描边效果。

步骤

1.引擎

Engine->Rendering->Postprocessing->Custom Depth-Stencil Pass设定为Enabled

UE4透视描边实现

2.设置角色的模型模板值(自定义2),标志哪些物体需要透视描边,渲染时候把标志物体写到模版缓冲;在蓝图模型属性栏Rendering下找到

UE4透视描边实现

可以通过代码设置,如下在角色类获取模型,进行代码设置
   GetMesh()->SetRenderCustomDepth(true);
   GetMesh()->SetCustomDepthStencilValue(2);

3.通过编辑器视图可见,依次查看Lit > Buffer Visualizer > Custom Stencil。
还通过渲染目录下网格的编辑菜单,来启用自定义深度或改变模板索引。
           

4.后处理材质蓝图实现,请下载https://download.****.net/download/luomogenhaoqi/11004790

5.后处理材质蓝图部分节点解释

图一红圈节点表示输入灰度图颜色

UE4透视描边实现

图二获取当前模版缓冲颜色值,表示标志模板值物体写到这里获取

UE4透视描边实现

图三和图四,获取灰度图的R作为水平X,获取灰度图的G作为水平Y,以当前(R,G)组成当前灰度,在对其点(当前点为原点)相邻\相连的左右、左上左下右上右下八个方向操作输出叠加之和,分别使用ScreenPosition获取当前UV和其添加得道偏移值,在输入模板缓冲SceneTexture:CustomStencil节点获取到当前偏移后的颜色值。

UE4透视描边实现颜色

 

UE4透视描边实现

图五通过BitMask(参考https://www.cnblogs.com/zhaoshujie/p/9797802.html),该节点输入模版缓冲颜色值R除以255求得所需位掩码BitMask,在和模板值2作为Bit,最终满足模版值等于2,输出1,否则输出0

UE4透视描边实现

 

图六最终当前点相邻\相连的左右、左上左下右上右下八个方向操作输出灰度颜色叠加之和后,在减去一个参数值(模板值2乘以8,可以自定义参数值合适为止),得到的值取绝对值,在输入到Clamp(范围设置0到1),Clamp输出大部分都是1,此时相当于阈值;输入出灰度颜色叠加之和模版缓冲输出颜色相乘已增强边缘,在和Clamp相乘得到边缘颜色。

 

UE4透视描边实现