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

这篇具有很好参考价值的文章主要介绍了Unity中URP下的SimpleLit的 Lambert漫反射计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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

  • Unity中URP下获取主灯信息
  • Unity中ShaderGraph下获取主灯

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


一、Lambert漫反射计算1

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

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

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

MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, aoFactor);
Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

  • 我们来分析一下 MixRealtimeAndBakedGI 函数

1、MixRealtimeAndBakedGI 函数有三个重载

  • 我们这里为了方便称呼,把他们分别称为 1号、2号、3号重载 Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎
  • 调用时,我们首先调用了 3号
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

2、3号 调用了 2号

Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

3、1号调用了 SubtractDirectMainLightFromLightmap函数

  • 该函数就是实现了 Lambert漫反射计算的核心部分 同时混合了 GI
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

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

Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

  • 得到 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相关
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎
  • 阴影相关
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

二、Lambert漫反射计算2

  • 在 CalculateBlinnPhong 函数中,也有计算 Lambert 光照的部分
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎
  • CalculateBlinnPhong 调用了 LightingLambert函数来计算Lambert漫反射
    Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

1、LightingLambert

Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎

  • 其中主要进行了两步
  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;

Unity中URP下的SimpleLit的 Lambert漫反射计算,Unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-810908.html

到了这里,关于Unity中URP下的SimpleLit的 Lambert漫反射计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Unity/URP学习]反射探针(Reflection Probe)

    传统上,游戏使用一种称为_反射贴图_的技术来模拟来自对象的反射,同时将处理开销保持在可接受的水平。此技术假定场景中的所有反射对象都可以“看到”(因此会反射)完全相同的周围环境。如果游戏的主角(比如闪亮的汽车)处于开放空间中,此技术将非常有效,但

    2023年04月09日
    浏览(39)
  • Unity中URP下的线性雾

    在之前的文章中,我们实现了URP下的雾效支持。 Unity中URP下的添加雾效支持 在上一篇文章中,我们解析了 URP 下统一不同平台下的z值是怎么实现的 Unity中URP下统一不同平台下的z值 我们在这篇文章中,看一下Unity在URP下线性雾是怎么实现的。 主要是使用上一篇统一好的z值,来

    2024年01月19日
    浏览(36)
  • Unity中URP下的顶点偏移

    在上篇文章中,我们实现了URP下的半透明效果。 Unity中URP下的半透明效果实现 在这篇文章中,我们实现一下像鬼魂一样的顶点偏移效果。 在顶点着色器中,对模型本地空间坐标在转化成齐次裁剪坐标前,进行赋值修改 y = A sin(ωx + φ) + B v.vertexOS.z += sin(_Time.y); 这里用模型顶点

    2024年02月04日
    浏览(49)
  • Unity SRP 管线【第七讲:URP LOD实现以及Reflections反射探针】

    中文版:https://edu.uwa4d.com/lesson-detail/282/1314/0?isPreview=0 英文原版:https://catlikecoding.com/unity/tutorials/custom-srp/lod-and-reflections/ 1. 首先该组件需要将子类模型置于该组件物体子节点下 2. 可在单个LOD中设置其level的模型,并可设置它的距离范围,即可在不同距离下显示不同的模型 若

    2024年02月20日
    浏览(40)
  • Unity中URP下的菲涅尔效果实现(URP下的法线和视线向量怎么获取)

    我们在这篇文章中,了解一下URP中Shader怎么实现菲涅尔效果,同时学习一下URP下怎么获取法线 和 视线向量。 Lambert光照模型公式: Diffuse = Ambient + Kd * LightColor * max(0,dot(N,L)) 实现灯光照射中间亮 周围暗的效果,核心是dot(N,L) Unity中Shader的Lambert光照的实现 光照效果下, 视线单

    2024年02月02日
    浏览(47)
  • Unity中URP下的添加雾效支持

    我们使用之前的棋盘格作为测试Shader来添加雾效。 Unity中 URP 下的棋盘格Shader #pragma multi_compile_fog float fogCoord : TEXCOORD2; o.fogCoord = ComputeFogFactor(o.vertexCS.z); col.rgb = MixFog(col,i.fogCoord);

    2024年04月25日
    浏览(35)
  • Unity中URP下的 额外灯 逐像素光 和 逐顶点光

    在之前的文章中,我们了解了 主光相关的反射计算。 Unity中URP下的SimpleLit的 Lambert漫反射计算 Unity中URP下的SimpleLit的 BlinnPhong高光反射计算 在这篇文章中,我们来了解一下额外灯的 逐像素光 和 逐顶点光。 在片元着色器 #if defined(_ADDITIONAL_LIGHTS) outColor = 1; #else outColor = 0; #end

    2024年01月23日
    浏览(38)
  • Unity-3DRPG游戏 学习笔记(1)--使用URP渲染管线

    教程地址: Unity2020 3DRPG游戏开发教程|Core核心功能01:Create Project 创建项目导入素材|Unity中文课堂_哔哩哔哩_bilibili 创建URP通用渲染管线(2021版本) 1. 打开:Windows--Package Manager--左上角下拉选择Unity Registry--搜索Universal RP--Install 2. Project窗口--Assets--右键Create--Rendering--URP Asstes

    2024年02月11日
    浏览(46)
  • 【Unity Shader Graph URP渲染管线下的自定义半透明效果_半透明案例分享】

    URP的渲染管线下 在项目设置里找到“Graphic” 找到URP Asset文件 索引到Renderer List文件——“ForwardRenderer” 在这个“ForwardRenderer”文件里找到“Add Renderer Feature” 添加一个渲染对象,类似下图:Render Object (Experimental) 如图设置,将“Event”设置成 AfterRenderingSkybox ,然后“Layer M

    2024年02月09日
    浏览(59)
  • Unity使用反射机制和PlayerPrefs来存储游戏数据

    Unity中有一个PlayerPrefs用来给游戏存储数据。这个类有三个存储三种特定类型的方法:SetInt用来存储int类型的数据,SetFloat用来存储float类型的数据,SetString用来存储string类型的数据,虽然只能存储三种类型的数据,但是对于一般的游戏而言这三种类型完全够用了。本文封装了

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包