Unity全局光照详解

        之前就学过但是太久没用又忘了,因此用最简洁易懂的语言做个记录。

        全局光照分为两个系统,分别是实时光照和混合光照。(点击window/Rendering/Lighing打开此面板)

        其中全局光照对于我来说都是新技术了,上一次学习全局光照的时候的时候都还没有这个技术,因为在项目中大部分是用一个直接光照和环境光就完事了。

        我不打算先说明各种术语,而是在使用的时候再说明,以免大家没耐心看下去。我之所以要写这个博客就是看别人的博客的时候老是先说很久术语才进入正题,导致我看的很没耐心。

        unity中其实有两套全局光照系统,就是上图中的Realtime lighting和mixed lighting,即实时光照和混合光照。他们其实是独立的,我们一般选择性使用其中一种就行了。他们两个也可以同时启用,同时启用的话太混乱而且性能消耗也很高,我就不考虑了。

实时光照:

        启用时场景中的光源只能使用实时模式,也就是Realtime,但是系统不会自动切换,注意手动设置,启用Realtime Environment Lighting的话除了直接光还会实时计算间接光并应用效果,不过能计算间接光的只有平行光,因为其他的太耗性能了。

        光源有三种模式,剩下的之后再说。实时光照只能选择realtime,不用管。

        要注意的是,虽然名字是实时光照,但是还是只能对静态物体进行光照计算。我们在场景中放置好要被实时关照的物体,并设置为contribute GI静态,其他的可选可不选。

        搭建好场景,根据需要设置环境光,这个太基础了就不讲了。要注意的是如果想在场景中实现全黑的效果环境光就必须为0。我这里环境光设置为0,以排除影响。初始场景是这样的,所有物体都是静态物体。

        开启全局光照和全局光照环境光选项不开启混合光照,平行光光照模式模式设置Realtimeh后,点积烘焙光照。这个烘焙光照其实是计算光信息,然后存储在贴图中,之后就可以实时计算间接光了。

        可以看到这个贴图非常的小,这也是能实时计算的原因。烘焙光照后:

实时光照效果

        实时光照效果一般,参数几乎不可调。但是他强在实时的间光接效果,光源可随意移动,可以让开发者动态调整静态场景中的光源参数,快速制作美术原型,在场景进行美术设计师不用每次等待漫长的烘焙,并且在较低要求下它也可以胜任昼夜交替等效果。

        虽然我说它的效果一般,但是实际上它的效果对比默认环境光还是好得多。

默认场景(默认光加默认环境光)

        对了,间接光。大家可能看不太出来间接光的效果,其实有,但是很弱,仔细看才能看到。

        上面只说了静态物体,接下来要说动态物体了。我们放一个胶囊提,不设置为static。

        效果如下,它的背面是完全黑的。

        因为实时光照计算的间接光是烘焙的,并不是真的光,所以动态物体收不到间接光。此时我们就需要用到光照探针了。

        什么是光照探针?在unity中右键,可以创建光照探针LightProbeGroup,或者说探针组。

        它长这样,其中的8个点可以拖拽,来包括一个范围,但是我们一般不拖拽,而是复制粘贴多个探针在场景中。

        然后重新在lighing面板Generate Lighting后胶囊体的背面受到了光照

        所谓LighingProbeGroup就是一组光照探针,其中的每个点是一个探针。它的作用是收集周围的间接光信息并施加到动态物体上,就这么简单。

        不过这个要注意的一件事是摆放的位置和密度,密度越高性能消耗越高,位置也有所讲究,我们不能只摆在有光的地方,我们还要摆在没有光的地方。因为动态物体受到的间接光照是来自最近的探针的。假设世界中只有一个探针,那么无论在哪里动态物体都受到一样强度的间接光照。

        如图,离得很远背面一样很亮。
        要解决这个问题需要在世界放置更多探针,光线不重要的区域探针组可以很分散。如图,背面变得黑暗了。

        上面就是实时光照的部分。理解了上面的部分就可以讲混合光照了。

混合光照:

        混合光照有三个选项,分别是Baked Indirect,Subtractive,ShadowMask。接下来依次说明。

1.BakeIndirect模式混合光照:

        选择baked indirect,下面也有说明,混合光源提供实时直接光,间接光被烘焙到光照贴图和光照探针中。

        很清晰,直接烘焙光照,我们先不用管烘焙的各种参数,我们先着重于模式之间的区别,参数后面再说,只用设置这里的烘焙选项改为Gpu就行了,也就是用显卡来烘焙而不是cpu,会快很多。遥想当年用cpu烘焙的龟速,简直要吐了。

        如果直接烘焙没有效果,记得把光源改成mixedLight,改成realtime会无法烘焙,改成baked的话可以烘焙,但是光源不会再有直接光。只有使用MixedLight才能在有直接光的同时烘焙间接光照贴图。

        烘焙后的效果,也不太好看。因该是我场景设置的问题QWQ

        因此我决定换个场景,可以看到换个场景,也就是加了墙面后间接光效果更好,整个场景也更好看了。

Baked Indirect烘焙的效果

 为了公平起见,重新用新的场景进行实时渲染来对比。

使用实时光照进行渲染。

 可以看到实时渲染和Baked Indirect视觉效果差不多。烘焙的渲染要更加深邃柔和一点,但是差的不是很多,这也说明用实时光照进行场景照明也是不错的。

        实时光照移动光源时间接光会跟着变化,而烘焙光照(混合光照,物体接受直射光和烘焙后的间接光),移动相机时烘焙的间接光不会变化,也就是相机换了角度但是图中的绿色蓝色红色之类的反射光还在原地,但是阴影是实时的。

        对了,还得对比一下不使用全局光照的效果,也就是一个平行光提供直接光照加上天空盒的环境光,确实挺难看的,不过在动态生成的地图中也没啥办法,除非用某些支持实时动态的插件。

无全局光照,只有直接光照+天空盒环境光

引入动态物体

        和实时光照一样,放置光照探针重新烘焙就行了。

2.Subtractive模式混合光照:

        Subtractive 光照模是一个注重性能的模式,这在低端硬件上非常有用,因为低端硬件需要注重性能,并且只需要一个实时阴影投射光源。这种光照模式不会提供特别逼真的光照效果,而是更适合风格化美学,例如卡通风格。因此在实际使用时会有一些奇怪的效果,下面会讲解。

        先看看描述,说的也很清晰,混合光源对静态物体提供烘焙的直接光和间接光,动态物体接受主平行光提供的实时的直接光并且可以投射阴影到静态物体上。

        因为直接光烘焙在了静态物体中,所以此时移动光源直接光照不会有任何变化,其实烘焙了直接光也就意味着烘焙了阴影(注意烘焙直接光和提供直接光的区别),在移动光源时场景中烘焙好的物体的直接光照和间接光照和阴影不会有任何变化。

        要注意的是,描述说的不是很全,动态物体并不是只能接受主平行光的光照,它也可以接受其他光源的直接光照并产生阴影,只是主平行光会特殊处理。主平行光投射的阴影不仅会投射到静态物体上还会穿过静态物体。

已经烘焙了探针

        这个图看着很奇怪,动态胶囊体C的阴影怎么是红色的?为什么还能穿过方块F?是光照角度的问题吗?和其他胶囊体对比发现并不是光照角度的问题,胶囊体AB的阴影都是正常的。

        其实是因为阴影被烘焙到光照贴图中,所以 Unity 在运行时缺少将烘焙阴影和实时阴影准确地结合在一起所需的信息,也可以理解为没有遮挡信息。但是,Unity 提供了 Realtime Shadow Color 属性来减少光照贴图的影响,从而在烘焙阴影和实时阴影之间创建正确的混合视觉效果。还可以调整颜色来实现某种艺术风格。

        要注意的是,只有实时阴影和烘焙阴影重叠的时候才会使用RealTimeShadowColor,如图

        Subtractive中还有一个特性,就是静态物体无法使用高光效果,因为高光效果需要依赖实时光照的计算,静态物体的光照数据是烘焙的,无法得到实时光照数据。

        还有要注意的是,因为静态物体的光照和阴影都是烘焙的并不是实时的,而且主平行光是分开计算的,所以动态物体不会接受静态物体所产生的光照

        要对动态物体实施间接光照和之前一样,烘焙光照探针即可。

        如图,动态胶囊体在阴影中依然直接受到直接光照,要让他能模拟受到阴影的效果,就必须烘焙光照探针。为什么要说模拟受到阴影呢?因为它实际上还是没有受到阴影,只是周围的光照探针信息较暗让他比整体变暗了而已。

        如果读者自己尝试就会发现探针的位置其实很有讲究,因为现在所受到间接光其实是周围探针共同作用的。

        点击动态物体可以看到对其有影响的探针,最左下角的探针是黑的,左上方较暗,而右方的较亮。动态物体收到的光照是根据探针的光照信息来混合得到的,如果把左方的两个探针移动到更亮的地方那么动态物体左侧会更亮,反之会更暗。

3.Shadowmask模式混合光照:

        Shadowmask的作用是什么呢?在开发开放世界游戏中,如果地图很大,为了更好的视觉效果,最好能够计算所有的阴影,但是我们的性能不允许我们这么做,我们不可能计算所有物体的阴影,除非全是静态阴影。假设我们使用Subtractive模式,静态物体的实时阴影没有问题,但是动态物体却接收不到静态物体的阴影。如果我们想动态物体和静态物体的关系能够正确,并且可以有静态阴影,那么就要用到shadowmask模式。而相比Baked indirect,在近处使用实时阴影时远处也可以有静态阴影。

        混合光源提供实时直接光照,间接光被烘焙到光照贴图和光照探针中。为了烘焙阴影会生成阴影遮罩和探针遮挡关系,使用的阴影遮罩模式可以在编辑器的Qualtiy设置中设置。

        阴影遮罩模式有两种,分别是DistanceShadowmask和shadowmask。他们之间的主要区别是是否使用阴影距离,阴影距离也在下图中设置,shadowDistance就是。

3.1DistanceShadowmask

        再次查看描述,混合光提供直接光,间接光被烘焙。这两个简单,关键在于烘焙阴影,生成了Shadowmask和Light probe occulsion,这里的shadowmask其实就可以看成生成好的烘焙阴影贴图,而light probe occulsion就是光照探针遮挡关系,他是光照探针系统的一部分,也就是记录阴影的遮挡关系。有了它我们就可以完成subtractive模式中无法做到的使用间接光来计算阴影。

        描述里没有明确说明,但其实提供直接光照也包括投射阴影,所以,shadowmask中模式中同时存在静态阴影和动态阴影。其中shadowmask就是烘焙的阴影。

         实际上这个模式笼统来说就是远处用烘焙的阴影,近处用实时阴影,更简单的情况下用探针计算阴影。就这些。这个模式适合全静态场景但是需要正确光照效果的场景,或者说大地图场景但是静态光源。

        为什么要静态光源呢?因为这个本质还是烘焙的,如果光源变化但是远处的阴影不变和间接光不变看着就不合理。

        具体的光照处理如下图,其中的阴影贴图可以理解为实时光照用到的贴图,表中如果说用的是阴影贴图就代表用的是实时阴影。

     

3.2Shadowmask

    

       shadowmask模式其实本质上和Distance shadowmask差不多,只不过更省性能罢了。

        shadowmmask模式中阴影存储在贴图中,所以阴影距离相比Baked Indirect可以设置的更小,可以更节省性能。

光源说明

        上面所有的案例说的都是平行光,其他光源也差不多,只不过实时光照模式中只有平行光可以实时光照。Subtractive中主平行光阴影比较特殊。

        然后光源中还有一个模式:Baked模式,这个只能在混合光照模式中使用。

        

        它和Mixed的区别是它不会对动态物体产生光照。

        然和说一个特殊的光源:面光

      

        他没有模式设置,在混合光照模式下使用,直接烘焙就可以,他产生的光是从面上向四面八方反射,所以最终结果更加真实柔和但是烘焙时间更长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZNN零化神经网络及其在机器人上的应用

1.解等式约束问题 1.1等式QP问题描述 考虑如下等式约束的时变二次规划(QP)问题: 采用拉格朗日乘数法将其转换为无约束优化问题: 对未知量求偏导: 将上式整理成矩阵的形式: 1.2ZNN解等式约束问题 定义误差…

HICE-day6

二层交换 交换基础 所谓的二层交换机指的是针对数据的二层头部(以太网帧头)中的MAC地址进行寻址并转发数据的交换设备。二层交换机不具备路由功能,它工作在OSI七层模型的第二层,因此被称为二层交换机。 上图中,PC1、…

ret2text

上一篇博客是对栈溢出的基本学习,做了几个题练习了一下,师兄给的建议是多用gdb,更直观,动态也可以查看寄存器和栈的变化 一、如何使用gdb 1.peda插件的安装 为了方便查看堆栈和寄存器,最好是安装peda插件&#xff0…

Ubuntu安装Gitlab详细图文教程

1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…

计算机网络之王道考研读书笔记-1

第 1 章 计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络概念 internet(互连网):泛指由多个计算机网络互连而成的计算机网络。这些网络之间可使用任意通信协议。 Internet(互联网或因特网):指当前全球最大的、开放的、由众多网络和路由器互连…

交互妙方Ethercat转Profinet网关连接雷赛伺服驱动器

客户需求:将雷赛DM3E伺服驱动器接入西门子系列PLC,该PLC使用Profinet协议通讯,而伺服驱动器为EthereCAT协议,故使用开疆智能EtherCAT转Profinet网关进行数据转换。 配置过程: 1:首先找到伺服驱动器的官网下…

TDengine 新功能 从 CSV 批量创建子表

1. 背景 我们在从一些数据源(比如关系型数据库)批量导入数据前,我们可能需批量创建出所需子表。TDengine 引擎从 v3.3.3.0 版本开始,提供了通过 CSV 文件批量创建子表的功能,使用者只要按约定的格式生成 CSV 文件&…

帮忙摆脱焦虑的「自洽」逻辑

每个人都像是一座孤岛,承载着各自的梦想、恐惧与困惑。外界的解读、评判和定义有时如同环岛的潮水,时而温柔轻拂,时而猛烈拍打,让人在自我认知中漂泊不定。 当置于艰难处境,被焦虑、抑郁等负面情绪不断吞噬&#xff0c…

二叉搜索树 平衡树(c嘎嘎版)

定义: 二叉搜索树是一种二叉树的树形数据结构,其定义如下: 空树是二叉搜索树。 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。 二叉搜索树的左右子树均为…

旅游系统旅游小程序PHP+Uniapp

旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统 更新日志 V1.3.0 1、修复富文本标签 2、新增景点入驻【高级版本】3、新增门票核销【高级版】4、新增门票端口【高级版】

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器: 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装,可以使用以下命令安装: sudo apt update sudo apt install openssh-server • 启动 SSH 服务: 确保 SSH 服务正在运行&a…

Day10 苍穹外卖项目 订单搜索、各个状态的订单统计、查询订单详细、接单、拒单、取消订单、派送订单、完成订单

目录 1.订单搜索 1.1 需求分析和设计 1.2 接口设计 1.2 代码实现 1.2.1 admin/OrderController 1.2.2 OrderService 1.2.3 OrderServiceImpl 2.各个状态的订单数量统计 2.1 需求分析和设计 2.2 接口设计 2.3 代码实现 2.3.1 admin/OrderController 2.3.2 OrderService 2.3.3 Or…

智慧商城:登录页静态布局,axios请求数据切换图形验证

登录页静态布局 在src目录下新建 styles,主要用于 存放公共样式。在该文件夹下新建common.less文件,并将其在main.js中引入 将图片拷贝到src文件夹下的 assets文件夹下 完成静态布局 点击左箭头能返回到首页 所有组件头部返回左箭头颜色都是一样的&#…

uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!

**提要:**近段时间我们收到多个康复机构用户,咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来,插件是可以应用到AI康复锻炼中的,今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…

怎样设计校园物联网智慧用电平台?

安科瑞戴婷 Acrel-Fanny 相关背景 安全用电历来都是学校安全工作的一个重点,然而每年因此发生的人身伤害以及火灾事故却在继续着,究其原因,主观上是我们的防患意识淡薄,客观上则是由于学生在宿舍使用违规电器、乱拉电线造成的。…

STM32F405 + CubeMX - 产生互补PWM波,中心对齐模式1 + PWM模式2(FOC算法专用)

导言 在FOC算法里,SVPWM用于产生三相PWM波给电机。为了生成SVPWM波形,STM32的高级定时器TIM使用互补PWM的中心对齐模式1可以很好地实现。 如上图所示,按照后面的笔记来配置TIM1后,可以产生的互补PWM波形。 我们期望的SVPWM&…

【Excel】单元格分列

目录 分列(新手友好) 1. 选中需要分列的单元格后,选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列(进阶) 高级分列 Tips: 新手推荐基…

助力 Tuanjie OpenHarmony 开发:如何使用工具包 Hilog 和 SDK Kits Package?

随着团结引擎从 1.0.0 迭代至 1.3.0,越来越多的开发者开始使用团结引擎开发 OpenHarmony 应用。 在开发的过程中,我们也收到了大量反馈,尤其是在日志、堆栈和性能数据方面,这些信息对开发和调试过程至关重要。同时,我…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>找出所有子集的异或总和再求和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; private int ret;//返回周结果private int path;//枚举一个元素就异或进去public int subsetXORSum(int[] nums) {dfs(nums, 0);return ret;} private void dfs(int[] nums, int pos){ret path;for(int i pos; i <…

详解排序几大算法

一、插入排序 基本思想&#xff1a; 直接插入排序是一种简单的插入排序算法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列。 步骤&#x…