UE4从零开始的卡通渲染
前言
我们在阴影篇一中提到过用SmoothStep函数的形式来进行色阶分离,并且还支持自定义阴影颜色。如下图所示
但是考虑到实际开发项目中,有可能对阴影的过度颜色有更高的要求,例如下面这种样子,这样的画阴影颜色和平滑区域的颜色有很明显的区分,这样的话我们之前的材质球就不支持了。
所以我们接下来要做的就是实现可以自由替换阴影颜色以及过度去区域的表现。
原理
首先就是我们必须要支持可以通过替换纹理来进行上方的效果表现。先去PS里大概做这样一张Ramp图,这是作者自己P的,效果上来说肯定没法比,但是主要是介绍大体思路,所以也差不多了。
有了这张图以后,我们要做到就是确定采样的TextureCoordinate,通过观察Ramp图我们发现,在阴影区域我们希望采样的左侧,然后过渡区域采样中部,最后就是不存在阴影的区域采样右侧。也就是我们将与灯光的点乘的[-1,1]范围转换到[0,1]范围就可以达到我们想要的效果
half lambert着色模型和我们想要的效果类似。
UE中实践
- 新建一个母材质,并用我们之前创建的shading model。
- 求光照与法线的点乘,并转换到[0,1]区间来对Ramp图进行采样
- 增加一个纹理参数来获取BaseColor
- 最后由于我们CustomData1之前存的是二值化后的NoL值,所以这里直接传0,
最终效果
可以看到这也有很明显的色阶分离的效果,而且在具体的效果上可能会更加自由一点,颜色的改变只需要替换对应Ramp图即可。