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:

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