丝绸各向异性 - 十字高光双 Lobe 算法
2025-11-10
| 2025-11-12
Words 399Read Time 1 min
type
status
date
slug
summary
tags
category
icon
password

各向异性出现的本质:

双Lobe

notion image
所以很显然,bxdf的高光 肯定是要算两DGF 然后进行混合的
我们以最简单的双Lobe高光为例:(实际工程里比这复杂)
 
// Kajiya-Kay双Lobe高光 float3 SilkSpecular(float3 T, float3 B, float3 H, float roughness, float crossIntensity)
 
{float D1 = D_Aniso(roughness, dot(T, H)); // 经线分布 float D2 = D_Aniso(roughness, dot(B, H)); // 纬线分布 float Vis = Vis_Smith(roughness);float F = F_Schlick(specularColor, dot(V, H)); return (D1 + D2 * crossIntensity) * Vis * F; }
// 丝绸类型匹配 if(薄纱) AnisotropyCross = 0.3; // 弱交叉 if(缎纹) AnisotropyCross = 0.7; // 强交叉 if(织锦) AnisotropyCross = 1.0; // 锐利十字
具体丝绸类型织方法:
 
 
其中D的化是按照两个粗糙度进行计算,最后使用了D1 + D2 * crossIntensity的混合方式
值得注意的是使用的是 dot(T, H)。很显然,用的是头发的Kajiya模型,用T0H 代替 N0H。确实本质很像,微观都是圆柱体
Vis则是没分方向,这是简化。牺牲了 “不同方向遮挡差异” 的精度,但省了一半计算,对丝绸这种 “软材质” 影响很小。
F一样,基于Kajiya模型。用的VoH。
如果换成 “金属拉丝”,可能需要更完整的双 Lobe(算 ax/ay、分方向 Vis),因为金属的高光更锐利,简化会导致 “高光边缘模糊”;但丝绸的高光本身偏柔和,这个简单版完全够用。
  • 图形学
  • 渲染
  • HLSL
  • 间接光漫反射理论基础几种sss 总结
    Loading...