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
2.设置角色的模型模板值(自定义2),标志哪些物体需要透视描边,渲染时候把标志物体写到模版缓冲;在蓝图模型属性栏Rendering下找到
可以通过代码设置,如下在角色类获取模型,进行代码设置
GetMesh()->SetRenderCustomDepth(true);
GetMesh()->SetCustomDepthStencilValue(2);
3.通过编辑器视图可见,依次查看Lit > Buffer Visualizer > Custom Stencil。
还通过渲染目录下网格的编辑菜单,来启用自定义深度或改变模板索引。
4.后处理材质蓝图实现,请下载https://download.****.net/download/luomogenhaoqi/11004790
5.后处理材质蓝图部分节点解释
图一红圈节点表示输入灰度图颜色
图二获取当前模版缓冲颜色值,表示标志模板值物体写到这里获取
图三和图四,获取灰度图的R作为水平X,获取灰度图的G作为水平Y,以当前(R,G)组成当前灰度,在对其点(当前点为原点)相邻\相连的左右、左上左下右上右下八个方向操作输出叠加之和,分别使用ScreenPosition获取当前UV和其添加得道偏移值,在输入模板缓冲SceneTexture:CustomStencil节点获取到当前偏移后的颜色值。
颜色
图五通过BitMask(参考https://www.cnblogs.com/zhaoshujie/p/9797802.html),该节点输入模版缓冲颜色值R除以255求得所需位掩码BitMask,在和模板值2作为Bit,最终满足模版值等于2,输出1,否则输出0
图六最终当前点相邻\相连的左右、左上左下右上右下八个方向操作输出灰度颜色叠加之和后,在减去一个参数值(模板值2乘以8,可以自定义参数值合适为止),得到的值取绝对值,在输入到Clamp(范围设置0到1),Clamp输出大部分都是1,此时相当于阈值;输入出灰度颜色叠加之和模版缓冲输出颜色相乘已增强边缘,在和Clamp相乘得到边缘颜色。