Stochastic Tile-Based Lighting in HypeHype

SIGGRAPH 2025 Advances: STOCHASTIC TILE-BASED LIGHTING IN HYPEHYPE

1. 核心背景与挑战

HypeHype 是一个 UGC (用户生成内容) 平台,其核心挑战在于渲染技术必须跨平台(从 99 美元的廉价手机到高端 PC) 都能稳健运行。

这对渲染引擎(尤其是光照)提出了三项严苛的约束:

移动端渲染的“三重枷锁”

  1. 内存带宽 (Memory Bandwidth)

    • 这是最关键的瓶颈。廉价移动设备(约 15 GB/s)的带宽与现代主机(>500 GB/s)相差数十倍,仅与 20 年前的 Xbox 360 相当。

    • 带宽密集型操作会迅速导致发热和降频(Throttling)

  2. 渲染架构 (Rendering Architecture)

    • 移动 GPU 普遍采用 TBR (Tile-Based Rendering) 架构。

    • 核心优势: 渲染被切分为“Tile”(切片),在极快但极小的 On-Chip Memory (片上内存) 中完成,最后才将结果一次性写回主内存 (DRAM)。

    • 对算法的约束:

      • 必须尽可能使用 Pixel Shaders(而不是 Compute Shaders)来利用 TBR 架构的优势。

      • 必须最小化 Render Pass,以减少与主内存的昂贵往返(Roundtrips)。

      • 必须优先使用 FP16,因为移动 GPU 对其有双倍速率(Double-Rate)支持。

  3. 用户场景 (User Scenarios)

    • 创作者是“休闲用户”,而非专业技术美术。光照系统必须“即插即用”,无需繁琐调优。

    • 性能必须一致且可预测

    • 必须能处理极端且不可预测的光照场景

      • 光源聚集(Light Clumping): 用户可能“因为好玩”而在一个小房间里塞进 50 个阴影光源。

      • 动态光源: 光源可能在游戏中被大量(例如敌人死亡时)动态生成。

      • 不允许出现大的帧率下降或闪烁。


2. 现有方案评估(为什么不适用)

在设计新算法前,团队评估了两种主流方案,但它们都无法满足上述所有约束。

A. 传统切片式延迟光照 (Traditional Tile-Deferred Lighting)

  • 优点:

    • 良好的本地内存访问模式。

    • Wave Coherent 的光照评估,GPU 友好。

  • 致命缺陷:

    • 性能与光源数量线性相关

    • 在光源聚集或动态光源激增时,性能会急剧下降且完全不可预测

    • 强行限制每切片光源数,则会导致闪烁(Flickering)瑕疵。

B. 随机光照 (Stochastic Lighting, e.g., RESTIR)

  • 优点:

    • 固定成本(Fixed Cost),性能与场景光源复杂度解耦。
  • 致命缺陷(针对移动端):

    • 逐像素(Per-Pixel)采样

      • 高带宽消耗:均匀场景采样(Uniform Sampling)和时空重采样(Spatio-temporal Resampling)都是缓存极不友好(Cache-unfriendly)且带宽密集的操作。

      • Wave Divergence:每个像素随机采样到不同的光源,导致同一 Wave 中的线程执行不同代码路径、加载不同数据,严重损害 GPU 性能。


3. 解决方案:随机切片式光照 (Stochastic Tile-Based Lighting)

HypeHype 结合了上述两种方案的优点,设计了一种专为移动端 TBR 架构优化的新算法。

A. 核心思想

“从‘逐像素’采样 转移到 ‘逐切片’采样” (From Per-Pixel Sampling to Per-Tile Sampling)

  • 具体做法: 不再为每个像素采样光源,而是为一整个 Tile(切片)采样一组光源。该 Tile 内的所有像素共享这同一组光源样本。

  • 带来的优势:

    1. 大幅降低带宽: 采样成本被分摊到整个 Tile,而不是每个像素。

    2. 实现Wave Coherent: Tile 内的所有像素处理相同的光源数据,执行路径一致,数据加载高度连贯,完美契合 GPU 架构。

    3. 性能可预测: 成本与 Tile 数量(即屏幕分辨率)相关,而与场景光源复杂度(例如 50 个灯)解耦

  • 架构设计:

    • 所有 Pass 均可在 Pixel Shader 中高效实现,以充分利用 TBR 架构和帧缓冲压缩(Framebuffer Compression)。

B. 核心算法:两阶段分层蓄水池采样

为了在低成本下实现高质量的重要性采样(Importance Sampling),算法采用了一种两阶段(Two-Stage)采样流程。

目标: 采样时使用一个高质量的 PDF (概率密度函数),它能感知光源的可见性(如阴影)和 BRDF,但直接计算这个 PDF 非常昂贵。

流程:

  1. Stage 0 (CPU): 视锥剔除 (Frustum Culling)

    • 在 CPU 端对场景光源进行初步的相机视锥剔除。
  2. Stage 1 (GPU): 大切片采样 (Big Tile Sampling)

    • 将屏幕划分为较大的 Tile(例如 64x64)。

    • 使用 SRS (分层蓄水池采样)

    • 使用一个低成本、粗略的 PDF(只做大致的重要性近似)为每个“大 Tile”采样出一个光源子集(例如 32 个光源)。

  3. Stage 2 (GPU): 小切片重采样 (Small Tile Resampling)

    • 在常规的“小 Tile”(例如 16x16)上。

    • 再次使用 SRS,但这次是从对应“大 Tile”的光源子集中进行重采样,选出最终的几个光源(例如 4 个)。

    • 在这一步,使用一个高质量的 PDF,因为它只在小范围内(32 个光源中)计算,成本可控。这个 PDF 会包含更精确的可见性(Visibility)和 BRDF 项

C. 渲染管线 (Rendering Pipeline)

  1. (采样阶段)

    • 执行上述的 Stage 1 (Big Tile)Stage 2 (Small Tile) 采样,结果(光源列表)写入 Buffer。
  2. 延迟阴影 Pass (Deferred Shadow Pass)

    • 解耦阴影计算。

    • 读取“小 Tile”的光源样本,评估这些光源在 Tile 内所有像素的阴影项 (Shadow Terms)

  3. 光照 Pass (Lighting Pass)

    • 读取 G-Buffer 数据。

    • 读取该 Tile 共享的“光源样本”和对应的“阴影项”。

    • 应用正确的光照权重(Light Weighting),计算最终光照结果。


阶段一:大切片光照采样 (Big Tile Sampling)

这个阶段是整个两阶段采样的第一步。它的核心目标是:从海量的场景光源中,为每个“大切片”(Big Tile)高效地筛选出一个小型的、具有代表性的候选光源子集(Candidate Lights)

1. 核心目标与参数

  • 输入: 场景中所有经过视锥剔除的光源列表。

  • 输出: 为每个“大切片”生成一个包含 16 个独立光源的“蓄水池”(Reservoir)。

  • 切片尺寸: 每个“大切片”(P-Tile)覆盖 128x128 像素的区域。

2. 核心算法:分层蓄水池采样 (SRS)

为了从所有光源中选出这 16 个,算法并未使用简单的均匀采样,而是使用了 分层蓄水池采样 (Stratified Reservoir Sampling, SRS)

  • 为什么用 SRS?

    • 无放回采样 (Without Replacement): 它能保证选出的 16 个光源互不重复 (No Duplicates),这对于小型蓄水池(只有 16 个空位)的空间利用率至关重要。

    • 高质量代表性: 采样是基于一个概率密度函数 (PDF) 进行的,能选出对这个 Tile 更重要的光源,而不仅仅是随机光源。

    • GPU 友好: SRS 的一个关键特性是每个蓄水池槽位(Slot)都可以独立并行计算,这使得它非常适合用 Pixel Shader 在 GPU 上高效实现。


3. 关键实现 (1): 低成本的 PDF 计算

SRS 采样的质量取决于 PDF(概率密度函数)的质量。但为 128x128 区域精确计算 PDF 代价极高。因此,HypeHype 采用了一种非常低成本的**粗略估算(Rough Estimate)**方法。

  • 输入数据:

    • Hi-Z Buffer (Hierarchical Min/Max Depth): 在 G-Buffer Pass 之后生成的层级深度图。

    • 算法会读取 LoD 6 的 Hi-Z 数据,该层级的分辨率刚好与 128x128 的大切片尺寸相匹配,从而立即获得该 Tile 的最小深度 (Min Z)最大深度 (Max Z)

  • PDF 计算步骤:

    1. 在 Tile 中心的 Min Z 和 Max Z 之间构建一条虚拟的深度线段 (Central Line Segment)

    2. 将所有光源统一视作点光源 (Omni Light)

    3. 计算每个光源到这条线段最近点光照强度 (Illuminance)

    4. 这个光照强度就被用作该光源对 Tile 影响力的近似 PDF。

  • 评价:

    • 优点: 计算极快;并且 PDF 值处处为正,可以确保采样是无偏的 (Unbiased)

    • 缺点: 它隐含地假设 Tile 内的像素在深度上是均匀分布的(这显然不总是成立)。但讲者表示,这个简单的 PDF “目前已经足够好”


4. 关键实现 (2): 16 槽位 SRS 并行流程

为了在 Pixel Shader 中高效并行地为 16 个槽位采样,算法采用了一种“分流”策略:

  • 核心思想: 将所有场景光源“切分”成 16 个独立的流 (Streams),每个流专门为蓄水池的 1 个槽位(Slot)供源。

  • 执行流程:

    1. 初始化: 场景光源列表中的第 0 到 15 号光源,直接、确定性地放入蓄水池的 0 到 15 号槽位。

      • 目的: 这是针对低光源数量场景(如只有 5 盏灯)的关键优化,能显著降低这些简单场景下的采样噪声。
    2. 迭代采样: 从第 16 号光源开始,循环遍历剩余所有光源,每次步进 16i += 16)。

    3. 流随机化 (Randomization): 在每次迭代中,使用一个随机偏移量 (Random Offset) 对 16 个流的索引进行取模(Modulo 16) 错位。

      • 目的: 防止高权重光源(例如一个很亮的大灯)总是在不同 Tile、不同帧上竞争同一个槽位,从而导致采样不稳定。
    4. 独立采样: 每个槽位(Slot 0...15)在各自对应的流(Stream 0...15)上,独立执行一次加权蓄水池采样 (Weighted Reservoir Sampling, WRS)。它们会计算当前光源的 PDF,并按概率决定是否用这个新光源替换槽位中已有的光源。

5. 存储与效果

  • 数据存储 (32-bit):

    • 每个采样结果被压缩存储为一个 32-bit 数据:

      • Light Index (16 bits): 光源在列表中的索引。

      • Light Weight (16 bits): 光源的采样权重,即 PDF 的倒数

    • 为了缓存友好,16 个样本(对应一个 Big Tile)被打包存在一个 4x4 像素块中。整个蓄水池 Buffer 非常小(例如 1080p 仅需 16x36 像素)。

  • 效果对比:

    • 讲座展示的对比图明确显示:在进入下一阶段(Small Tile Resampling)时,如果从 SRS 选出的 16 个光源中采样,得到的图像噪声(Noise)显著低于16 个均匀采样(Uniform Sampling) 的光源中采样的结果。

    • 结论: 这个阶段(Big Tile Sampling)是高效且必要的,它成功地为下一阶段提供了高质量、低噪声的输入。


阶段二:小切片重采样 (Small Tile Resampling)

这个阶段的目标是:从上一阶段(Big Tile)筛选出的 16 个候选光源中,为每个“小切片”(Small Tile,例如 16x16)最终选出 1 到 4 个光源用于着色。

1. 核心挑战:切片瑕疵 (Tiling Artifacts)

如果简单地在 16x16 的网格上进行采样,会导致两个严重的视觉问题:

  1. 小切片瑕疵 (Small Tile Artifacts):

    • 原因: 规则的 16x16 网格导致采样具有高度相关性 (Correlation),人眼会明显感知到网格边界。
  2. 大切片瑕疵 (Big Tile Artifacts):

    • 原因: 在小切片中心点 “点采样”(Point Sampling) 其所属的 Big Tile 蓄水池,会导致在 128x128 的大切片边界上出现明显的跳变。

2. 解决方案:解耦采样模式

为了同时解决上述两个问题,HypeHype 采用了一套精妙的采样模式:

A. 方案一 (解决小切片瑕疵): 交错采样 (Interleaved Sampling)

  • 核心思想: 打破 16x16 的刚性网格,将 4 个相邻小切片的像素交错分布在一个更大的 32x32 像素足迹 (Footprint) 上。

  • 具体实现:

    1. 预计算 64 种 2x2 像素四方块 (Quad) 的分布模式

    2. 使用 高斯泊松分布 (Gaussian Poisson distribution) 来生成这些模式,使得采样点倾向于向 Tile 中心集中,同时避免来自同一个 Tile 的采样点彼此相邻

    3. 这 64 个 2x2 的四方块被分配给 4 个不同的 Tile(红、绿、蓝、黄),然后在整个屏幕上平铺。

  • 效果: 成功消除了 16x16 的小切片网格瑕疵。

B. 方案二 (解决大切片瑕疵): 随机双线性过滤 (Stochastic Bilinear Filtering)

  • 核心思想: 与其让一个小切片 100% 属于一个大切片,不如在它们之间实现平滑过渡。

  • 具体实现:

    • 当一个小切片需要采样时,它会在自己的中心点上施加一个随机偏移量 (Random Offset)

    • 这个偏移后的新位置决定了它将从哪个(或哪几个)大切片的蓄水池中进行采样。

  • 效果: 实现了大切片之间(例如 128x128 边界)的平滑过渡,消除了边界瑕疵,使噪声更适合时空降噪(TAA)处理。


3. 核心算法:高质量 PDF 的随机评估

在小切片阶段,算法需要一个更精确、更昂贵的 PDF 来选出最终的 1-4 个光源。

A. 评估方法:随机 PDF 评估 (Stochastic PDF Evaluation)

由于在 Tile 的 256 个像素上计算精确 PDF 代价过高,算法采用了随机采样的近似方法:

  1. 随机选取采样点: 从该 Tile 拥有的 64 个 2x2 四方块位置中,随机选取 4 个采样点

  2. 计算平均反射亮度: 在这 4 个点上,计算平均反射亮度 (Average Reflected Luminance),并将其用作 PDF。

  3. PDF 公式: PDF 的核心是 光照 = 光源的阴影化光照强度 × BRDF

    • PDF ≈ Shadowed Illuminance × BRDF

B. 关键性能妥协 (Performance Compromises)

为了让这个 PDF 计算得足够快,团队做出了几个关键的工程妥协:

  • 妥协 1:单色近似 (Monochromatic Approximation)

    • 理想情况: 应计算 RGB 的 Illuminance × BRDF,然后取结果的亮度。

    • 实际做法: 先分别计算光源和材质的标准亮度 (Luminous Efficiency),然后将这两个标量相乘。

    • 代价: 性能更高,但损失了精度(例如,无法正确评估“红光”照射“蓝色表面”时 PDF 应该很低的情况)。

  • 妥协 2:PDF-BRDF 近似 (BRDF Approximation)

    • 理想情况: 最终着色使用 Lambert + GGX

    • 实际做法: 在 PDF 计算中,使用一个更便宜的近似:Lambert + Blinn-Phong。实践证明这是一个足够好的近似。

  • 妥协 3:材质参数平均 (Material Parameter Averaging)

    • 先将 4 个采样点的材质参数(如 Albedo)进行平均,然后用这个平均值计算 4 次光照;而不是计算 4 次独立的光照再平均。

4. 挑战与解决方案:处理采样偏差 (Bias)

  • 问题: 仅用 4 个随机点估算 PDF 会引入偏差 (Bias)

  • 典型案例: 某个 Tile 只有一小部分被照亮,但随机的 4 个采样点可能全部恰好落在了阴影中

  • 结果:

    1. 算法错误地认为该 Tile 的 PDF 为 0,导致不会拾取任何光源

    2. 这会产生 “带偏差的光照边缘噪声” (Biased lighting edge noise),在 TAA 处理后,表现为局部区域轻微变暗

  • 缓解措施 (Mitigation):

    • 这是一个工程上的“妥协”:在将阴影项(一个 0-1 的值)乘入 PDF 之前,为其添加一个微小的偏移量 (Small Offset)

    • 这能防止 PDF 轻易变为 0,在降噪后,这种偏差基本不可见。


5. SRS 实现与权重解偏 (Weight Unbiasing)

  • SRS 流程:

    • 与 Big Tile 阶段类似,将 16 个候选光源分为 N 个流(N 为小切片蓄水池大小,例如 4)。

    • 随机打乱 (Shuffle) 流的顺序,以防止高权重的光源在相邻的小切片上“霸占”同一个蓄水池槽位。

  • 关键步骤:权重解偏 (Unbiasing the Bias)

    • 我们在 Big Tile 阶段已经基于一个粗略的 PDF ( ) 进行了采样。

    • 我们现在又计算了一个精确的 PDF ( )

    • 为了保证最终采样的无偏性,在 Small Tile 阶段进行 SRS 时,使用的概率必须是重采样概率 (Resampling PDF),即:

    • 最终存储在蓄水池中的权重 (Weight) 也就是这个概率的倒数。

  • 存储:

    • 最终的 1-4 个光源样本(32-bit 的 Index + Weight)被写入一个非常小的 RT 中(1080p 下仅需 32-128 KB)。

阶段三:延迟阴影 Pass (Deferred Shadow Pass)

在“小切片重采样”选定最终的 1-4 个光源后,管线并不立刻进行光照计算,而是进入一个独立的 Pass 专职计算阴影。

1. 核心思想:解耦与降分辨率 (Decoupling & Resolution)

  • 关键优化: 阴影计算与最终的光照着色 Pass 完全解耦 (Decoupled)

  • 降频计算: 阴影不是逐像素(Per-Pixel)计算的,而是每 2x2 像素的四方块 (Quad) 仅计算一次

  • 效果: 阴影评估的计算量、采样次数、带宽消耗被直接削减为原来的 1/4

2. 解耦带来的架构优势

将阴影计算移出光照着色器(Lighting Shader)带来了多项显著好处:

  1. 大幅简化光照着色器:

    • 光照 Pass 不再需要处理复杂的、区分光源类型(聚光灯、点光源、平行光)的阴影采样逻辑。

    • 这显著降低了光照 Pass 的Wave Divergence、数据访问复杂度和 VGPR (GPR) 压力

  2. 提升灵活性与扩展性:

    • 阴影的实现(例如使用 Shadow Map、Ray Tracing 或是其他技术)可以被随意替换或升级,而无需修改复杂的光照着色器。

3. 实现细节:阴影图集 (Shadow Map Atlas)

HypeHype 的阴影数据存储在一个持久化、动态管理的 16-bit 深度图集 (Atlas) 中。

  • 光源类型适配:

    • 聚光灯 (Spot Lights): 使用标准的透视阴影图 (Perspective Shadow Maps)

    • 点光源 (Omni Lights): 使用 八面体阴影图 (Octahedral Map / Octad Map) 来代替 6 个面的 CubeMap,这种投影方式更节省图集空间。

  • LOD (Level of Detail):

    • 根据光源距离摄像机的远近,动态缩放(Resize) 其阴影图的分辨率,以此平衡阴影质量和图集存储开销。
  • 阴影图集更新:

    • 动静分离:

      • 静态阴影图 (Static Maps): 仅包含静态几何体。只在光源变换或阴影分辨率改变时才重绘 (Update)

      • 动态阴影图 (Dynamic Maps): 包含动态几何体,每帧持续重绘

    • 负载均衡 (Load Balancing):

      • 为了避免大量动态阴影图在同一帧更新导致性能尖峰 (Spikes),系统使用一个优先级队列 (Priority Queue System)

      • 这会将阴影图的渲染任务分摊 (Spread) 到多个帧上执行。

4. 实现细节:滤波与存储

  • 阴影滤波 (Shadow Filtering):

    • 采用 4-Tap 硬件 PCF(Percentage-Closer Filtering)。

    • 结合 随机 PCF (Stochastic PCF) 来产生更柔和、更自然的阴影边缘。

    • 每次阴影项评估(每 2x2 Quad 一次)仅需一次 Gather 操作

  • 光照效果应用:

    • 在这个 Pass 中,除了计算阴影,还会一并应用光源的 IES 光域网文件 和聚光灯的角度衰减 (Angular Falloff)

    • 注: IES 同样也在上一阶段的 PDF 计算中被使用,以降低采样噪声。

  • 阴影项存储 (Shadow Term Storage):

    • 计算出的阴影项(一个 0 到 1 的遮挡值)被存储为 8-bit 格式以节省带宽。

    • 抗色带 (Anti-Banding): 为了防止 8-bit 精度带来的色带瑕疵,算法会为其添加 1-bit 的时域噪声 (Temporal Noise),后续的 TAA(时域抗锯齿) 会将其平滑掉。

    • 数据布局: 阴影项被存储在 8x8 像素的块(Blocks) 中,这对应了上一阶段小切片的 64 个交错 Quad 样本,这种布局对 GPU Wave 更加友好。


5. 瑕疵与权衡 (Artifacts & Trade-offs)

  • 主要问题: “每 2x2 Quad 共享一个阴影值” 这一优化的最大缺陷在于物体轮廓(Object Silhouettes) 和阴影边缘。

  • 具体表现: 一个 2x2 的 Quad 可能恰好跨越了阴影边界,本应是 2 个亮、2 个暗,但现在被强制统一为同一个值(例如全亮或全暗)。

  • 缓解措施:

    1. 随机切片采样 (Randomized Tile Sampling): 在空间上打乱了瑕疵的规律性。

    2. TAA: 在时间上平滑掉(Mitigate)这种瑕疵。

  • 最终效果: 瑕疵在大多数情况下很轻微。如果特定场景无法接受,系统也保留了回退(Fallback)到全分辨率(Per-Pixel) 阴影计算的能力,但这会牺牲性能。


阶段四:最终光照评估 (Final Lighting Evaluation)

这是管线的最后一个阶段,负责将所有采样和阴影数据合成为最终的光照。

1. 核心思想与挑战

  • 目标: 遍历屏幕上的每一个像素,获取它所属的“小切片”(Small Tile)的 1-4 个光源样本,并结合阴影数据,计算最终光照。

  • 计算公式:

    • 其中 为 1 到 4。
  • Pixel Shader 的挑战:

    • 由于 HypeHype 采用了 Pixel Shader 来实现所有 Pass(以兼容移动端 TBR),一个核心问题是:屏幕上的一个像素,如何知道它应该去哪里读取 Tile 数据和阴影数据?

    • 解决方案: 使用一个 16x16 的反向查找表 (Inverse Slot LUT)。这个 LUT 存储了屏幕像素坐标到“交错采样(Interleaved)”的 Tile 索引和样本索引的映射关系。

  • Compute Shader 的替代方案:

    • 讲者提到,如果使用 Compute Shader,这个过程会更简单。可以直接在一个 Tile 内进行计算,然后使用散射写入 (Scatter Writes) 将结果写回光照 Buffer,无需反向查找。

2. 架构优势

  1. 固定成本 (Fixed Cost):

    • 由于每个 Tile 只处理 1-4 个光照样本,这个 Pass 的性能开销与场景光源复杂度(例如 50 或 500 个灯)完全无关
  2. 统一着色器 (Unified Shader):

    • 因为阴影计算在上一阶段被解耦 (Decoupled),这个光照着色器本身非常简单和统一,无需处理不同光源类型(点、聚光灯等)的复杂逻辑。

    • 这极大地降低了 GPU 的Wave Divergence


核心挑战:降噪 (The Core Challenge: Denoising)

这是目前该算法面临的最大挑战

1. 目标:用 TAA 取代独立降噪器

  • 动机: 独立的时空降噪 Pass(如 SVGF)会消耗大量的内存带宽 (Bandwidth),这在移动端是不可接受的。

  • 方案: 团队希望改进现有的 TAA(时域抗锯齿),使其能“顺便”完成降噪任务。

2. 核心问题与瑕疵

  • 问题: 标准 TAA 与随机光照(Stochastic Lighting)不兼容

  • 根本原因: 标准 TAA 为了防止鬼影(Ghosting),会使用一个 3x3 邻域的历史色彩钳制 (History Color Clamping)

  • 失败场景:

    1. 在一个 3x3 邻域内,当前帧的像素 A 可能采样到了光源 L,但它的邻居 B、C、D... 都没有采样到 L。

    2. 当 TAA 试图混合历史帧时,它会查看 A 的邻居的历史数据(B、C、D...),发现它们的历史亮度都很低。

    3. TAA 的色彩钳制逻辑会错误地认为 A 的高亮度(来自光源 L)是一个“鬼影”或噪点,从而强行将其亮度压低

  • 最终瑕疵: 导致闪烁的光斑 (Flashing lighting splotches),严重破坏画面稳定性。

  • 状态: 这是一个活跃的研发中(Active R&D) 领域。


性能与结果分析

1. 视觉质量

  • 1 SPP vs 4 SPP (每像素采样数):

    • 4 SPP 能更好地还原高频细节,例如清晰的高光反射 (Specular Reflections)

    • 1 SPP 噪声更强,但在 TAA 之后,结果是“可接受的”(Acceptable),没有重大差异。

  • Big Reservoir Size (大切片蓄水池大小):

    • 减小蓄水池大小(例如从 16 降到 8)会导致画面整体变暗 (Darkening)

    • 原因: 这是一种偏差 (Bias)。为了抑制“萤火虫”(Fireflies,即权重极高的噪点),算法会对采样权重进行封顶(Capping)。当蓄水池太小时,选不到足够好的光源,导致更多像素的权重被封顶,从而引入了这种变暗的偏差。

    • 结论: 16 是一个平衡点,能提供更丰富的光源集,减少噪声。

2. 性能数据

讲座对比了三档设备:Adreno 610 (廉价手机)Adreno 830 (高端手机)RTX 4070 (PC)

  • 测试 1 (对比“仅太阳光”):

    • 在启用 1 SPP 的 STB 光照后,开销增长非常小

    • 廉价手机 (Adreno 610) 上仅增加了 +0.66 毫秒

  • 测试 2 (50 个动态本地光源):

    • 廉价手机 (Adreno 610):+1.5 毫秒

    • 高端手机 (Adreno 830):+0.5 毫秒

    • 关键瓶颈: 在这个场景下,“小切片重采样 (Small Tile SR Pass)” 的开销(在廉价手机上)增长了 3 倍。因为它现在需要从一个 充满 了 16 个有效候选者的 Big Reservoir 中进行重采样,而不再是像“仅太阳光”场景那样简单。

    • 4 SPP 在廉价手机上非常昂贵,但在高端机和 PC 上是可接受的。

  • 测试 3 (500 个光源):

    • “大切片采样 (Big Tile SRS Pass)” 的开销依然微不足道(0.02 毫秒)

    • 结论: 算法的性能瓶颈不在于场景光源数量,而在于小切片重采样的计算复杂度


总结与未来工作

1. 核心贡献

  • 提出了一种新的随机光照算法,将采样从逐像素 (Per-Pixel) 转移到 逐切片 (Per-Tile)

  • 这极大地削减了带宽消耗GPU Wave Divergence,使得复杂动态光照在廉价移动设备上成为可能。

2. 未来的工作

  1. Compute Shader 实现:

    • 探索 CS 变体,以进一步优化。

    • 最大机遇: 使用 CS 将最后三个 Pass(小切片重采样、阴影、光照)合并为一个大 Pass。这在 PC/主机上会有巨大提升,在某些移动设备上也可能有收益。

  2. 降噪 (Denoising):

    • 最大的挑战。 必须解决 TAA 的兼容性问题。

    • 备选方案: 尝试类似 RESTIR 的方法,从前一帧的小切片蓄水池中进行重采样,以增加时域稳定性。

  3. PDF 改进 (Big Tile):

    • 当前的“中心线段”PDF 太过简单,当 Tile 内深度分布不均时(例如只有近处和远处)效果不佳。

    • 改进方向: 让 PDF 与 Tile 内的像素深度分布 (Pixel Depth Distribution) 成正比(可能利用 Hi-Z)。

  4. PDF 改进 (Small Tile):

    • 当前“4 采样点”的 PDF 评估既昂贵又引入了偏差。

    • 改进方向: 尝试将其降为 “1 次保守评估 (1 Conservative Evaluation)”——使用 Tile 包围盒进行一次保守的阴影和 BRDF 评估(可能需要一个模糊的 G-Buffer)。

    • 改进方向: 在 PDF 评估中加入色调映射 (Tone Mapping),以降低高光区域的噪声。

  5. 功能扩展:

    • 将采样方案扩展到体积 (Volumes),以支持透明物体 (Transparency)体积光 (Volumetric Lighting)(例如在光线步进时进行采样)。