主页
中文/English
Fenglvv's Toon Shader
主观渲染的日式风格角色。模型来自
少女前线2 MMD.
Twitter
介绍
这个着色器展示了渲染日式卡通角色的部分过程。
该着色器基于Unity URP,并利用URP RenderFeature 来定制渲染管线。
Shader 特性
外描边:使用脚本平滑法线并转化到tangent空间,记录到顶点色rgb中,使用alpha控制描边粗细
内描边:屏幕空间比较模型深度和周围深度,超过阈值则画为外描边
基本着色:使用 Lambert 二分 + GGX 高光 + 环境 CubeMap + 暗部叠加渐变贴图
SDF面部阴影:使用角色前向和光线的夹角计算step值,将SDF贴图二分为阴影和非阴影区域
眉毛穿过头发:将头发和面部写入模板,眉毛在最后绘制,绘制在面部和头发上方
屏幕空间刘海阴影:将面部写入模板,将头发沿着光线方向偏移,以阴影颜色在模板区域绘制
使用顶点色alpha通道控制外描边粗细,修整角色头发和面部描边
法线重映射
来优化高光形状
将头发法线映射到近似球形,避免刘海亮暗二分细碎,得到平滑的头发明暗分布
沿高光流动方向为头发绘制 Flow Map, 转化到 Tangent 空间,存储到贴图中
使用kajiya-kay方法绘制双层高光
使用视差方法绘制眼球,让眼球看起来具有深度
使用与 Directional Light 相同方向的阴影相机单独记录特定tag物体的深度,在shader中比较阴影相机深度实现高精度的角色自投影
借物表
Unity 工具开发:
法线平滑工具