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


前言

在之前的文章中,我们已经知道了 SimpleLit 下的主光数据怎么获取。

有了这些数据,我们就可以计算 Lambert漫反射 和 BulinnPhone高光反射 了。


一、Lambert漫反射计算1

  • 我们在获取了主光信息后

Light mainLight = GetMainLight1(inputData, shadowMask, aoFactor);

  • 就来到了 Lambert 漫反射的计算(这里同时包含了实时光照 和 全局光照GI的计算)

MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);
在这里插入图片描述

  • 我们来分析一下 MixRealtimeAndBakedGI 函数

1、MixRealtimeAndBakedGI 函数有三个重载

  • 我们这里为了方便称呼,把他们分别称为 1号、2号、3号重载 在这里插入图片描述
  • 调用时,我们首先调用了 3号
    在这里插入图片描述

2、3号 调用了 2号

在这里插入图片描述

3、1号调用了 SubtractDirectMainLightFromLightmap函数

  • 该函数就是实现了 Lambert漫反射计算的核心部分 同时混合了 GI
    在这里插入图片描述

4、我们重点来看 Lambert漫反射的实现部分

在这里插入图片描述

  • 得到 d o t ( N ⃗ , L ⃗ ) dot(\vec{N},\vec{L}) dot(N ,L ),并且限制范围在[0,1]之间

half contributionTerm = saturate(dot(mainLight.direction, normalWS));

  • 然后,用计算出的漫反射结果 与 主光颜色混合,就得到了最终的漫反射颜色

half3 lambert = mainLight.color * contributionTerm;

5、其余部分

  • GI相关
    在这里插入图片描述
  • 阴影相关
    在这里插入图片描述

二、Lambert漫反射计算2

  • 在 CalculateBlinnPhong 函数中,也有计算 Lambert 光照的部分
    在这里插入图片描述
  • CalculateBlinnPhong 调用了 LightingLambert函数来计算Lambert漫反射
    在这里插入图片描述

1、LightingLambert

在这里插入图片描述

  • 其中主要进行了两步
  1. 得到 d o t ( N ⃗ , L ⃗ ) dot(\vec{N},\vec{L}) dot(N ,L ),并且限制范围在 [0,1]之间

half NdotL = saturate(dot(normal, lightDir));

  1. 混合 主光颜色 和 点积结果

return lightColor * NdotL;

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-21 07:36:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-21 07:36:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-21 07:36:04       87 阅读
  4. Python语言-面向对象

    2024-01-21 07:36:04       96 阅读

热门阅读

  1. Windows下 VS2022 编译OpenSSL 库

    2024-01-21 07:36:04       48 阅读
  2. sudo gem install redis

    2024-01-21 07:36:04       60 阅读
  3. Flask用于生产环境

    2024-01-21 07:36:04       56 阅读
  4. node.js如何将webp转jpg图片

    2024-01-21 07:36:04       63 阅读
  5. jquery ajax 缓存

    2024-01-21 07:36:04       52 阅读
  6. Redis 缓存与数据库双写不一致如何解决

    2024-01-21 07:36:04       50 阅读
  7. 基于Ray和vLLM构建70B+模型的开源RLHF全量训练框架

    2024-01-21 07:36:04       66 阅读
  8. flutter学习

    2024-01-21 07:36:04       46 阅读
  9. Tomcat配置项目直接通过http://ip:port访问

    2024-01-21 07:36:04       57 阅读
  10. 如何使用Webpack打包js文件

    2024-01-21 07:36:04       57 阅读