1. 概念介绍
实现风格化渲染的一种技术就是使用cel shading
(或者说toon shading
)。这种技术模仿了卡通和动画中通常使用的渲染。
Cel shading
是当你渲染时,使用多个颜色波段,而不是一个连续的梯度。
上图中有三个波段:一个给阴影,一个给基色,一个给高光。一个典型的误区是:
outlines
就是cel shading
。《无主之地》就是一个例子,它并不是cel shading
:
但这两者结合是很常见的,这会让画面看起来像是画出来的,例如: 《龙珠战士Z》
2. Cel Shading方法
最常见的方法是:比较法线和光的方向,求其点积:
通过添加阈值,可以很轻松的获得多个波段band
,
这个方法的限制在于:其他光源无法影响这个渲染物体;其他物体也无法在它上面投射阴影。
解决方法:不用点积,而是计算表面的亮度。然后在阈值处理过程中使用这个值,而不是点积。
3. 创建Cel Shading
在UE4中,创建一个后处理材质:
3.1 计算Lighting Buffer
我们需要访问两个缓冲区,一个是后处理的输入(正常流水线的渲染结果)和diffuse color
(原色):
Lighting Buffer
应该只包含灰度值(描述某物有多亮)。这意味着不需要两个缓冲区的颜色信息。要放弃颜色,连接两个SceneTexture
节点的颜色输出到去饱和度——这将使两个缓冲区完全去饱和。
然后两者相除,在进行clamp
:
4. 创建一个阈值
对于这个cel shader
,任何数值大于0.5的像素都会使用正常的漫反射颜色。数值小于0.5的像素将使用一半亮度的漫反射颜色。
这个时候,不仅看起来好像不太对,而且场景还一直在闪烁,原因是现在的后处理默认是在tone mapping
之后,所以把这个改了:
5. 隔离后处理
这个很简单:
6. 使用LUT
对于LUT文件,UE4默认其处于线性空间,所以我们需要:
另外,我们不需要tile
的平铺方式:
使用它来代替阈值:
7. 预告
下一篇应该是我在腾讯的实习Demo中使用的技术——简单的、旋转的Kuwahara油画过滤