Skip to content

光源与雾 ​

自 2.2.8

本页介绍光照系统的两种特效对象:负责照亮场景的 光源(Light),以及让光有东西可以穿过的 雾体积(Fog Volume)。两者都在特效层级中添加:右键 → 新建 → 光源 或 雾体积。

光源对象 ​

光源是跟随自身 Transform 移动的点光源或聚光灯。聚光灯沿对象的局部 -Y 轴照射,旋转对象即可调整朝向。

聚光灯的检查器,旁边是 Scene 中它的黄色锥形辅助线
一盏聚光灯的检查器;Scene 中用黄色锥形辅助线画出它的照射范围。
选项默认值作用
类型(Type)PointPoint 向所有方向照射;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)BoxBox(盒形)或 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 中针对某一次播放修改光源的数值,见覆盖已制作好的光源。

Released under the MIT License.