UE4不使用屏幕后处理实现人物外轮廓描边效果
UE4不使用屏幕后处理实现人物外轮廓描边效果
项目涉及卡通渲染风格,需要人物描边效果,之前在网上有大量的通过post process volume来实现的描边效果,但是问题在于屏幕后处理无法控制只对特定对象生效。
post process volume的机制是:通过框调整作用范围,当相机进入范围内显示后处理效果(这种效果还是全屏的,只是进入范围内才生效)因此放弃后处理,改为在人物材质上直接描边。
直接描边大概思路是:
在一个模型上添加两个mesh.第一个mesh正常显示材质效果,第二个mesh用来实现描边效果。
1、这里就用一个cube来展示效果了,先创建cube,随便给了个颜色:
2、为这个cube再添加一个static mesh组件,可以命名为outline_mesh,避免后面贴材质分不清。别忘了在mesh组件里赋上模型的同样的mesh文件:
3、建好mesh,就可以来连描边的材质了,连线图如下:
4、这种描边存在一个问题,就是描边效果是基于模型的,描边的粗细会随相机的远近存在一个近大远小的效果,这里我利用模型和相机的距离来对Shell width进行补充,离得越近,补充的值越小,离得越远,补充的值越大,修改后的材质如下:
获取相机和模型在世界坐标系下的位置(Camera positionWS和Object position),通过distance计算距离,这里只取0-100,因为太远了描边效果几乎看不见了不需要考虑,然后映射到0-1的范围内,把这个距离作为底数,设置power值控制强度(直接乘以一个参数的线性效果不太好,我需要越远补充效果越强的效果),然后再乘上一个参数控制强度值,加到原来的宽度上。
当距离为0时,补充效果为0,宽度为原始宽度,当距离为100或更高时,补充效果最大。对于参数的调节暴露给美术小哥,他们根据效果来调就OK啦。
最后上个效果图(Cube效果确实不明显,换个sphere吧):