03_着色模型构建
着色阶段
全局片元着色器中
获取法线和顶点位置

获取ShadowCoord和光线向量

1
2
3
4
//获取shadowCoord和光向量
float4 shadowCoord = TransformWorldToShadowCoord(positionWS);
Light mainLight = GetMainLight(shadowCoord);
float3 lighDirectionWS = normalize(mainLight.direction);
这里的TransformWorldToShadowCoord函数来自于shadow.hlsl文件,函数原型如下
Light结构体在RealtimeLight.hlsl文件中
GetMainlight函数也在RealtimeLight.hlsl文件中 
计算光线衰减(兰伯特)
此时将衰减值输出测试

添加法线和漫反射偏移
法线贴图是这几张图,法线在RG通道,B通道是漫反射偏移,其实就是增亮暗部的颜色
计算TBN相关参数
sign 是控制法线翻转的值,之前顶点着色器传入的值就存在tangent的w分量中 
初始化变量
身体部分,进行法线解析和漫反射偏移处理
这里法线只有XY两个值,所以我们需要计算Z向量的值 _BumpScale新增参数控制法线强度 对于法线,各个向量的平方相加应该等于1,由此可以求出Z方向数值 因为浮点计算误差问题X和Y的平方和可能超过1,所以使用Min进行防范 最后使用TBN矩阵进行转换然后归一化
混合输出测试
最后处理一下背面法线 
光照分级(重点)
添加分级参数
这里设置参数和初始化 
定义光滑系数和锐利系数
锐利系数也可以叫做粗糙度,锐利系数 = 1 - 光滑系数 
分级操作

各个分量预览
这里预览均为_AlbedoSmoothness = 0的情况,边缘无过渡 
分层着色
材质ID初始化
读取贴图数据获得材质ID
初始化颜色变量 
参数追加

新增函数
这里对颜色归一化其实是进行提亮操作,根据深度来判断是否提亮,当视角越近亮度就越高,越原就越解决原色
这里对灯光进行压暗操作,当灯光亮度不超过1的时候进行缩放,获得一个低亮度的灯光颜色用于阴影处理,而非阴影部分使用不处理的灯光颜色
三值比较函数宏模版 
各分段颜色设置
深色阴影颜色根据材质ID判断进行设置,同时使用深度进行控制远近阴影颜色的亮度,越近越亮,越远越暗,同时新增参数控制阴影底色
浅色阴影相同处理
SSS颜色和光照亮色直接进行设置底色,反射颜色ForWardColor直接给1.0白色就行 
混合颜色

1
2
3
float3 lightColorScaledByMax = ScaleColorByMax(lightColor);
float3 albedo = (albedoForward * forwardColor + albedoFront * frontColor + albedoSSS * sssColor) * lightColor;
albedo += (albedoShadowFade * shadowFadeColor + albedoShadow * shadowColor + albedoShallowFade * shallowFadeColor + albedoShallow * shallowColor) * lightColorScaledByMax;
将每个分段的权重系数乘上颜色然后和灯光颜色进行混合,这里光照部分直接和灯光颜色混合相乘,阴影部分需要和压暗过的灯光颜色相乘
颜色参数
PostShadowTint: CDCDCDFF PostShadowFadeTint: CDCDCDFF PostShallowTint: E6E6E6 PostShallowFadeTint: E6E6E6 PostSssTint: FFF1E6 PosFrontTint:FFFFFF 面部 ShallowColor1 :EEDDDD ShadowColor1 :DDBFBF 头发,饰品 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
当前预览
乘上基础颜色 
Enjoy Reading This Article?
Here are some more articles you might like to read next: