Unity——光源类型

为了计算3D对象的阴影效果,Unity需要知道落在对象上的光的强度、方向和颜色。

光源类型

①点光源【Point lights】

空间中一点,向所有方向上均匀发光;光照强度与距光源距离的平方成反比,到达指定距离时强度为0。
模拟灯、局部光源、火花、爆炸照亮等
在这里插入图片描述

②聚光灯【Spot lights】

类似点光源,具有指定位置和光线衰减范围;不同的是聚光灯有一个角度约束,形成的是一个锥形的光照区域。
聚光灯锥体边缘的光线会减弱,加宽聚光灯的角度会增加锥体的宽度,并随之增加这种淡化的大小,称为半影【不透明体遮住光源时,如果光源是比较大的发光体,所产生的影子就有两部分,完全暗的部分叫本影,半明半暗的部分叫半影。
模拟手电筒,汽车前照灯,舞台聚光灯等
在这里插入图片描述

③平行光【Directional lights】

视为无限远处的光源,没有任何可识别的光源位置,因此光源对象可以放置在场景中的任何位置,场景中所有对象都被照亮,就像光始终来自同一方向一样;
另外光源与目标对象的距离是未定义的,光线强度不会减弱。
模拟太阳光、月亮
在这里插入图片描述

④面光源【Area lights】

通过空间中的矩形定义,光线在矩形表面区域上均匀地向所有方向发射;仅能从矩形所在面发射,无法手动控制面光源的范围;
光照强度与距离平方成反比衰减;由于光照计算对处理器性能消耗大,面光源不可实时处理,只能烘培到光照贴图中
【特点】面光源同时从几个不同方向照亮对象,因此阴影更加柔和细腻
模拟路灯、小的面光源可以模拟较小的光源(室内光照),效果比点光源更逼真
在这里插入图片描述
在这里插入图片描述

⑤环境光【Ambient lights】

场景周围存在的光,并且不来自任何特定的光源对象;
在不调整单个光源的情况下增加场景的整体亮度,环境光很有用

选择光照技术

相关概念
1.在某种方式上视为“实时”与“预计算”光照;
2.Unity中,平行光、点光源、聚光灯默认是实时的,也称为直接光照一次击中表面,然后直接反射到传感器(例如眼睛的视网膜或照相机)】;
间接光照是最终反射到传感器中的所有其他光,包括多次撞击表面反射的光和天空光。
3.局部光照local illumination:只考虑光源到物体表面的照射效果,即直接光照
全局光照Global illumination:直接光照与间接光照的综合效果,考虑到了环境中所有表面和光源相互作用的照射效果。

①实时光照

默认下,【方向光,聚光灯,点光源】都是实时的,这意味着它们为场景提供直射光并且每帧都在更新;
实时光源单独呈现时阴影是完全黑色的,因为没有反射光【这些光线不会自动进行反射】,只有落在聚光灯锥体内的表面才会受到影响。
在这里插入图片描述

②烘焙光照贴图

unity可以计算复杂的静态光照效果【使用全局光照GI的技术】
利用GI技术,提前执行照明计算并将结果存储在光照贴图中,然后再程序中使用,这一过程称为烘焙
这些光照贴图既可以包括照射到表面的直射光,也可以包括从场景内其他物体或表面反射的间接光
使用烘焙时,这些光照贴图在游戏过程中不能被改变,因此成为“静态”,场景中要烘焙的物体需要设置为static

③预计算实时全局光照

GI提供了一种可以实时复杂场景光照的技术,利用这方法可创建具有丰富全局光照和反射光的光照环境,能够实时响应光照变化
典型例子 一天的时间系统:光源的位置和颜色随时间变化;如果使用烘焙光照是无法实现的。 为了流畅运行,需要将一些数字运算从实时处理变为预先计算处理。