光源与雾
自 2.2.8本页介绍光照系统的两种特效对象:负责照亮场景的 光源(Light),以及让光有东西可以穿过的 雾体积(Fog Volume)。两者都在特效层级中添加:右键 → 新建 → 光源 或 雾体积。
光源对象
光源是跟随自身 Transform 移动的点光源或聚光灯。聚光灯沿对象的局部 -Y 轴照射,旋转对象即可调整朝向。

| 选项 | 默认值 | 作用 |
|---|---|---|
| 类型(Type) | Point | Point 向所有方向照射;Spot 沿局部 -Y 轴呈锥形照射。 |
| 生命周期(Lifetime) | 20 tick | 光源持续多久。颜色、强度、范围和体积光强度曲线都在这段生命周期上运行。 |
| 循环(Looping) | 开 | 到达终点后重新开始曲线。循环的光源会像循环的发射器一样让特效保持存活;关闭循环时,光源在生命周期结束后自行移除。 |
| 颜色(Color) | 白色 | 随生命周期变化的 HDR 颜色:常量、随机、渐变或随机渐变。HDR 强度会乘到亮度上。 |
| 强度(Intensity) | 10 | 随生命周期变化的亮度。光照随距离的平方衰减。 |
| 范围(Range) | 10 | 光照衰减到零的距离(方块)。 |
| 内角(Inner Angle) | 20(0–89) | 仅聚光灯:完全照亮的核心区域的半角(度)。 |
| 外角(Outer Angle) | 35(0.1–90) | 仅聚光灯:光锥衰减到零处的半角(度)。 |
| 光源半径(Source Radius) | 0.15(0–8) | 发光球体的大小(方块)。0 为硬阴影,越大阴影边缘越柔和。 |
| 投射阴影(Cast Shadows) | 开 | 让方块遮挡这个光源。每帧只有最重要的几个光源能得到阴影。 |
| 闪烁(Flicker) | 0(0–1) | 强度像火焰一样随机变暗的程度。0 为稳定不闪。 |
| 闪烁速度(Flicker Speed) | 8(0–50) | 闪烁变化的快慢。 |
| 体积光(Volumetric)→ 强度(Strength) | 关 → 1 | 让光源在空气中发光。见体积光。 |
强度、范围和体积光强度可以是常量、随机范围、曲线或随机曲线。内角和外角两行只在类型为聚光灯时显示在类型下方。
光源只在对象处于激活且可见状态时发光,因此可以用 Activator 轨道控制它的开关。它的随机值在对象每次开始时取一次。
阴影
光源开启了 投射阴影,并且客户端的 阴影 设置不是“关闭”时,才会投射阴影。阴影数量受 每帧投影光源数 限制(默认 8,最多 32)。Photon 按 亮度 × 强度 × 范围² / 距离² 给光源排序,排在前面且开启了投射阴影的光源得到阴影。其余光源照常照亮场景,只是没有阴影。

| 模式 | 如何找到遮挡物 | 优点 | 局限 |
|---|---|---|---|
| 体素(默认) | 在相机周围方块的半格体素副本(每格 2×2×2)中追踪光线,再加一段很短的屏幕空间接触阴影。 | 光不会穿过墙壁和天花板,遮挡物在屏幕外也一样有效。 | 小于半格的细节(栅栏、玻璃板、实体)依赖接触阴影。刚到达的区域要过几帧才有阴影,见 体素构建预算(毫秒)。 |
| 屏幕空间 | 沿深度缓冲朝每个光源追踪。 | 更省,不需要体素副本。 | 只看得到屏幕上的东西,屏幕外的遮挡物会漏光。屏幕阴影厚度 需要在“薄墙漏光”和“物体后方出现长长的假阴影”之间取舍。 |
| 关闭 | 无。 | 最省。 | 没有阴影。 |
体素模式下,方块按其遮挡形状挡光。树叶会挡光;玻璃和其他不遮挡视线的方块会让光透过。
软阴影(默认开启)会按每个光源的 光源半径 放宽阴影边缘。光源半径为 0 时,即使开启软阴影,边缘也是硬的。
体积光
在光源上开启 体积光 并设置 强度,光源穿过的空气就会显现出来:点光源出现光晕,聚光灯出现光柱。强度 1 是一层淡淡的光雾。
开启 投射阴影 并使用体素阴影时,挡住光源的物体也会挡住它的光晕,所以窗户后的聚光灯会投出一道道光束。前提是这个光源在本帧得到了阴影。
以下客户端设置会影响所有体积光:
- 体积光:开关光晕、光柱和雾体积。
- 体积光雾浓度:调整空气看起来有多浓。1 是特效制作时的标准效果,0 关闭光雾。
- 前向散射:朝光源方向看时光晕更亮。
- 体积光采样数:积分步数,越多越平滑,开销也越大。
没有开启体积光的光源不会给体积光 Pass 带来任何开销。
雾体积
雾体积是一个盒形或球形的雾区,光源的光会在其中散射。对象的 Transform 决定它的位置、大小和旋转:缩放为 1 时形状的边长为 1 格,缩放 (16, 4, 16) 就是一片 16 × 4 × 16 格的雾。

| 选项 | 默认值 | 作用 |
|---|---|---|
| 形状(Shape) | Box | Box(盒形)或 Sphere(球形)。 |
| 生命周期(Lifetime) | 100 tick | 雾持续多久。密度、颜色和自发光曲线都在这段生命周期上运行。 |
| 循环(Looping) | 开 | 重复生命周期,而不是在结束后消失。 |
| 密度(Density) | 1 | 随生命周期变化的雾浓度。1 是一层淡雾。 |
| 边缘渐隐(Edge Falloff) | 0.3(0–1) | 从形状表面向内,雾逐渐变淡直到消失的那部分所占的比例。 |
| 颜色(Color) | 白色 | 雾散射光时的颜色。 |
| 吸收(Absorption) | 0.5(0–1) | 雾在多大程度上遮住后面的东西。0 只增加光;1 遮挡的程度与散射相当。 |
| 自发光(Emission) | 黑色 | 雾自身发出的 HDR 光,不需要任何光源照射。 |
| 噪声(Noise)→ 强度(Strength) | 关 → 0.6(0–1) | 把雾打散成飘动的雾丝。强度表示噪声让雾变稀和变浓的程度。 |
| 噪声 → 尺度(Scale) | 2(0.1–32) | 雾丝的大小(方块)。 |
| 噪声 → 风(Wind) | (0.5, 0, 0.2) | 雾丝沿世界坐标轴飘动的速度(方块/秒)。 |
雾只在被光照到的地方,或设置了 自发光 的地方可见。无论光源有没有开启体积光,照进雾里的光都会照亮它。使用体素阴影时,投射阴影的光源会在雾中挡出光束。
雾体积需要开启 体积光,体积光雾浓度 会乘到它的密度上。使用光影包时,还需要开启 光影包下启用体积光。每帧最多绘制 32 个雾体积,近的优先。
光雾与雾的绘制顺序
- 吸收 造成的变暗在绘制粒子之前完成,所以雾前方的火焰仍然明亮。
- 光晕、光柱和雾的光最后叠加,在粒子和后处理之后。
- 不使用光影包时,原版的距离雾会像淡化地形一样,随距离淡化光源、光晕和雾体积。
编辑器预览
- 光源和雾会在 Scene 中实时显示,并跟随 Timeline 的跳转。
- Scene 顶栏有一个 显示动态光照 开关(光源图标),它只在编辑器里隐藏光照。
- 显示形状轮廓时,光源用黄色的球或锥画出它的范围,雾体积画出青色的盒或球。
- 编辑器场景里的世界是全亮的,光斑看起来比游戏里的夜晚更淡。最终效果请到游戏中的暗处确认。
- 客户端设置在编辑器中同样生效。关闭 启用动态光照 后,编辑器里也没有光照。
Timeline
以下属性可以用 Animation 轨道和录制模式做动画,见 Animation Track 与 Record Mode。
| 对象 | 可动画的属性 |
|---|---|
| 光源 | 颜色、强度、范围、内角、外角、光源半径、闪烁、投射阴影、体积光(开关)、体积光强度 |
| 雾体积 | 密度、颜色、自发光、吸收、边缘渐隐 |
| 粒子发射器 | 粒子发光(开关)、颜色、强度、范围 |
类型、生命周期、循环、闪烁速度、形状和噪声设置不能做动画。如果要在 Java 中针对某一次播放修改光源的数值,见覆盖已制作好的光源。