Unity一共支持4种光源类型:平行光、点光源、聚光灯和面光源 (area light) 。
面光源仅在烘焙时才可发挥作用。
光源类型有什么影响
最常使用的光源属性有光源的位置 、方向 (更具体说就是,到某点的方向)、颜色 、强度以及衰减 强度(更具体说就是,到某点的衰减,与该点到光源的距离有关)这5个属性。而这些属性和它们的几何定义息息相关。
1.平行光
平行光可以照亮的范围是没有限制的,它通常是作为太阳这样的角色在场景中出现的。
平行光之所以简单,是因为它没有一个唯一的位置,它可以放在场景中的任意位置。
它的几何属性只有方向,我们可以调整平行光的Transform组件中的Rotation属性来改变它的光源方向, 而且平行光到场景中所有点的方向都是一样的,这也是平行光名字的由来。除此之外,由于平行光没有一个具体的位置,因此也没有衰减的概念,也就是说,光照强度不会随着距离而发生改变。
2.点光源
点光源的照亮空间则是有限的,它是由空间中的一个球体定义的。点光源可以表示由一个点发出的、向所有方向延伸的光。
球体的半径可以由面板中的Range属性来调整,也可以在Scene视图中直接拖拉点光源的线框(如球体上的黄色控制点)来修改它的属性。
点光源是有位置属性的,它是由点光源的Transform组件中的Position属性定义的。
对于方向属性,我们需要用点光源的位置减去某点的位置来得到它到该点的方向。
而点光源的颜色和强度可以在Light组件面板中调整。同时,点光源也是会衰减的,随着物体逐渐远离点光源,它接收到的光照强度也会逐渐减小。点光源球心处的光照强度最强,球体边界处的最弱,值为0。其中间的衰减值可以由一个函数定义。
我们需要在Scene视图中开启光照才能看到预览光源是如何影响场景中的物体的。图9.7给出了开启Scene 视图光照的按钮。
3.聚光灯
聚光灯是这3种光源类型中最复杂的一种。它的照亮空间同样是有限的,但不再是简单的球体,而是由空间中的一块锥形区域定义的。聚光灯可以用于表示由一个特定位置出发、向特定方向延伸的光。
这块锥形区域的半径由面板中的Range属性决定,而锥体的张开角度由Spot Angle属性决定。我们同样也可以在Scene视图中直接拖拉聚光灯的线框(如中间的黄色控制点以及四周的黄色控制点)来修改它的属性。聚光灯的位置同样是由Transform组件中的Position属性定义的。对于方向属性,我们需要用聚光灯的位置减去某点的位置来得到它到该点的方向。聚光灯的衰减也是随着物体逐渐远离点光源而逐渐减小,在锥形的顶点处光照强度最强,在锥形的边界处强度为0。其中间的衰减值可以由一个函数定义,这个函数相对于点光源衰减计算公式要更加复杂,因为我们需要判断一个点是否在锥体的范围内。
在前向渲染中处理不同的光源类型
如何在Unity Shader中访问它们的5个属性:位置 位置 、方向 方向 、颜色 颜色 、强度以及衰减。
我们来实现一个前向渲染的 shader。
首先做如下准备工作。
(1)在Unity中新建一个场景。该场景名为Scene_9_Light,默认情况下场景将包含一个摄像机和 一个平行光,并且使用了内置的天空盒子。在Window → Lighting → Skybox中去掉场景中的天空盒