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

文章目录

  • 前言
  • 一、Lambert漫反射计算1
    • [1、MixRealtimeAndBakedGI 函数有三个重载](#1、MixRealtimeAndBakedGI 函数有三个重载)
    • [2、3号 调用了 2号](#2、3号 调用了 2号)
    • [3、1号调用了 SubtractDirectMainLightFromLightmap函数](#3、1号调用了 SubtractDirectMainLightFromLightmap函数)
    • [4、我们重点来看 Lambert漫反射的实现部分](#4、我们重点来看 Lambert漫反射的实现部分)
    • 5、其余部分
  • 二、Lambert漫反射计算2

前言

在之前的文章中,我们已经知道了 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;

相关推荐
魔士于安2 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
小贺儿开发3 天前
Unity 家居视频遥控(细节优化)
科技·unity·程序员·udp·视频·工具·通信
淡海水3 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
小小数媒成员3 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
林川~014 天前
Unity新输入系统使用笔记
unity·input system
小贺儿开发4 天前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
goujunwe4 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~015 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
yi碗汤园5 天前
MQTT消息队列遥测传输协议
网络·网络协议·unity
林川~015 天前
Unity 常用 API 与核心类全解:从生命周期到协程,附性能避坑清单(Unity 6 适配)
unity·游戏引擎·常用api