【转载】【UE4 Shader复现】狐妖小红娘手游材质

620 阅读2分钟

原文链接:【UE4 Shader复现】狐妖小红娘手游材质

正文

最近有一位朋友试着在 UE4 复现了一下狐妖小红娘的材质。

作为卡通渲染,不算优秀,全是老一套的卡渲算法。但感觉实现起来比较轻便,且经过了项目验证。在某些情况下可以参考

游戏效果

UE4 中的效果

首先,将 UV 上下翻转,从 Unity 转到 UE4

灯光计算

计算结果将用于采样卡通渐变图

image.png

MF_Huyao_Curve 函数实质上就是 SmoothStep 函数

阴影计算

这里的 Shadow 代指一切能算出阴影的计算,比如 Shadowmap

上面的两个取最小值,作为 ToonMap 采样的 U 坐标

U 坐标由贴图的 G 通道计算而来

采样 Toonmap 并和灯光颜色、环境光进行计算

Toonmap 如下图。各个部位的 Toonmap 颜色曲线各不相同

目前结果

高光计算

image.png

遮罩图的 B 通道负责控制不同材质的 Tonemap。高光最终还是当做 uv 坐标传入 Toonmap 中处理。同一张 Toonmap,不同的行数。

image.png

然后这个 Toonmap 采样,负责高光的颜色。颜色和上面的亮度相乘,得到最后高光

边缘光计算

image.png

Toonmap 中取出边缘光颜色

image.png

根据上面的边缘光区域,混合 贴图颜色 和 边缘光颜色

高光加边缘光和颜色贴图,可得下面的结果

反射计算

用的是 Matcap 的方法

image.png

Lerp 一次,得到最终结果

描边计算

将法线转到 View Space,乘上描边粗细参数,并且用顶点颜色控制描边粗细。然后转到 World Space,连到 World Position Offset

补充

头发的话,高光换成 2 层各向异性高光,这里用的是 Kajiya-Kay 模型。面部的话,删掉高光和反射计算就行了。