Unity中URP下的SimpleLit的 BlinnPhong高光反射计算

文章目录

  • 前言
  • 一、回顾Blinn-Phong光照模型
    • 1、Blinn-Phong模型:
  • 二、URP下的SimpleLit的 BlinnPhong
    • 1、输入参数
    • 2、程序体计算


前言

在上篇文章中,我们分析了 URP下的SimpleLit的 Lambert漫反射计算。

  • Unity中URP下的SimpleLit的 Lambert漫反射计算

我们在这篇文章中,进行 URP下的SimpleLit的 BlinnPhone 高光反射计算的分析。


一、回顾Blinn-Phong光照模型

  • 在BRP下,我们进行过Blinn-Phong高光反射的推导和实现.
  • Unity中Shader光照模型Blinn-Phong原理及实现

1、Blinn-Phong模型:

Specular = SpecularColor * Ks * pow(max(0,dot(N,H)),Shininess)

  • Specular:高光反射的最终颜色
  • SpecularColor:高光反射颜色
  • Ks:反射系数
  • N:顶点法向量
  • H:入射光线L 和 视线向量V的半角向量
  • Shininess:高光指数,用于模拟高光的范围

二、URP下的SimpleLit的 BlinnPhong

Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第1张图片

1、输入参数

  • lightColor:主光颜色
  • lightDir:主光方向
  • normal:法线信息
  • viewDir:视线方向向量

以上这些,我们在之前的步骤中,已经分析过了
我们主要看 specular 和 smoothness

  • specular:高光颜色
  • smoothness:光滑度
  • 这两个颜色都是在 初始化 SurfaceData 中完成的
    在这里插入图片描述
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第2张图片
  • SampleSpecularSmoothness
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第3张图片
    首先:对specularSmoothness进行了初始化
    在这里插入图片描述
    然后:如果赋予了高光纹理,则进行高光纹理的采样,赋值给specularSmoothness
    在这里插入图片描述
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第4张图片
    否则:将 高光 颜色赋予specularSmoothness
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第5张图片
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第6张图片
    最后:按 alpha 的来源给 specularSmoothness.a 赋值
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第7张图片
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第8张图片
    这个 a 经过处理后就是smoothness

half smoothness = exp2(10 * surfaceData.smoothness + 1);

  • 该处理扩大了,smoothness 的变化率,并且使其在[0,1]之间,从1开始
    Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第9张图片

2、程序体计算

  • 先计算出 L 和 V 的半角向量

float3 halfVec = SafeNormalize(float3(lightDir) + float3(viewDir));

  • 再计算出法线和半角向量的点积

half NdotH = half(saturate(dot(normal, halfVec)));

  • 使用 smoothness 调节高光的范围

half modifier = pow(NdotH, smoothness);

Unity中URP下的SimpleLit的 BlinnPhong高光反射计算_第10张图片

  • 混合高光颜色

half3 specularReflection = specular.rgb * modifier;

  • 混合主光颜色

return lightColor * specularReflection;

你可能感兴趣的:(Unity,unity,游戏引擎)