03_着色模型构建

着色模型构建

获取光照参数

这里获取平行光向量和平行光颜色,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


Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • URP - RendererFeature :ScreenSpaceOutline
  • 平滑法线处理 - 八面体映射
  • Lv.3 Unity主线:一个简单的PBRShader
  • 理论支线:直接光漫反射与GGX高光的混合问题
  • 理论支线:PBR - 基于图像的照明( image based lighting-IBL)
  • # #