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


前言

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

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


一、回顾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

在这里插入图片描述

1、输入参数

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

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

  • specular:高光颜色
  • smoothness:光滑度
  • 这两个颜色都是在 初始化 SurfaceData 中完成的
    在这里插入图片描述
    在这里插入图片描述
  • SampleSpecularSmoothness
    在这里插入图片描述
    首先:对specularSmoothness进行了初始化
    在这里插入图片描述
    然后:如果赋予了高光纹理,则进行高光纹理的采样,赋值给specularSmoothness
    在这里插入图片描述
    在这里插入图片描述
    否则:将 高光 颜色赋予specularSmoothness
    在这里插入图片描述
    在这里插入图片描述
    最后:按 alpha 的来源给 specularSmoothness.a 赋值
    在这里插入图片描述
    在这里插入图片描述
    这个 a 经过处理后就是smoothness

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

  • 该处理扩大了,smoothness 的变化率,并且使其在[0,1]之间,从1开始
    在这里插入图片描述

2、程序体计算

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

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

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

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

  • 使用 smoothness 调节高光的范围

half modifier = pow(NdotH, smoothness);

请添加图片描述

  • 混合高光颜色

half3 specularReflection = specular.rgb * modifier;

  • 混合主光颜色

return lightColor * specularReflection;

请添加图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-23 14:10:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-23 14:10:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-23 14:10:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-23 14:10:03       20 阅读

热门阅读

  1. Unity UnityWebRequest 向php后端上传图片文件

    2024-01-23 14:10:03       34 阅读
  2. C Primer Plus(第六版)13.11 编程练习 第9题

    2024-01-23 14:10:03       33 阅读
  3. Rust 中的 Option、Result 和 ? 运算符

    2024-01-23 14:10:03       33 阅读
  4. Rust 并发

    2024-01-23 14:10:03       29 阅读
  5. 树莓派ubuntu:CSI接口摄像头安装驱动程序及测试

    2024-01-23 14:10:03       34 阅读
  6. UNITY BUILD加速cmake 编译

    2024-01-23 14:10:03       34 阅读
  7. VSCode 中 Tab 键突然不能缩进了

    2024-01-23 14:10:03       32 阅读
  8. 边缘计算的挑战和机遇

    2024-01-23 14:10:03       44 阅读
  9. R语言【cli】——ansi_strtrim():截断ANSI字符串

    2024-01-23 14:10:03       31 阅读
  10. NLP深入学习(七):词向量

    2024-01-23 14:10:03       33 阅读
  11. promise

    2024-01-23 14:10:03       36 阅读