着色模型构建

获取光照参数

这里获取平行光向量和平行光颜色,UE的平行光亮度太亮,所以除了个10

读取法线和漫反射偏移

法线和漫反射偏移贴图,RG为法线,B为漫反射偏移

全图

法线

LightTex中的RG是法线数据XY分量,我们需要重构法线的Z分量,这里先映射到-1~1

取的RG通道数据,这里因为法线贴图是适用Unity的格式,是OpenGL风格的法线数据,而UE是DX风格的,两种法线的Y向量方向不一样,所以这里需要反向Y分量,再用一个参数控制法线强度

根据法线的各分量的平方之和为1,我们可以求出法线的Z分量,这里用min函数来限制出现负数的情况,因为浮点计算的误差和贴图精度问题,是可能会出现负数的情况 计算完Z分量后与XY分量进行合并,并通过TBN矩阵转换到世界空间

这里光照和法线使用于身体部分,所以进行开关控制,如果不是身体部分则直接输出PixelNormal。同时需要处理一下双面材质的背面法线问题,如果是背面的话需要将法线翻转,最后预留一个双面处理后的顶点法线后面使用

漫反射偏移

这里读取B通道将强度乘个2,如果是身体部分就输出,反之输出0

计算光照衰减

这里直接使用Lambert光照模型,使用刚才计算好的PixelNormalWS和光线点乘在加上DiffuseBais漫反射偏移 漫反射偏移其实就是增亮暗部的作用

输出预览

如果发现有瑕疵,检查一下纹理压缩,设置为向量置换贴图模式

分层操作

分层名称

这里是分为7层: ShadowFade最深阴影 Shadow较浅阴影 ShallowFade中间过渡较深阴影 Shallow中间过渡较浅阴影 SSS次表面部分 Front 明亮区域,接近没有衰减 Forward 最强反射部分,没有衰减

对应代码

Unity代码是这样的方便理解

这里逐层转为蓝图

ShadowFade最深阴影

除以S1

Shadow较浅阴影

除以S0

ShallowFade中间过渡较深阴影

除以S1

Shallow中间过渡较浅阴影

除以S0

SSS次表面部分

除以S0

Front 明亮区域,接近没有衰减

除以S1

Forward 最强反射部分,没有衰减

分层混合颜色

创建Shadow颜色参数

拷贝蓝图

*这里需要对材质ID进行判断然后输出,之前在描边中写过这个select节点直接拷贝过来,读取材质ID的也拷贝过来就行 对应位置

处理颜色亮度

对于颜色需要根据深度进行控制,当距离拉近的时候颜色提亮 这里先进行计算平均颜色亮度和颜色归一化

颜色亮度绑定深度控制

输出颜色色调调整

为了方便控制添加手动的颜色进行混合控制

这样深色阴影颜色就计算完了,完整节点:

其他参数调整

同样的还需要设置过渡阴影部分颜色和其他颜色 PostShallowFade和PostShallow

SSS,Front,Forward,非阴影部分不需要根据深度调整,直接设置

灯光和各层颜色混合

给对应分层乘上各自的颜色,然后在乘上灯光颜色 阴影区使用的是压暗过的灯光颜色,而非阴影区使用正常的灯光颜色 阴影区如下

非阴影区

最后两者相加就是Albedo颜色

将Albedo颜色和基础颜色混合输出

参数调整

PostShadowTint: CDCDCDFF PostShadowFadeTint: CDCDCDFF PostShallowTint: E6E6E6 PostShallowFadeTint: E6E6E6 PostSssTint: FFF1E6 PosFrontTint:FFFFFF 面部 ShadowColor1 :DDBFBF ShallowColor1 :EEDDDD 头发,饰品 ShallowColor1 :EEDDDD ShallowColor2 :A7A3B9 ShallowColor3 :DAE3E8 ShallowColor4 :E6BEBD ShallowColor5 :E6D4DF

ShadowColor1 : DDBFBF ShadowColor2 : 66637B ShadowColor3 : ABB4CE ShadowColor4 : B48B8C ShadowColor5 : CCACBA 服装 ShallowColor1 :B9BFD1 ShallowColor2 :DFE8ED ShallowColor3 :E6CEBF ShallowColor4 :9C94BC ShallowColor5 :93A0B2

ShadowColor1 : 8685AB ShadowColor2 : BAC3E0 ShadowColor3 : CCA586 ShadowColor4 : 8780AG ShadowColor5 : 637082 面部参数调整 ShadowColor1 :DDBFBF ShallowColor1 :EEDDDD

面部参数调整后,眼睛材质因为继承了面部,所以回调参数

调整后记得指定贴图

光照强度调整为10

染色预览

Albedo

Albedo x BaseColor