灯光纹理

在戏剧和电影中,照明效果被长期用于表现不存在于场景中的物体。丛林探险家可能被覆盖在假想树冠的阴影中。监狱场景经常显示从铁栅栏窗透进来的光,即使窗户和墙壁并不真实存在于场景中。虽然非常有气氛,但是阴影的创建非常之简单,只需要在光源和目标对象之间放置某种形状的遮罩。这个遮罩简称为剪影或 Cookie。Unity 灯光支持以纹理的形式添加 Cookie,从而有效地增强场景气氛。

译注:剪影比 Cookie 更直观易懂,不过译者认为更合适的翻译是『灯光纹理』。因此,下文统一使用『灯光问题』。

A directional light cookie simulating light from a window

平行光纹理,模拟从窗户透进来的光

创建灯光纹理

灯光纹理只是一张普通的纹理,不过只和 alpha/transparency 通道有关系。当导入一张灯光纹理时,Unity 提供了将图像的亮度转换为 alpha 的选项,因此通常将灯光纹理简单地设计为一张灰度纹理。你可以使用任意图像编辑器生成一张灯光纹理,并保存到项目的 Assets 文件夹下。

A simple cookie for a window light

简单的窗户灯光纹理

导入灯光纹理到 Unity 中时,在项目视图中选中它,并在检视视图中把贴图类型设置为 Cookie。你还应该开启 Alpha From Grayscale,除非你已经设计好了图像的 alpha 通道。

灯光纹理 - 图3

选项 Light Type 会影响投射纹理的方式。因为点光源向所有方向发射光,所以纹理贴图必须是 Cubemap 类型。如上图所示,聚光灯使用的纹理类型应该被设置为 Spotlight,而平行光实际上可以使用 Spotlight 或 Directional 类型。使用了 Directional 纹理的平行光将在整个场景上重复平铺纹理。如果使用 Spotlight 类型,则只会在『光束』直线路径上显示一次;唯有在这种情况下,平行光的位置才显得如此重要。

The window cookie tiled in directional mode

在平行光模式下『平铺』窗口纹理

应用纹理到灯光

导入纹理后,在检视视图中,把它拖动到灯光的 Cookie 属性,以应用它。

聚光灯和点光源按照圆锥体或球体的尺寸简单地缩放灯光纹理。平行光额外提供了一个 Cookie Size 选项,允许你缩放纹理;类型为聚光灯和平行光的灯光纹理都支持缩放。

使用灯光纹理

灯光纹理通常用于改变灯光的形状,使之与场景中绘制的某些细节相匹配。例如,黑暗的隧道可能具有沿着天花板的条形灯。如果使用标准的聚光灯模拟,光束将呈现为意想不到的圆形,但是可以使用灯光纹理约束光线,使之呈现为细长的矩形。正在使用监视器屏幕的角色,脸部可能会被投射绿色荧光,但是这种荧光应该被限制为小盒子形状。

注意,灯光纹理不需要完全是黑白的,它可以包含任意灰度级。这可以用于模拟光线路径上的尘埃和污垢。例如,如果游戏场景位于长期废弃的房间内,可以在窗户和灯光上使用带有噪点的、肮脏的灯光纹理,来营造气氛。类似的,汽车前灯玻璃通常含有脊线(不平整),产生还有较亮和较暗区域的焦散图案;使用灯光纹理可以很好地模拟这种效果。

译注:『焦散』是指当光线穿过一个透明物体时,由于对象表面的不平整,使得光线折射并没有平行发生,出现漫折射,投影表面出现光子分散。—— 百度百科