虚幻引擎中文直播第19期(后处理基础)技术点总结

后处理技术点总结

说明:总结了下“月神”的第19期中文虚幻直播:“后期材质基础(上)”的讲解的知识点,做一下记录和学习。

直播视频录播地址:https://www.bilibili.com/video/BV1Pk4y1R7MN

1.知识点

1.Blendpositioin:后处理运算的时间切入点,是发生Tonamapping之前还是之后,使用before,可有效避免因与引擎后处理重复采样(个人猜测是这个原因)导致的闪烁问题。

2.CheapContrast:对比度,可简单理解为黑的更黑,白的更白,减少中间灰色的区域,一般用于控制0-1的过度情况。

3.Saturate:与clamp类似,输出0-1,用于过滤超过1的值,一般使用此值后,再配合一个乘数,用来制定一个最大阈值。

4.UE4的景深是使用Scenedepth实现的。

5.简单点可以把后处理理解成一张图,不过这张图里边存了很多的场景信息在各个通道里面,利用这些信息设定完结果后,与引擎渲染图进行混合。延迟渲染引擎好处就是这样,可针对某一个图层调整很多参数。

效果

1.简单雪材质|WorldNormal

 

后处理中,使用worldnormal,Mask(B),得到一张只有顶面为白色mask图,围绕这张图进行计算即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

具体连接节点如下图:

 

其他说明:WorldPosition除以X后,然后取小数(0-1),可得到宽度为X的平铺块(暂时没想到有什么用)。

 


 

2.简单自定义雾|SceneDepth

 

 

材质节点如下图,可控制距离、浓度、颜色。利用深度图计算出一张mask,lerp一张颜色贴图和SceneTexture即可。

 


 

 3.使用曲线设置多颜色雾|CurveAtlas|CurveLinerColor

不同距离,可设置不同雾的颜色。

 

资源准备:建立线性颜色曲线和曲线资源集,将曲线添加到曲线集。

用法和MFC(材质参数集)类似。

 

 

材质面板搜索CurveAtlasRowParameter,将上一步建立的曲线资源放进去即可。

 

 

节点连接如下图,使用场景深度图作为一张mask,输入CurveAtlas,混合曲线颜色,然后再与SceneTexture混合。

 


 

 3.玻璃流水效果|UV动画|Panner|TexCoord计算

效果如下图。

 

技术点:TexCoord减去Mask(R,G)后,会偏移整个屏幕,造成像素类似被拉伸的效果。

效果如下图,当TexCoord(0-1)加上(0.5,0.5,0,0),屏幕就被分成了四份。偏移值每增加0.1,屏幕就是偏移10%。

 

利用这一特性,可使用一张法线的RG信息,加上panner,达到类似流水的效果。见上上张图。效果

 

 


4.类似径向模糊效果|DitheremporaAA(生成噪点函数)|TexCoord计算

效果如下图,屏幕中心到边缘逐渐被模糊,类似径向模糊。这里只是演示一下,当然这种径向模糊肯定是不能用的,还需要很多优化,比如添加中心非模糊区域半径参数等。

 

 

材质参数节点如下图。之所以从屏幕中心向外围模糊,还是利用了和案例3中一样的原理,UV偏移。

 

 

 

 

利用UV偏移,其实可以生成较多的蒙版图,

生成大小、渐变可控的圆形蒙版

 

 

生成左右或者上下的方形蒙版,当然也可以生成正方形的蒙版。

 


 

5.DDX,DDY描边效果

太过简单粗暴,效果不理想,且较多闪烁。

 


 

6.使用WorldNormal设置描边效果

原理:计算相邻两个法线之间的距离(物体边缘处、转折处两个法线之间的距离是很大的,当处在同一平面上的时候,距离为0),根据距离生成mask,然后把SceneTesture和描边颜色进行lerp,就得到描边效果。

 简易版如下图,直接偏移另一个WorldNormal,求两者之间的距离,在进行lerp即可,当然这样效果不好,还需要进一步优化。

 

 经过优化完,

根据深度渐变,描边像素自动变小

量化描边效果的粗细程度

 

 这里边较重要的一个点是 “1除以Visible Resolution”,等于是把屏幕UV按照像素均分,设值为Sx(屏幕X方向,单位像素大小,Sy同理),Sx值乘以一个参数,即可具体量化描边的粗细程度。

另外,就是可以在最后自主添加一些钳制、或者对比对之类的参数进来,细调一些效果。


 


 

7.深度信息,制作描边效果|SceneTexture:SceneDepth

原理:利用对象的深度信息差,来生成mask,不同于法线差值,这个基本仅体现外轮过,对象上的具体细节体现的不明显,因为较近的平面,深度值其实差别不大。

效果及材质节点见下图,其实是把上一步的WorldNormal,换成SceneDepth就可达到这种效果。

 

 

 另外,还可以采样多次,这封装成一个采样函数,然后把深度信息的上下左右全采样完成,得出的描边效果更细腻准确。当然,相应的开销也会增加。

 

 


 

 完结(如果下周还更新的话,将另开一篇记录,否则篇幅太过长了)

 

posted on 2020-04-15 15:57  微笑的技术周边  阅读(774)  评论(0)    收藏  举报