当前位置: 首页 > news >正文

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

简介

本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。

Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Manual/LightingOverview.html

下面是一些基本的概念

直接光照和间接光照

直接光照指的是,光源照射到物体表面后仅经过一次反射后进入到相机中的光照信息。大多数情况下,相机内接收到的光都是来自于直接光。

间接光照则是光源经过多次的反射后进入到相机中的光照信息,一般需要借助全局光照(GI)或者反射探针来实现。

三种光照模式

实时(Realtime)光照:默认创建的光照类型都是该类型,实时光照会在运行时的每一帧进行光照计算。并且可以自由地修改物体和光源的位置和属性。

烘焙(Baked)光照:烘焙光照,是Editor提前在场景中进行光照计算,生成对应的光照数据,这个过程就叫烘焙,后续在游戏运行时,不会再对该类型的光照进行计算,而是直接从光照贴图中获取数据。该光照适用于场景中静态的光照和物体。

混合(Mixed)光照:可以在烘焙的过程中生成对应的光照信息。在运行时会将烘焙的光照信息和实时的光照信息叠加在一起。并且可以在运行时修改光源信息,不过这些修改仅会影响实时光照部分计算的结果。不影响原先的烘焙结果。同时混合光照记录的信息,会受到光照设置中Mixed Lighting的Lighting Mode选项影响

关于烘焙光照的实践

1.测试场景搭建

首先创建一个测试场景,为了避免天空盒和背景对最终光照结果的影响,将相机的BackgroundType改成SolidColor,设置Background颜色设为纯黑色

之后打开Window->Rendering->Lighting 设置界面

选择Environment将Environment Lighting的Source设置为Color,Ambient Color设置为全黑色

Environment Reflections 的Intensity Multiplier设置为0

之后在场景内放置一个平面和两个胶囊体。其中StaicPlaneStaticCapsule(静态胶囊体)均勾选右上角的Static选项

场景内默认的平行光命名为TestLight,然后复制一个TestLigth改名为RealTimeLight,并且将RealTimeLight的Active设置为False。这时可以看到以下的一个画面

如果将TestLight的Active也设置为false可以看到整个画面变成了全黑的。说明此时游戏内的物体已经不受环境光的影响

之后恢复TestLight的Active为true。这时候可以做一个小实验,将TestLight的Mode由RealTime改为Baked和Mixed

修改完后可以尝试运行该场景。可以发现一个神奇的现象,不同光照模式下Game视图下看到的画面均是相同的,画面如下。原因是此时并没有进行光照的烘焙,在没有任何烘焙信息的情况下,无论选什么模式,场景内的光源都是实时光

2.烘焙光照

将TestLight的Mode选择为Baked。然后打开Lighting设置界面,在Scene选项下,点击New Lighting Settings

创建一个光照配置,这里命名为LightSceneSetting

然后切换到BakedLightMaps选项下,此时LightingDataAsset为空,点击底部的GenerateLighting

可以看到Editor底部出现一个蓝色的进度条,代表正在进行光照的烘焙

等待蓝色进度条结束后,可以看到在Scenes目录下,会自动创建一个跟当前进行烘焙的场景同名的文件夹,并且文件夹内生成了LightingData,两个LightMap和一个ReflectionPro

之后查看Game界面,发现画面中DynamicCapsule(动态胶囊体)消失了

原因是烘焙光照只会烘焙设置为Static的物体。所以只有StaticPlane和DynamicCapsule受到了BakedLight的光照影响。

之后进行以下的几个测试,查看画面中的变化

  • 将TestLight的Active设置为fasle,发现画面没有产生任何改变。原因是,经过烘焙之后,受到烘焙影响的物体,会直接从LightMap中获取自己的光照信息,并且不关心原来的光源TestLight的active是否是true

  • 将原先RealTimeLight的Active设置为True,可以看到DynamicCapsule出现了,并且他的颜色明显要比左边的StaticCapsule要暗一些。因为DynamicCapsule仅受到了实时光的影响,而StaticCapsule则是叠加了烘焙光和实时光

  • 将TestLight的Active重新设置为true之后,修改TestLight的Mode,将其改成RealTime或者Mixed。画面同样没有任何改变。原因是烘焙信息会记录哪些光参与了烘焙,在之后的渲染中,该光照就不再参与实时光照的计算

关闭RealTimeLight,将Static Capsule的位置为(0,1.5,0)修改为(-2,1.5,0),角度由(0,0,0)修改为(0,180,90)

可以看到一个有趣的现象,StaticCapsule显示的位置改变了,但是原先的背光面旋转到正面之后还是特别的暗,包括底部的阴影位置和大小都没有产生改变,还是跟未移动之前相同

之后在Lighting界面重新点击GenerateLighting

等待蓝色进度条完成后可以看到光照和阴影全部都恢复正常了。所以如果静态物体位置产生改变之后需要重新进行烘焙,才会获得正确的烘焙纹理

关于全局光照的实践

1.测试场景搭建

在之前创建的测试场景上进行修改,先新建一个URP/Lit材质,将颜色改成为红色,金属度改成0,光滑度改成1

为了效果更加明显,将场景内的光照的Intensity设置为2(Intensity代表光线的强度),Indirect Multiplier设置为3(Indirect Multiplier间接反射系数代表每次间接光反射之后的强度变化,该值小于1,则每次反射之后光照强度就会减小,大于1则是反射之后变强)

然后创建一个立方体(LeftCube),将刚刚的红色材质赋值给立方体,然后将其设置为Static,再按照下图进行摆放。

画面中的胶囊体,上面是静态胶囊体,下面是动态胶囊体。

2.烘焙全局光照

先确保Lighting设置Scene选项卡的Baked Global Illumination处于勾选状态

场景只打开一个Baked光源TestLight。

之后点击Lighting设置中Baked Lighitingmap的Generate Lighting按钮。等待烘焙进度条结束。结束之后可以看到上面的静态胶囊体靠近墙面的部分有些许红色。这个红色就是由左侧的立方体反射出来的间接光,下方的动态胶囊体没有参与烘焙的过程所以现在整个是黑色

之后打开另外一个实时光RealTimeLight

下方的动态胶囊出现在画面中,但是胶囊体左侧依旧是黑色的。

3.实时全局光照

将Lighting设置Scene选项卡中的Realtime Global Illumination勾选框打开

关闭烘焙光源TestLight开打实时光源RealTimeLight

之后点击BakedLightmaps的Generate Lighting按钮。由于此时没有处于激活状态的烘焙光源,所以BakedLightmap是一个全黑的图片

静态胶囊体左侧也变成了黑色,没有受到左侧红色立方体的影响

之后点击Realtime Lightingmaps选项卡的Generate Lighting按钮,等待进度条结束。可以看到上面的静态胶囊体左侧出现了红色,动态胶囊体的左侧依旧是黑色的。说明实时全局光照同样是只对静态物体有效

这时候可以尝试修改实时光照的角度,Intensity和Indirect Multiplier。在不重新生成Realtime lightmaps的情况下,可以看到场景内的静态物体的直接光照和间接光照均会实时受到影响。

但是如果修改静态物体的旋转角度,将静态胶囊体绕Z轴旋转180度,原先左侧靠近红色立方的的半边旋转到右侧。

环境光设置

环境光的设置在Lighting-Environment选项卡内

下表是Unity关于Environment各个属性的说明

属性:功能:
Skybox Material天空盒是一种材质,它出现在场景中的所有其他对象后方,用于模拟天空或其他遥远的背景。使用此属性可选择要用于场景的天空盒。默认值是内置的默认天空盒 (Default Skybox)。
Sun Source当天空盒材质是Procedural 天空盒时,使用此设置指定具有定向光源组件的游戏对象,用来指示太阳的方向(或任何大型、遥远的照亮当前场景的光源)。如果将其设置为“None”,则假定场景中最亮的定向光代表太阳。渲染模式属性设置为“Not Important ”的光源不会影响天空盒。默认值为无。
有关渲染模式设置的更多信息,请参阅Lights的其他设置部分。
Realtime Shadow Color定义 Unity 用于在 Subtractive 光照模式下渲染实时阴影的颜色。

此设置仅在__Lighting Mode__ 设置为 Subtractive 时可见。
Environment Lighting此部分包含可影响当前场景中的环境光的设置。
Source使用此属性可定义场景中环境光的光源颜色。默认值为 Skybox。
Skybox使用 Skybox Material 中设置的天空盒颜色来确定来自不同角度的环境光。这可以实现比 Gradient 更精细的效果。
Gradient可为来自天空、地平线和地面的环境光选择单独的颜色,并在它们之间平滑混合。
Color对所有环境光使用单调颜色。
Intensity Multiplier使用此属性可设置场景中环境光的亮度,定义为 0 到 8 之间的值。默认值为 1。
Environment Reflections此部分包含反射探针烘焙的全局设置,以及影响全局反射的设置。
SourceUse this setting to specify whether you want to use the Skybox for reflection effects, or a Cubemap of your choice. The default value is Skybox.
Skybox选择此选项可使用天空盒作为反射源。
Custom选择该选项后,可以选择Cubemap,或者Dimmension设置为Cube的RenderTexture,用于进行反射。
Resolution使用此属性可设置用于反射的天空盒的分辨率。仅当 Source 设置为 Skybox 时,此属性才可见。
Cubemap用于进行反射的Cubemap,该属性只在反射的Source设置为Custom是有效
Compression使用此属性可定义是否压缩反射纹理。默认设置是 Auto。
Auto如果压缩格式合适,则压缩反射纹理。
Uncompressed反射纹理以非压缩状态存储在内存中。
Compressed压缩纹理。
Intensity Multiplier反射源在反射对象中可见的程度。
Bounces当来自一个对象的反射随后被另一个对象反射时,便发生反射反弹。使用此属性可设置反射探针评估对象之间来回反弹的次数。如果设置为 1,则 Unity 只会考虑初始反射(来自 Reflection Source 属性中指定的天空盒和立方体贴图)。

创作不易,如果觉得这篇文章对你有所帮助,可以动动小手,点个赞哈,ღ( ´・ᴗ・` )比心

相关文章:

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

简介 本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Man…...

【设计模式——学习笔记】23种设计模式——适配器模式Adapter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 介绍生活中的案例基础介绍工作原理分类应用场景 案例类适配器模式例1介绍类图代码实现优缺点分析 例2类图代码实现 对象适配器模式(常用方式)例1介绍类图代码实现优缺点分析 例2代码实现 接口适配器模式介绍类图代码实现 登场角色类图类适配器模…...

Android Unit Test

一、测试基础知识 1.1 测试级别 测试金字塔(如图 2 所示)说明了应用应如何包含三类测试(即小型、中型和大型测试): 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。 中型测试是指…...

docker更新jenkins

下载文件 1、jenkins提示下载 2、官网下载jenkins官网 文件放服务器内 通过工具把jenkins.war放进服务器例如tmp 文件复制到docker的jenkins容器 docker cp 路径文件 容器id:/{后面不接内容为根路径} docker cp /tmp/jenkins.war 53dc1c71058a:/进入容器内 docker exec …...

一种新的基于区域的在线活动轮廓模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【Docker】基于Dockerfile搭建LNMP架构

一、项目环境 公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能调优和管理工作。 1. 环境配置 主机操作系统IP地址主要软件DockerCentOS 7.3 x86_64192.168.145.15Docker 19.03容器ip地址规划 ngin…...

爬虫003_pycharm的安装以及使用_以及python脚本模版设置---python工作笔记021

这里我们用ide,pycharm来编码,看一看如何下载 这里我们下载这个社区办,这个是免费的,个人版是收费的 然后勾选以后 安装以后我们来创建一个项目 这里可以选择python的解释器,选择右边的... 这里我们找到我们自己安装的python解释器...

远程xml读取解析,将image url下载到本地,延时队列定时删除文件,图片访问路径保存在数据库中

远程xml部分内容 <imagelist name"FY4A AGRI IMG REGI MTCC GLL" tag"FY4A AGRI IMG REGI MTCC GLL"><image time"2023-07-25 22:30 (UTC)" desc"FY4A AGRI IMG REGI MTCC GLL" url"http://img.nsmc.org.cn/PORTAL/FY4…...

firefox笔记-Centos7离线安装firefox

目前&#xff08;2023-03-22 16:41:35&#xff09;Centos7自带的firefox已经很新了是2020年的。主要原因是有个web项目&#xff0c;用2020年的firefox打不开。 发到互联网上是2023-07-24。 报错是js有问题&#xff0c;估计是搞前端的只做了chrome适应&#xff0c;没做firefox…...

Flutter:滑动面板

前言 无意中发现了这个库&#xff0c;发现现在很多app中都有类似的功能。以手机b站为例&#xff0c;当你在看视频时&#xff0c;点击评论&#xff0c;视频会向上偏移&#xff0c;下方划出评论界面。 sliding_up_panel SlidingUpPanel是一个Flutter插件&#xff0c;用于创建滑…...

RocketMQ概论

目录 前言&#xff1a; 1.概述 2.下载安装、集群搭建 3.消息模型 4.如何保证吞吐量 4.1.消息存储 4.1.1顺序读写 4.1.2.异步刷盘 4.1.3.零拷贝 4.2.网络传输 前言&#xff1a; RocketMQ的代码示例在安装目录下有全套详细demo&#xff0c;所以本文不侧重于讲API这种死…...

任务的创建与删除

Q: 什么是任务&#xff1f; A: 任务可以理解为进程/线程&#xff0c;创建一个任务&#xff0c;就会在内存开辟一个空间。 比如&#xff1a; 玩游戏&#xff0c;打篮球&#xff0c;开车&#xff0c;都可以视为任务。 Windows 系统中的 MarkText 、谷歌浏览器、记事本&#xff0…...

致敬图灵!HashData拥抱数据智能新时代!

图1&#xff1a;2023ACM中国图灵大会现场 生于1912年的艾伦图灵被称为“计算机科学之父”、“人工智能之父”。1966年&#xff0c;国际计算机协会&#xff08;ACM&#xff09;为了纪念这位卓越的科学家&#xff0c;设立了以其名字命名的ACM图灵奖&#xff0c;以表彰在计算机领…...

AD21原理图的高级应用(二)层次原理图设计

&#xff08;二&#xff09;层次原理图设计 1.层次原理图概述2.层次化原理图的应用2.1 自上而下的层次化原理图2.2 自下而上的层次化原理图 3.生成层次设计表 对于大规模的电路系统,需要将其按功能分解为若干个电路模块,用户可以单独绘制好各个功能模块,再将它们组合起来继续处…...

ROS中使用RealSense-D435

文章目录 D435简介RealSense的SDK2.0安装方法1&#xff1a;直接利用安装源安装注册服务器公匙将服务器添加到存储库列表安装库 方法2&#xff1a;利用源码安装GitHub下载librealsense安装编译依赖运行脚本cmake编译 软件显示 ROS接口安装启动节点查看话题rviz显示点云 Python接…...

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…...

zookeeper-3.7.1集群

1.下载&解压安装包apache-zookeeper-3.7.1-bin.tar.gz 解压到/app/ &改名zookeeper-3.7.1 [rootnode1 app]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /app/ [rootnode1 app]# mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1 ---- 删除docs [rootnode1…...

ubuntu上安装firefox geckodriver 实现爬虫

缘由&#xff1a;当时在windows 上运行chrom 的时候 发现要找到 浏览器和 webdirver 相匹配的 版本比较麻烦&#xff0c;当时搞了大半天才找到并安装好。 这次在ubuntu上尝试用firefox 实现爬虫 文章分为三个部分&#xff1a; 环境搭建浏览器弹窗输入用户名&#xff0c;密码的…...

【Matlab】基于长短期记忆网络的时间序列预测(Excel可直接替换数据)

【Matlab】基于长短期记忆网络的时间序列预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 "基于长短期记忆网络(Long Short-Term Memory, LSTM)的时间序列预测"是一种使用LSTM神经网络来预测时间…...

[NLP]LLM高效微调(PEFT)--LoRA

LoRA 背景 神经网络包含很多全连接层&#xff0c;其借助于矩阵乘法得以实现&#xff0c;然而&#xff0c;很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后&#xff0c;模型中权重矩阵其实具有很低的本征秩&#xff08;intrinsic rank&#xff09;&#xff0c;因…...

vue3 vant上传图片

在 Vue 3 中使用 Vant 组件库进行图片上传&#xff0c;您可以使用 Vant 的 ImageUploader 组件。ImageUploader 是 Vant 提供的图片上传组件&#xff0c;可以方便地实现图片上传功能。 以下是一个简单的示例&#xff0c;演示如何在 Vue 3 中使用 Vant 的 ImageUploader 组件进行…...

深入理解linux内核--内存管理

RAM的某些部分永久分配给内核&#xff0c; 来存放内核代码及静态内核数据结构。 RAM的其余部分称为动态内存&#xff0c; 这不仅是进程所需的宝贵资源&#xff0c; 也是内核本身所需的宝贵资源。页框管理 Intel的Pentinum处理器可采用两种不同的页框大小&#xff1a; 4KB&…...

SpringBoot热部署的开启与关闭

1、 开启热部署 &#xff08;1&#xff09;导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId> </dependency>&#xff08;2&#xff09;设置 此时就搞定了。。。 2、…...

k8s集群部署(使用kubeadm部署工具进行快速部署,相关对应版本为docker20.10.0+k8s1.23.0+flannel)

1. 安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘20GB或更多可以访问外网&#xff0c;需要拉…...

20230729 git github gitee

1.gitee与gitHub概念&#xff1f; Gitee&#xff08;码云&#xff09;是开源中国社区推出的代码托管协作开发平台&#xff0c;支持Git和SVN&#xff0c;提供免费的私有仓库托管。Gitee专为开发者提供稳定、高效、安全的云端软件开发协作平台&#xff0c;无论是个人、团队、或是…...

php建造者模式

一&#xff0c;建造者模式&#xff0c;也叫做生成器模式&#xff0c;是创建设计模式的一种&#xff0c;它能将一个复杂的对象的创建过程分离开来&#xff0c;使你能够分步骤的创建对象。建造者模式也允许你使用相同的建造代码创造出不同类型和形式的对象。 建造者模式一般包括四…...

linux---》用户操作/su和sudo/普通权限/特殊权限/解压压缩/软件管理,rpm和yum/源码安装nginx

用户操作 ####创建用户####1 创建sa和sutdents组 groupadd sa groupadd students # 2 用户可以属于多个组&#xff0c;只能属于一个主组&#xff0c;附加组可以有多个 G useradd -u 5001 -g students -G sa -c "注释" -s /bin/bash lqz666 # 3 设置密码 passwd lqz6…...

tinkerCAD案例:20. Simple Button 简单按钮和骰子

文章目录 tinkerCAD案例&#xff1a;20. Simple Button 简单按钮Make a Trick Die tinkerCAD案例&#xff1a;20. Simple Button 简单按钮 Project Overview: 项目概况&#xff1a; This is a series of fun beginner level lessons to hone your awesome Tinkercad skills a…...

Java - 为什么要用BigDecimal?

&#x1f914;️为什么要用BigDecimal&#xff1f; 当然是因为使用Double计算&#xff0c;在某些对精度要求很高的场景下会出现问题&#x1f480;不信你看⤵️ Test void test12() {// 丢失精度double result 0.2 0.1;System.out.println(result); // 输出结果为 0.300000000…...

mac 删除自带的ABC输入法保留一个搜狗输入法,搜狗配置一下可以减少很多的敲击键盘和鼠标点击次数

0. 背景 对于开发者来说&#xff0c;经常被中英文切换输入法所困扰&#xff0c;我这边有一个方法&#xff0c;删除mac默认的ABC输入法 仅仅保留搜狗一个输入法&#xff0c;配置一下搜狗输入&#xff1a;哪些指定为英文输入&#xff0c;哪些指定为中文输入&#xff08;符号也可…...