光照与渲染(九)- 光源类型

来源:互联网 发布:自媒体 内容来源 知乎 编辑:程序博客网 时间:2024/05/18 01:36

我们已经介绍了一些在Unity里针对场景照明开始工作之前所需要考虑的条件,希望你应该已经将你的工程为目标平台进行了合理的配置。(手机平台采用烘焙GI和Gamma颜色空间,PC或游戏机采用Precomputed Realtime GI和Linear颜色空间)。

为了达到在游戏中想要的光照效果,让我们继续介绍一下可用的工具

Directional Lights

平行光源在你想在场景中创建像太阳光效果的时候是很有用的。平行光源可以被认为是一个无限遥远的光源,它在许多方面表现行为的就像太阳一样。

从平行光源发射出来的光线是彼此平行的,并且不会像其它类型的光源那样分散开来。总之,被平行光源投射的阴影看起来是一样的,与它们相对于光源的位置无关。这对我们是很有用的,尤其是在户外场景的光照情形。



由于平行光源不必有一个光源坐标,所以它们放置在场景中的任何位置,都不会改变光照的效果。只有旋转平行光源会影响它的光照结果。

像其它类型的光源它们都有一个明显的光源位置,比如Spotlights,当角色离光源更近一些,那么角色的阴影也将会改变。

当在室内环境产生角色阴影时,这也许会是个问题。平行光源在这些情境下是有利的,像在接近光源时阴影任然保持不变时。

平行光不会随着距离而衰减。它们会影响在场景中的所有物体表面(除非被遮挡),当使用延迟渲染路径时,它们会造成性能上的开销。记住,当使用延迟渲染时,这种光源的性能开销是和他所影响的像素有关。然而,尽管有性能上的开销,但是它的表现性能会一直保持不变,比较容易保持平衡。

默认情况下,每创建一个新的Unity场景时,都会包含一个平行光源。在Unity5中,它会关联到Environment Lighting 部分的Lighting 面板(Lighting>Scene>Skybox)中的天空盒系统。你可以通过删除默认的平行光源,创建一个新的光源,或者简单地从‘Sun’参数(Lighting>Scene>Sun)上指定一个不同的GameObject,来改变这种表现。

旋转预设的定向光会导致天空盒也跟着更新,如果光的角度和地面平行就可以做出日落的效果,把光源转到天空导致变黑就能做出夜晚的效果,从上往下照就会模拟日间的效果。

如果天空盒被设置成环境光源ambient source,环境光照将会变成与这些颜色相关联。

Point Lights

一个点光源可以被认为是是个三维空间中的一个点,这个点向所有方向发射光线。这对创建一些效果是很有用的,比如像电灯泡,武器发光或者爆炸等等你期望光线从一个对象物体辐射出来的效果。


点光源在他们的世界位置向各个方向发射光线。球形的区域代表了点光的范围。直接光照会随着距离的增加直到衰减为0,然而反射的间接光照可以继续传播的更远一些

为点光源开启阴影的性能开销是很大的,所以必须保守地去使用。点光源需求阴影向世界的六个方向共渲染六次并且在一些运行速度比较慢的硬件上这是一种不可接受的性能开销。

当向场景中添加点光源,可以注意到目前它们不支持间接反射光的阴影。

这意味着由点光源产生的光线,除非在所达范围内衰减至0,否则将会穿过对象物体并且到达物体的另一面。

这可能会导致墙壁或地板”漏光”,因此放置点光源必须要小心去避免这样的问题,然而如果是采用Backed GI的话,就不会有这类的问题产生。

Spotlights

聚光灯源就是在它们Z轴正方向投射的锥形光。这个锥形的宽度由灯源的‘Spot Angle’参数所定义。光线会从源头到它的最大范围慢慢衰减到0,同时越靠近锥体边缘也会衰减,把投射角度的值加大会让锥体宽度加大,同时也让锥体淡化的力度变大,这现象学名叫做”半影



聚光灯有许多用途,他们可以用来模拟路灯, 壁灯,或许多创意用法,例如模拟手电筒,因为投射区域能精确的控制,因此很适合用来模拟打在角色身上的光或是模拟舞台灯光效果等等。



光线会因为离源头距离变远而衰减,可以注意到光也会因为越靠近锥体边缘而变得越弱,我们称之为半影区,这会由于锥体角度变大而变得更加明显。

当使用Precomputed Realtime GI, 像点光源一样,聚光灯源目前不支持间接光阴影。这意味着由聚光灯生成的光线将会穿过几何图形并且到达另一面。因此放置聚光灯源时要特别注意。

Area Lights

区域光源可以当作是摄影用的柔光灯,在Unity中里面他们被定义为向物体+Z所有方向发射光线的矩形,目前只能在Baked GI中可用,区域光会均匀的照亮作用区域,虽然区域光没有范围属性可以调整,但是光的强度也是会随着距离光源越远而递减。



产生了漫反射光和柔和阴影的区域光

区域光源在你希望创建柔和的照明效果的情景下是很有用的。光线在任何方向穿过光的表面时会产生不同方向的反射 - 造成在对象上产生漫反射,常见的用途是拿来当作天花板壁灯或是背光灯。

为了实现这功能,我们必须从每个光照贴图纹素上向世界中发射一定数量的光线,背对着区域光以确定光是否可以被看见,这代表区域光的计算是消耗很大的,而且会延长烘焙的时间,但如果运用得当它们能够为场景中的光照添加很高的真实性,并且这种额外的预计算消耗就很值得,值得注意的是区域光只能烘焙,游戏运行中不会产生任何实时影响。

下一篇:光照与渲染(十)-自发光材质

阅读全文
0 0
原创粉丝点击