正文
最近有一位朋友试着在 UE4 复现了一下狐妖小红娘的材质。
作为卡通渲染,不算优秀,全是老一套的卡渲算法。但感觉实现起来比较轻便,且经过了项目验证。在某些情况下可以参考
游戏效果
UE4 中的效果
首先,将 UV 上下翻转,从 Unity 转到 UE4
灯光计算
计算结果将用于采样卡通渐变图
MF_Huyao_Curve
函数实质上就是 SmoothStep
函数
阴影计算
这里的 Shadow
代指一切能算出阴影的计算,比如 Shadowmap
上面的两个取最小值,作为 ToonMap 采样的 U 坐标
U 坐标由贴图的 G 通道计算而来
采样 Toonmap 并和灯光颜色、环境光进行计算
Toonmap 如下图。各个部位的 Toonmap 颜色曲线各不相同
目前结果
高光计算
遮罩图的 B 通道负责控制不同材质的 Tonemap。高光最终还是当做 uv 坐标传入 Toonmap 中处理。同一张 Toonmap,不同的行数。
然后这个 Toonmap 采样,负责高光的颜色。颜色和上面的亮度相乘,得到最后高光
边缘光计算
从 Toonmap 中取出边缘光颜色
根据上面的边缘光区域,混合 贴图颜色 和 边缘光颜色
高光加边缘光和颜色贴图,可得下面的结果
反射计算
用的是 Matcap 的方法
再 Lerp
一次,得到最终结果
描边计算
将法线转到 View Space
,乘上描边粗细参数,并且用顶点颜色控制描边粗细。然后转到 World Space
,连到 World Position Offset
上
补充
头发的话,高光换成 2 层各向异性高光,这里用的是 Kajiya-Kay 模型。面部的话,删掉高光和反射计算就行了。