风格化高光和阴影
在[7]的Future Work里,还提到了可变形状的高光[10]和风格化阴影[11],这两个风格化渲染算法的思路都比较有趣,这里简单就其实现原理进行一个概述。
可变形状的高光
我们在日式卡通渲染的着色部分描述了一个相对较为简单的高光计算方式,从计算方法可以看出,该方法和经典的Blin-Phong模型有很多相似之处,尤其是对高光强度的计算上,都采用了这个计算项:
这个halfVec也就是我们常说的半角向量,计算方法是:
其中,L和V分别是光源方向和视线方向。
从我们上面描述的卡通渲染高光算法可以看出来,改变卡通渲染高光形状的关键就在于改变这个半角向量。因此文章中就针对半角向量定义了一系列的修改操作,这些修改操作可以叠加使用,也可以单独使用,每个操作对高光形状的影响均不同,具体有以下几个操作:
(1)平移,改变高光的位置:
这里,du和dv表示的是切线空间中的x轴和y轴,也就是切线和副法线,alpha和beta是自定义平移参数,最终偏移后的向量需要进行归一化处理。
(2)有方向的缩放,沿着切线空间的某个轴缩放高光形状:
sigma是自定义参数,范围是(0, 1],上式将使高光沿着切线空间的X轴缩放。
(3)分割,将一块连续的高光切分成两块:
其中,sgn是符号函数,负数返回-1,否则返回1,gamma1和gamma2分别是自定义参数,若其中一个为0,则只沿着另一个方向将高光切为两部分,若两个参数均不为0,则高光被切成四块。
(4)方块化,将趋于圆形的高光变成方形:
其中,n是自定义整数,n越大高光形状越方,sigma则定义了方形高光区域的大小,范围是[0, 1]。
上述四个操作的具体实现可参见这篇文章[12]。
四个基本的操作符