Unity 灯光与渲染 (一)

最近翻自己记录的笔记的时候,发现之前学的Unity 灯光lighting设置渲染一块没有总结过,因此特地将笔记内容整理至博客中。

一.常见光源Light

  • 一说到Unity中的Light,大家能回忆起有哪些光源呢?Directional light、Spot light、Point light 和Area light。那么接下来先对每个Light类型进行简单介绍。
(1).Directional light

Directional light 中文翻译就是定向光,directional light发射的光没有距离的限制,就算你放在了无限远的地方,它所直射出来的光也一样会照射出指向方向区域,并且光线不会减弱。
我们经常会在Unity运用directional light来模拟太阳发射出来的光。
Unity 灯光与渲染 (一)_第1张图片
默认情况下,每个新的Unity场景都包含一个Directional Light。它与Lighting面板的环境光照部分(Lighting->Scene->Skybox)中定义的天空系统相关联。

(2).Spot light

我的理解就是聚光灯,在Unity中类似一个锥体来投射光线,因此就有了两个重要属性RangeAngle,具体如下图所示,Range限制了Spot light的投射长度,而Angle限制了Spot light照射到的面积大小
Unity 灯光与渲染 (一)_第2张图片
聚光灯通常用于人造光源,如手电筒,汽车前灯和探照灯。通过脚本或动画控制方向,移动的聚光灯将照亮场景的一小块区域来达到灯光效果。
Unity 灯光与渲染 (一)_第3张图片

(3).Point light

点光源,位于空间位置中的一个点,会向所有方向均匀发光。光照强度与光照射距离的平方成反比,类似于光在现实世界的表现
Unity 灯光与渲染 (一)_第4张图片
点光源可用于模拟场景中的灯和其他本地光源。还可以使用它们来制造火花或爆炸照亮周围环境的效果。
Unity 灯光与渲染 (一)_第5张图片

(4).Area light

区域光。当你创建区域光的时候,它会呈现出一个矩形的样子。光在所有方向上均匀地穿过它们的表面区域发射,但仅从矩形的一侧发射。对于区域光的范围没有手动控制,但是当距离光源时,强度将在距离的平方反比处减小。由于照明计算是处理器密集型的,因此区域光源在运行时不可用,只能烘焙到光照贴图中。
Unity 灯光与渲染 (一)_第6张图片
由于区域光同时从几个不同方向照射物体,因此阴影趋向于比其他光类型更柔和和微妙。可以使用它来创建逼真的路灯。还常常用在室内照明中,代替点光源,因为具有逼真的效果。

如下图 光在区域光的表面上产生漫反射,具有柔和阴影的反射光。
Unity 灯光与渲染 (一)_第7张图片

二.灯光烘焙

我们经常熟知的是:在项目完成后,对场景中的灯光进行烘焙,以此产生光照贴图,减少实时光照性能的负担。我们经常的做法就是将所有静态物体在右上角面板处勾选 Lightmap Static
Unity 灯光与渲染 (一)_第8张图片
一旦勾选上,你就会发现Unity界面的右下角会一直有个进度条进行所谓的灯光渲染,此时性能差的电脑可以就会…所以一般来说我们会在最终烘焙之前,先在Window->Lighting->Settings中找到Auto Generate,将勾取消掉,这样我们设置完所有的静态物体后,再点击一次Generate Lighting 然后耐心等待渲染即可。
在这里插入图片描述

额外知识点:

1.当我们导入物体模型的时候,建议勾选上Generate Lightmap UVs 灯光烘培时的光照贴图要用到 效果会很不错

Unity 灯光与渲染 (一)_第9张图片
不勾选如下图所示:
Unity 灯光与渲染 (一)_第10张图片
勾选后
Unity 灯光与渲染 (一)_第11张图片

2.在Edit->Project Settings->Player 中 ColorSpace改成线性Linear 更加真实

附上Unity官网手册对比图
总结下来就是 Gamma空间暗的地方更加暗 亮的地方更加亮
而使用Linear就比较中规中矩 更加写实性
但在许多情况下,使用哪个颜色空间的会被目标平台的硬件所限制 需要提前确定
Unity 灯光与渲染 (一)_第12张图片

三.全局光照

GI 全局光照 在window->lighting->settings中可以勾选上
将光源设置成Baked 同时将需要烘培光照贴图的物体设置成static(Lightmap Static)
Unity 灯光与渲染 (一)_第13张图片
Unity 灯光与渲染 (一)_第14张图片
可以对比一下 (无全局光照) 物体被遮挡部分全部呈现黑色
Unity 灯光与渲染 (一)_第15张图片
打开全局光照(引入了光照反射)
Unity 灯光与渲染 (一)_第16张图片
我们在Unity运行的时候移动一下物体 发现烘焙好的光照贴图已经在场景中了
Unity 灯光与渲染 (一)_第17张图片
PS:对于光源的烘培模式为“Mixed”时 光源会对设置成静态的物体进行光照贴图烘焙 而对非静态的对象进行实时光源计算(例如房间里的摆设都可以设置成静态,而角色设置成非静态 这个时候房间里的灯光可以设置成混合模式)

四. 全局光照Lighting Mode分析

1.Subtractive 不支持多盏灯光(根据需求更改)

Unity 灯光与渲染 (一)_第18张图片
Subtractive性能开销会变小 但是呈现质量会变低
原来默认情况(Shadowmask)
Unity 灯光与渲染 (一)_第19张图片
改为Subtractive后 发现阴影变少了(减少了部分性能消耗)
Unity 灯光与渲染 (一)_第20张图片
附上官网优缺点
Unity 灯光与渲染 (一)_第21张图片

2.Shadowmask

默认时都是Shadowmask 效果比较好
在展示效果之前我们先打开Edit->Project Settings->Quality 发现这里的设置是Distance Shadowmask
Unity 灯光与渲染 (一)_第22张图片
与上面的Shadow Distance(150)是有关系的 我们待会来说
我们先来看下当前设置下的两个物体 A是静态已经烘培好光照贴图的 而B是非静态的。如图一 如果是Shadowmask的选择下,结果如图
Unity 灯光与渲染 (一)_第23张图片
下图为shadowmask模式下
Unity 灯光与渲染 (一)_第24张图片
我们可以明显看到A背部阴影被没有部分投射到B物体上方,因而显得不是那么真实。
当我们需要A的阴影产生在B物体上时 这个时候就需要使用Distance Shadowmask来进行实时计算
Unity 灯光与渲染 (一)_第25张图片
但是这样的设置肯定是花费更多性能 (可以发现两张图片中性能中“Shadow casters”的大小)

而Shadow Distance的作用呢?这个150其实就是摄像机离这个物体的距离了 当你把视角往后移到这个距离以外时 就会发现 阴影就木有了 所以调整合适的距离可以有效减少部分性能的开销
Unity 灯光与渲染 (一)_第26张图片
还有就是可以通过代码来控制 当我们的非静态物体移动到我们的静态物体阴影的所规划范围(通过触发检测)内进行Shadowmask Mode的更换 如果原本是shadowmask就改成distance shadowmask

附上官网优缺点
Unity 灯光与渲染 (一)_第27张图片

3.Baked Indirect

呈现效果最好的
Unity 灯光与渲染 (一)_第28张图片
但是当我们摄像机与物体的具体超过物体的shadow distance 则部分阴影就不渲染了…
Unity 灯光与渲染 (一)_第29张图片
同样附上官网解释优缺点
Unity 灯光与渲染 (一)_第30张图片

四.结尾

基础的灯光与渲染就涉及到这些吧…等我之后有时间了再总结如何使用灯光探针…(有人催的情况下 会抓紧的…)

你可能感兴趣的:(Unity3d学习)