1. Kajiya-Kay光照模型原理解析
Kajiya-Kay模型是专门用于模拟头发、毛发等纤维状材质各向异性高光的光照模型。与传统的基于法线的高光计算不同,它采用切线方向作为主要计算基准,能够产生更符合真实毛发特性的条状高光效果。
1.1 切线空间计算原理
在传统光照模型中,我们使用法线向量(Normal)来计算高光反射。但对于毛发这类细长纤维材质,法线方向并不能准确反映其表面特性。Kajiya-Kay模型创新性地采用切线向量(Tangent)作为计算基础:
hlsl复制float TdotH = dot(tangent, halfVector);
float sinTH = sqrt(1.0 - TdotH * TdotH);
这里的关键转变是:
- 用切线方向替代法线方向
- 通过三角函数转换得到垂直于纤维方向的高光强度
- 最终产生沿纤维走向的条状高光效果
提示:在实际实现中,建议使用SafeNormalize函数对向量进行归一化处理,避免零向量导致的数值不稳定问题。
1.2 双层高光特性解析
真实毛发的高光反射通常呈现双层结构:
- 主高光(Primary Specular):靠近发梢部分,强度较高
- 次高光(Secondary Specular):靠近发根部分,通常带有色彩偏移
这种特性模拟了Marschner光照模型中描述的"R"和"TT"散射路径。在实现上,我们通过两套独立的参数系统来模拟:
hlsl复制float specular1 = D_KajiyaKay(T_shifted, H_shifted, _Shininess1);
float specular2 = D_KajiyaKay(T_shifted2, H_shifted2, _Shininess2);
1.3 切线偏移技术实现
为了增强高光的动态变化和真实感,Kajiya-Kay模型引入了切线偏移技术:
hlsl复制float3 ShiftTangent(float3 T, float3 N, float shift) {
return normalize(T + N * shift);
}
这个函数通过将切线向量沿法线方向偏移,产生细微的高光位置变化。在实际应用中,我们通常会使用噪声贴图来控制偏移量,实现更自然的效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. URP中的BRDF结构分析
Unity的通用渲染管线(URP)采用基于物理的渲染(PBR)工作流,其BRDF实现主要基于Cook-Torrance微表面模型。
2.1 BRDF核心组件
URP中的BRDF包含三个关键部分:
-
D项(法线分布函数):描述微表面法线的分布情况
- 常用GGX模型:$D_{GGX}(h)=\frac{\alpha^2}{\pi((n·h)^2(\alpha^2-1)+1)^2}$
-
F项(菲涅尔项):计算反射光强随视角的变化
- 使用Schlick近似:$F(v,h)=F_0+(
