Activision 大规模全局光照系统
Large-Scale Global Illumination at Activision
背景与挑战
项目背景
- 该系统服务于 《使命召唤》(Call of Duty) 系列,尤其是 Warzone(战争地带) 等大地图模式
- 核心挑战:在 大规模场景 中实现 60fps 实时全局光照,同时需跨越 多代硬件平台
可扩展性矛盾
- 预计算光照(Pre-computed Lighting) 是引擎的核心依赖——大地图 + 60fps + 多硬件代际的前提下,实时计算 GI 不现实
- 但同时需要控制 下载包体大小 以保证用户体验
- 场景规模持续增长(如 Blackout 模式、Warzone 模式支持 100+ 玩家同时竞技),与小包体目标形成直接冲突
演讲路线图
- 光照的采样与表示方式(Irradiance Volumes)
- 球谐函数(Spherical Harmonics)的通用编码方案
- 预计算光照数据的高质量压缩新方法
Warped Irradiance Volumes(变形辐照度体积)
基本概念:Irradiance Volume(辐照度体积)
- 场景被划分为 体素(Voxel) 网格,每个体素存储该位置的 辐照度(Irradiance) 信息
- 辐照度以 方向性基函数(如 球谐函数 / Spherical Harmonics )编码,使得可以在场景任意点重建 方向性辐照度
- 优势:
- 提供 无缝统一 的光照方案
- 对 静态几何体、动态几何体、体积雾、粒子 都能良好适配
密集体积的可扩展性问题
- 使用 密集(Dense)3D 体积 不可扩展——内存占用会严重限制体积分辨率
- 常见解法是引入 自适应性(Adaptivity):
- 单层/多层空间层级结构(如八叉树)
- 哈希查找(Hash Lookup)
- 但这些方案需要注意 层级边界/块边界处的连续性重建,否则会出现接缝(seam)
- 虽然技术上不难解决,但会带来额外的 计算或内存开销
Activision 的方案:Domain Warping(域变形)
核心思路不是用空间层级结构,而是 对辐照度体积的空间域进行变形(Warp),使其自适应地包裹场景中细节密集的区域。
具体流程
- 射线探测深度范围:从场景 上方和下方 发射探测射线(Feeler Rays),获取地图的 深度边界(Depth Bounds)
- 识别稀疏细节区域:根据上下射线的命中结果,确定场景中实际需要高精度光照的区域(如森林、树木等),得到一个 细节遮蔽区域(图中黄色区域)
- 归一化高度查找:在做体积查找时,计算每个点的 归一化高度值(Normalized Height / Bar Height),然后执行常规的 3D Volume Texture Lookup
- 平滑高度变化:对高度变化进行平滑处理,避免突变,从而 消除变形伪影(Warping Artifacts)
关键优势
- 自适应高度方向分辨率:体积被"挤压"到有几何细节的地方,无细节的空旷区域被压缩,资源利用率高
- 重建始终连续:因为是连续的域变形而非离散的层级拼接,不存在块边界接缝问题
- 实现简洁:不需要维护复杂的层级结构、不需要在层级间做特殊的混合/插值处理
- 查找操作本质上只是一次 标准 3D 纹理采样,硬件友好、开销极低
概念总结图示
传统方案:Dense Volume → 内存爆炸
Adaptive Hierarchy → 边界接缝 + 额外开销
Activision 方案:
场景高度空间 → [Feeler Rays 探测] → 归一化高度映射 → Warped Volume
↓
连续域变形 = 自适应分辨率 + 无接缝 + 低查找开销
关键术语速查
| 术语 | 含义 |
|---|---|
| Irradiance Volume | 将场景划分为 3D 体素网格,每个体素存储辐照度的方向信息 |
| Spherical Harmonics (SH) | 球谐函数,用于紧凑编码球面上的方向性信号(如辐照度) |
| Voxel | 体素,3D 空间中的离散采样单元 |
| Adaptivity | 自适应性,根据场景复杂度动态调整分辨率 |
| Domain Warping | 域变形,通过非线性映射将体积空间集中到细节区域 |
| Feeler Rays | 探测射线,用于从上下方向测量场景的高度/深度范围 |
| Normalized Height | 归一化高度,将实际高度映射到 [0,1] 范围用于纹理查找 |
| Pre-computed Lighting | 预计算光照,离线烘焙后在运行时直接读取的光照数据 |
体积光照采样中的漏光问题与解决方案
朴素体积采样的根本问题
漏光伪影(Light/Darkness Leaking)
- 对每个 体素(Voxel) 随机选取一个位置,再随机选取一个方向,发射 Final Gather 射线 来积累辐照度
- 结果:场景中到处出现 亮光泄漏 或 暗影泄漏 的伪影
- 根本原因:体素分辨率 与 几何特征尺寸 之间的 不匹配(Mismatch)
- 一个大体素可能同时覆盖建筑外墙和室内空间,导致室外的亮光"渗入"室内,或室内的暗影"渗出"到室外
直观解释
以一栋带门的建筑为例:
- 大体素的中心落在建筑边缘处,同时覆盖室内和室外区域
- 在该体素范围内随机采样位置 → 有的采样点在室外(命中天空穹顶 → 亮值),有的在室内(命中屋顶 → 暗值)
- 蒙特卡洛估计将所有样本 等权平均,得到一个 既非室内也非室外 的混合值
- 这个"半亮半暗"的结果在重建时产生明显的视觉错误
传统解决方案及其局限
| 方案 | 原理 | 局限 |
|---|---|---|
| 室内/室外分离体积 | 将室内和室外分配到不同的体积中,防止交叉采样 | 需要美术手动标记区域;对 非方盒形状(如 V 形屋脊)需要大量分割平面,工作量大 |
| 法线感知重建 | 在重建辐照度时考虑表面法线方向,过滤掉不合理方向的贡献 | 只是缓解症状,未解决根因——体素与几何的分辨率不匹配依然存在 |
基于可见性的样本验证(Visibility-Based Sample Validation)
核心思想
并非所有采样位置对最终结果同等重要。我们拥有 先验知识:
- 玩家/摄像机 更大概率 处于室外(开阔区域)
- 这构成了一个关于摄像机位置的 先验概率分布(Prior Distribution)
- 将这个先验概率模型融入采样过程,对样本进行 有效性筛选
算法流程
第一步:生成候选采样点
- 在体素内生成一组 候选 3D 位置(与朴素方法相同)
第二步:可见性验证射线(Visibility Validation Rays)
对每个候选采样点,向周围发射一组 验证射线:
- 室内样本(如位于建筑内部):验证射线很快就会命中附近的墙壁/天花板 → 命中距离很短
- 室外样本(如位于屋顶上方):验证射线命中距离 非常远,甚至直接看到天空
第三步:基于命中距离的筛选
- 设定一个 固定距离阈值(Threshold)
- 验证射线的命中距离 大于阈值 → 样本标记为 有效(Valid) ✅
- 验证射线的命中距离 小于阈值 → 样本标记为 无效(Invalid) ❌ → 丢弃
第四步:仅使用有效样本进行光照计算
- 对每个 有效样本(绿色样本) 发射方向性射线,收集辐照度
- 按照 三线性权重(Trilinear Weighting) 将贡献 溅射(Splat) 到受影响的体素中心
流程可视化
候选样本 → [可见性验证射线] → 命中距离判定
↓
┌─────────────┴─────────────┐
↓ ↓
命中距离 > 阈值 命中距离 < 阈值
→ 有效样本 ✅ → 无效样本 ❌(丢弃)
↓
从有效样本发射方向性射线
↓
三线性溅射到体素中心
效果对比
| 场景特征 | 朴素采样 | 可见性验证采样 |
|---|---|---|
| 屋顶区域 | 严重的亮光/暗影泄漏 | 基本消除 所有泄漏 |
| 门洞/窗户下方 | 错误的混合光照 | 保留正确的阴影细节——有可见性的地方有光,该暗的地方暗 |
| 建筑外壁周围 | 丑陋的暗色斑块 | 暗色斑块 完全消除 |
| 狭窄遮蔽区域 | 不可控 | 仍然保持 合理的阴影效果 |
| 残余噪声 | 结构性漏光伪影 | 仅剩 蒙特卡洛噪声(随机噪声,非结构性错误) |
方法本质
- 该方法利用 "大可见区域 = 更可能是玩家所在位置" 的先验,将采样偏向于对最终渲染结果 真正有贡献 的区域
- 不需要美术手动标记室内/室外,也不依赖几何法线——是一种 自动化、数据驱动 的漏光修复方案
球谐函数与低阶物理合理性问题
球谐函数(Spherical Harmonics)回顾
- 球谐函数(SH) 是 球面上有限能量函数的正交归一化基底
- 在图形学中广泛用于紧凑编码 方向性辐照度/辐射度信号
低阶 SH 投影的核心问题
无约束最小二乘投影的缺陷
当将高阶 SH 信号(或连续球面信号)通过 无约束最小二乘法(Unconstrained Least Squares) 投影到 低阶 SH 基底 时,会产生两类严重问题:
振铃伪影(Ringing Artifacts)
- 球谐函数的低阶截断本质上是 带限近似(Band-limited Approximation)
- 对于包含尖锐特征(如硬阴影边界、点光源方向)的信号,截断会引发 吉布斯现象(Gibbs Phenomenon)——在不连续点附近出现振荡
- 在辐照度重建中表现为 局部出现负值(物理上不可能的辐照度)
颜色偏移(Color Shift)
- 不同颜色通道的 SH 系数被独立截断
- 截断误差在各通道上不同步,导致重建出的方向性光照出现 原信号中不存在的颜色
- 例如:参考辐射度中没有红色成分,但低阶 SH 重建后却出现了 明显的红色偏移
示例说明
- 参考信号:二阶 SH(L2)编码的辐射度
- 降阶操作:通过正交基直接 丢弃二阶基函数,保留一阶 SH(L1)
- 结果:
- 球面上出现 负值区域(non-negative 约束被违反)
- 出现不应存在的 颜色偏移
- 最终结果 不满足物理合理性(Physically Plausible)
问题总结
根本矛盾:SH 的无约束投影是纯数学操作(最小化 误差),但 物理光照信号必须满足非负性约束。数学最优解 ≠ 物理合理解。
关键术语速查
| 术语 | 含义 |
|---|---|
| Light Leaking | 由于体素分辨率不足,光照信息跨越几何边界错误传播 |
| Final Gather Ray | 从采样点发射的射线,收集来自场景的间接光照贡献 |
| Trilinear Splatting | 将采样贡献按三线性插值权重分配到周围 8 个体素中心 |
| Visibility Validation | 通过发射验证射线判断采样点是否处于"开阔"区域的预筛选步骤 |
| Prior Distribution | 先验概率分布——此处指摄像机更可能处于室外/开阔区域的假设 |
| Ringing Artifacts | SH 低阶截断引起的振荡伪影,类似吉布斯现象 |
| Color Shift | SH 投影误差导致各颜色通道不一致,产生原信号中不存在的颜色 |
| Physically Plausible | 物理合理性——辐照度/辐射度必须为非负值 |
球谐函数的去振铃方法与空间域表示
振铃伪影(Ringing Artifacts)的两类经典修复方案
方案一:窗函数缩减高阶系数(Windowing)
- 核心思路:将高阶 SH 系数 向零收缩(Shrink toward zero),使得重建函数保持 非负性(Non-negativity)
- Pike & Sloan 方法:使用搜索例程找到 最小窗系数(Minimal Window Coefficient)
- 对于 线性 SH(L1),该问题存在 简单的解析解
方案二:修改重建方式(Modified Reconstruction)
- Habel 方法:在 方向性分量(Directional Component) 和 非方向性分量(Non-directional Component) 之间进行插值,确保满足非负性
- 局限:
- 基本 只适用于线性 SH,推广到更高阶并不直观
- 非负性约束本身可能不够——即使函数非负,仍可能出现 颜色偏移/失真(Color Distortion)
非负性约束的不足
- 应用窗函数后,辐照度函数确实变为球面上的 非负函数
- 但在球面某些区域仍然可观察到 红色偏移(Red Color Shifts) 等颜色失真
- 这说明仅约束非负性是不够的——需要更 通用的约束(如 色彩空间边界约束,类似 Temporal AA 中的颜色裁剪/Clamping 思想)
从频率域到空间域:为什么需要空间域表示
问题本质
- SH 展开本质上是 频率域表示(Frequency Domain Representation)
- 每个 SH 基函数在 整个球面上具有全局支撑(Global Support)
- 因此,很难对 SH 系数施加 逐点约束(Pointwise Constraints),如"某方向上的辐照度值必须落在某个色彩空间范围内"
频率域表示(回顾)
目标函数 被展开为 SH 基函数的线性组合:
其中系数通过 内积 获得(因为 SH 基是 正交归一 的):
空间域表示(Spatial Domain Representation)
设想一种不同的表示方式:
- 系数不再是 SH 系数,而是目标函数在 一组固定球面点 处的 函数值
- 基函数 是某种待确定的 对偶基函数(Dual Basis Functions)
- 这种表示的 核心优势:系数就是函数值本身 → 直接对系数施加约束 = 直接对函数值施加约束 → 颜色空间约束变得自然而简单
再生核(Reproducing Kernels):连接两种表示的桥梁
再生核的定义
对于球面上的固定点 ,定义 再生核函数(Reproducing Kernel):
即:将所有 SH 基函数在 和 处的值逐项相乘后求和。
再生性质(Reproducing Property)
含义:目标函数 与关于点 的再生核做内积,恰好得到 在 处的函数值。
这一性质是整个空间域表示的数学基础。
与加法公式的关系
利用 球谐函数加法定理(Addition Theorem),可以直接看出:
其中 是 勒让德多项式, 是 与 之间的夹角。
因此,每个 阶的再生核本质上就是一个 Zonal Harmonic(带谐函数)——以 方向为轴的旋转对称函数。
基与对偶基的构建
基向量集合
- 选取球面上 一组不同的方向
- 对应的再生核 构成基向量
- 线性无关条件:只要选取的方向 互不相同,即可保证线性无关 → 构成一组 基(Basis)
恰好完备 vs. 超完备
| 情况 | 基向量数 = SH 系数数 | 基向量数 > SH 系数数 |
|---|---|---|
| 名称 | 基(Basis) | 框架(Frame) |
| 对偶基确定方式 | 双正交条件(Bi-orthogonality) 唯一确定 | 使用 典范对偶(Canonical Dual) |
典范对偶(Canonical Dual)—— 超完备情况
定义 核矩阵(Kernel Matrix) :
- 将每个基向量 的 SH 系数作为列向量,排列成矩阵
由于超完备,( 为共轭转置/转置)是 可逆的。
典范对偶 定义为:
这是超完备框架下对偶基的一个 合理且唯一的规范选择。
两种表示之间的变换算子
频率域 → 空间域
- :SH 系数向量(频率域表示)
- :函数在各采样点 处的值向量(空间域表示)
- (核矩阵的转置/共轭转置):频率域 → 空间域 的变换算子
空间域 → 频率域
- :对偶基矩阵
- 作用:从空间域函数值 恢复 SH 系数
变换流程总结
空间域表示 y = [f(x₁), f(x₂), ..., f(xₙ)]ᵀ
↕ (K* 和 K̃ 构成一对变换算子)
频率域表示 c = [c₀, c₁, ..., cₗ]ᵀ (SH 系数)
关键意义:
- 在 空间域 中施加约束(如颜色裁剪)→ 操作直观,约束的就是函数值本身
- 通过变换算子 转回频率域 → 得到满足约束的 SH 系数
- 这一对变换算子是后续 去振铃/去色偏算法 的核心工具
核心思路总结
问题链:
SH 投影 → 振铃/负值 → 窗函数修复 → 非负了但仍有颜色失真
↓
需要更通用的逐点约束(如色彩空间约束)
↓
但 SH 是频率域表示 → 逐点约束难以直接施加
↓
引入再生核 → 建立空间域表示
↓
系数 = 函数值 → 约束直接作用于函数值
↓
频率域 ↔ 空间域变换算子完成桥接
再生核希尔伯特空间去振铃与光照数据压缩
基于再生核希尔伯特空间(RKHS)的色彩空间约束去振铃
目标
- 不仅消除负值(非负性约束),还要消除 颜色偏移/失真(Color Distortion)
- 引入 色彩空间边界框约束(Color Space Bounding Box Constraint),确保 SH 投影在整个球面上的重建值都落在合理的颜色范围内
具体步骤
- 计算参考辐照度函数的统计量:取原始辐照度函数的 均值颜色(Mean Color) 和 最大颜色值(Max Color)
- 色彩空间选择:在 YCoCg 色彩空间 中执行约束
- 原因:YCoCg 能很好地 去相关化(Decorrelate) 颜色通道,使各通道可以独立约束
- 构造约束边界框:要求 SH 投影的重建值在所有采样点上都位于该 色彩空间边界框 内
- 这个边界框实际上存在于 空间中( 为球面上的采样点数)
效果对比
| 方法 | 结果 |
|---|---|
| 窗函数(Windowing) | 消除负值,但仍有 红色偏移 等颜色失真 |
| 色彩空间边界框约束 | 完全消除红色偏移,与参考二阶 SH 非常接近 |
交替投影法(Method of Alternating Projections)
核心思想
- 可行域(Feasible Region) 在空间域中是一个 凸集(Convex Set)——它是多个半空间的交集
- 该凸集位于 ( 为空间域采样点数量)
- 利用 两个凸集之间的交替投影 来迭代求解
算法流程
输入:目标信号的 SH 系数向量 c_k
循环:
1. [SH 域 → 空间域]
使用核矩阵的伴随(Adjoint of Kernel Matrix)将 c_k 变换到空间域
→ 得到各采样点上的函数值
2. [空间域投影 — 关键步骤]
对空间域中的函数值施加约束投影算子
→ 对于边界框约束:投影算子 = Clamp 函数(裁剪到边界框范围内)
3. [空间域 → SH 域]
使用对偶核矩阵(Dual Kernel Matrix)将裁剪后的值变换回 SH 域
→ 得到下一次迭代的 SH 系数 c_{k+1}
直到收敛
收敛性保证
- 两个凸集上的交替投影 必定收敛 到交集中的某一点
- 交集 非空 是已知的:均值颜色(DC 分量) 本身就满足所有色彩空间约束,所以可行解一定存在
关键优势:空间域投影极其简单
| 约束类型 | 空间域投影算子 |
|---|---|
| 色彩空间边界框 | clamp(value, min, max) — 简单裁剪 |
| 非负性约束 | max(value, 0) — 另一种简单裁剪 |
| 其他凸约束 | 只需修改投影算子即可扩展 |
推广到通用凸约束
框架的通用性
再生核基变换允许我们将 任意凸约束 在空间域中以简单、实用的方式表达:
- 修改投影算子即可——算法主体不变
- 然后用相同的交替投影迭代来求解
重要应用:域约束(Domain Constraints)
半球约束(Hemispherical Constraint)
- 场景:我们只关心 可见半球 上的辐照度精度,背面无所谓
- 做法:约束 SH 投影在可见半球上尽可能匹配参考函数
- 效果:
- 可见半球上的重建质量 显著优于 简单的线性 SH 最小二乘投影
- 背面质量可能更差,但 永远不会被看到
球冠约束(Spherical Cap Constraint)
- 类似半球约束,但约束域为任意球冠(Spherical Cap)
- 传统做法 需要求解拉普拉斯算子在复杂域上的 特征函数,非常困难
- RKHS 方法:完全不需要这些——只需在空间域中对对应点施加约束即可
最大优势:输出仍是标准 SH 系数
- 无论施加什么约束,最终得到的 (系数向量)始终是标准的 SH 系数向量
- 不需要从"半球特殊基"或"球冠特殊基"做基变换
- 可以直接与其他 SH 运算(旋转、卷积等)组合使用
光照数据压缩:动机
场景案例
- 《使命召唤:黑色行动 冷战》 单人战役地图
- 关闭材质纹理后可清晰看到光照贡献
- 进一步关闭直接日光 → 只剩 预计算光照数据,可看出它对场景渲染的 决定性作用
- 体积雾、粒子、所有几何体都依赖该预计算数据
内存问题
- 在场景上铺设一个 合理分辨率 的 线性 SH RGB 辐照度体积
- 原始数据量:约 1.5 GB
- 这对于游戏运行时完全 不可接受 → 必须进行高效压缩
相关工作:线性降维(Linear Dimensionality Reduction)
问题设定
- 高维目标数据:每个数据点维度 可能在 10 到 300–400 之间
- 目标:用少量基函数的线性组合来紧凑表示
其中:
- :基函数(Basis Functions),与数据同维
- :基系数(Basis Coefficients),标量
- :分量数,需要 远小于 数据维度 ()
关键要求
- 重建误差 在某种范数下足够小
- 分量数 远小于数据维度 ——这才是真正的"降维"
意义
这是后续光照数据压缩方法的 数学基础——将高维的 SH 辐照度数据投影到低维子空间中,实现内存的大幅缩减,同时保持视觉质量。
阶段性总结
讲座至此覆盖的三大模块:
1. 采样与表示 → Warped Irradiance Volumes + 可见性验证采样
2. 质量修复 → RKHS 框架下的通用凸约束去振铃
(色彩空间边界框 / 非负性 / 半球约束等)
3. 数据压缩 → 动机已明确(1.5GB → 必须压缩)
下一步:线性降维技术用于光照压缩
聚类不连续性问题与移动基分解(MBD)
聚类不连续性问题(Cluster Discontinuity Problem)
问题展示:平滑向量场的压缩示例
以一个平滑向量场作为输入数据,对比两种经典压缩方法:
方法一:分块 PCA(Blockwise PCA)
- 将输入空间域 切分为固定大小的块(Fixed-size Blocks)
- 对每个块独立计算 PCA 基(Principal Component Analysis Basis)
- 各块的 PCA 基 相互独立,因此在 块边界处出现不连续伪影
方法二:聚类 PCA(Cluster PCA)
- 不依赖空间域分块,直接对 数据向量本身 进行聚类
- 使用 到子空间的距离(Distance to Subspace) 作为度量,将数据向量分入 相干聚类(Coherent Clusters)
- 为每个聚类计算独立的基
- 优势:不假设任何特定的空间聚类形状,能更好地 自适应数据分布
- 问题依旧:聚类之间仍然 相互独立 → 聚类边界处出现 不连续伪影
根本原因
- 两种方法中的聚类 互不通信(Not Cooperating/Communicating)
- 重建模型试图优化整体质量,但由于聚类间没有信息交换,无法消除边界处的跳变
- 这不是线性降维方法的特有问题——它是 广泛存在于各类相关方法中的基础性问题(详见 EGSR 2021 论文)
核心启示
要从 第一性原理(First Principles) 出发,将 插值性(Interpolation) 和 平滑性条件(Smoothness Condition) 直接内建到模型中。
移动基分解(Moving Basis Decomposition, MBD)
从线性基分解到移动基分解
起点:经典线性基分解
给定一组 高维数据向量,用线性组合来近似目标数据:
其中 是标量系数, 是基向量。
关键创新:让系数和基向量都成为空间位置的函数
假设目标函数是定义在某个 低维域(如 或 )上的 逐片平滑函数(Piecewise Smooth Function)。
将系数和基向量都写成 空间位置的函数:
然后用 核展开(Kernel Expansion) 分别表示 移动系数 和 移动基向量 :
其中:
- :系数核函数(Coefficient Kernels) — 数量多,空间支撑小
- :基向量核函数(Basis Kernels) — 数量少,空间支撑大
- , :对应的待优化参数
核函数重叠:消除不连续性的关键
| 属性 | 说明 |
|---|---|
| 基向量核函数互相重叠 | 相邻的基向量核在空间上有交集 → 允许它们在重叠区域 共享信息 → 消除聚类边界 |
| 系数核函数互相重叠 | 相邻系数核在空间上有交集 → 平滑过渡 |
| 一个基向量核覆盖多个系数核 | 一个高维基向量被大量低维系数共享 → 压缩效率的来源 |
压缩原理
- 基向量:高维但数量少(少量大支撑核函数)
- 系数:低维但数量多(大量小支撑核函数)
- 只需存储少量高维基 + 大量低维系数 → 高效压缩
简单示例:1D 区间 上的帽函数核
选择最简单的 帽函数核(Hat Kernels),位于 和 :
- 基向量核:,
- 系数核:同样为 ,
将核展开代入重建公式后展开:
由于 和 都是 的线性函数,它们的乘积产生 的二次项:
线性帽函数核 → 二次重建模型
这说明 MBD 的表达能力 严格强于 简单的线性基分解——可以视为线性基分解的 广义化(Generalization)。
MBD 的完整定义
MBD 由两组序列定义:
- 系数核序列 及其对应参数
- 基向量核序列 及其对应参数
MBD 的求解方法
优化目标
给定固定的目标函数和核函数,最小化空间域上的 逐点重建误差:
其中 是 MBD 的重建结果, 是空间域。
与独立聚类方法的区别
- 独立聚类方法中,每个聚类的优化是 完全解耦 的
- MBD 中,由于核函数重叠,聚类之间存在 交互(Interaction) → 这是一个 全局优化问题
稀疏结构——可扩展性的关键
- 尽管是全局优化,但问题具有 非常稀疏的块结构(Sparse Block Structure)
- 稀疏性来源:核函数具有 紧支撑(Compact Support) → 每个核只与少数邻居重叠,而非与所有核交互
- 这是 选择核函数时的关键设计考量
数值求解器
| 组件 | 具体方法 |
|---|---|
| 优化器 | 拟牛顿法(Quasi-Newton Solver),使用 对角海森近似(Diagonal Hessian Approximation) |
| 梯度计算 | 梯度和对角海森元素有 简洁的表达式,可解析求解或通过 蒙特卡洛积分(Monte Carlo Integration) 数值求解 |
| 可扩展性 | 可靠地扩展到 超过 1 亿个未知参数 的问题规模 |
| 求解时间 | 通常只需 几分钟 即可收敛 |
求解得到的结果是基向量核参数 和系数核参数 。
效果对比:重新审视聚类不连续性问题
全聚类数量对比
| 方法 | 表现 |
|---|---|
| Blockwise PCA | 块边界处明显的不连续伪影 |
| Cluster PCA | 聚类边界处明显的不连续伪影 |
| Moving Basis Decomposition | 与参考结果几乎完全一致,无任何可见边界伪影 |
将聚类数量减半后的对比
| 方法 | 表现 |
|---|---|
| Blockwise PCA | 质量明显下降,伪影加剧 |
| Cluster PCA | 质量明显下降,伪影加剧 |
| MBD | 基本不变,仍然与参考非常接近 |
数值指标
- MBD 在 相对均方误差(Relative MSE) 上 全面优于 其他对比方法
- 不仅视觉上接近目标函数,数值上也 收敛到最低误差
核心要点总结
问题:聚类独立性 → 边界不连续
传统方法:
Blockwise PCA:空间固定分块 + 独立PCA → 块边界跳变
Cluster PCA:数据驱动聚类 + 独立PCA → 聚类边界跳变
MBD 解决方案:
让基向量和系数都成为空间位置的连续函数
↓
通过重叠的核展开实现
↓
核函数重叠 = 聚类间信息共享 = 平滑过渡
↓
全局优化(稀疏块结构 → 可扩展)
↓
结果:无边界伪影 + 最低MSE + 更高压缩效率
移动基分解(MBD)的压缩效果与实际应用
图像压缩对比示例
实验设置
- 输入数据:RGB 图像
- 压缩参数:64×64 像素的大块,每块仅 2 个基向量
- 目的:在大块 + 少基向量这种"极端条件"下,突显聚类边界伪影的严重性
对比结果
| 方法 | 视觉表现 |
|---|---|
| 分块 PCA(Blockwise PCA) | 块边界处出现 硬切割伪影(Hard Block Boundary Artifacts),非常刺眼 |
| 移动基分解(MBD) | 硬边界变成 平滑渐变过渡(Smooth Gradual Ramp),视觉上几乎不可见 |
关键观察:MBD 将离散的"硬边界"转化为连续的"软过渡",这正是核函数重叠带来的本质优势。
光传输数据压缩——MBD 的核心应用场景
输入数据结构
光传输数据由两部分组成:
- 直接光传输矩阵(Direct Light Transport Matrix)
- 间接光传输矩阵(Indirect Light Transport Matrix)——每个颜色通道独立
将二者 堆叠(Stack) 成一个 高维向量:
输出
- MBD 的基向量和系数
- 重建时还原完整的光传输信息
对比方法
| 方法 | 额外内存开销 |
|---|---|
| 分块 PCA(Blockwise PCA) | 聚类索引隐含在空间块位置中 → 无额外开销 |
| 窗口 PCA(Windowed PCA) | 同上 |
| 聚类 PCA(Cluster PCA) | 需要显式存储 聚类索引(Cluster Index) → 更多内存 |
| 移动基分解(MBD) | 聚类信息隐含在空间核函数中 → 无额外开销 |
重要提示:聚类 PCA 在相同基向量数下 实际占用更多内存,因为必须为每个数据点存储聚类归属索引。
直接光传输压缩结果
数值指标
- 使用 4 个基向量 时,MBD 的绝对误差最低
视觉质量
| 方法 | 聚类不连续伪影 | 与参考解的接近程度 |
|---|---|---|
| 分块 PCA / 窗口 PCA / 聚类 PCA | 均存在明显的聚类不连续伪影 | 有可见偏差 |
| MBD | 无聚类伪影 | 视觉与数值上均 非常接近参考解 |
间接光传输压缩结果
测试场景
- 直接光照以一定角度照射场景,观察间接光照(弹射光)的重建质量
结果
- MBD 在整个图像平面上的绝对误差依旧最低
- 当基向量数量变化时,观察 相对 MSE(均方误差) 的变化:
- MBD 与聚类 PCA 性能相当,但 MBD 不需要额外的聚类索引存储
- 考虑到内存公平性,MBD 的性价比更优
- 近景对比:MBD 无聚类不连续伪影,视觉和数值均接近参考解
基函数支撑尺寸的鲁棒性实验
实验设计
- 逐步增大核函数/聚类的空间支撑尺寸(从 9×9×9 逐步增大)
- 同时意味着 聚类数量减少(每个聚类覆盖更大的空间范围)
对比方法的表现
随着支撑尺寸增大:
- 分块 PCA / 窗口分块 PCA:聚类不连续伪影 愈发严重
- 在伪彩色误差图中清晰可见
- 相对 MSE 数值也明显恶化
- 伪影逐渐 主导整个画面
MBD 的表现
- 误差数值略有增加,但 视觉质量几乎不变
- 对支撑尺寸变化极其鲁棒(Robust)
- 不会出现突然"弹出"的块状伪影
核心结论
MBD 对空间支撑尺寸的选择不敏感——即使参数选择不是最优,结果依然稳定。而对比方法一旦支撑尺寸增大,伪影会迅速恶化。
实际项目应用:《使命召唤:黑色行动 冷战》
压缩数据
| 指标 | 数值 |
|---|---|
| 原始数据大小 | 1.5 GB |
| 压缩后每体素开销 | 约 1 字节/体素 |
| 原始每体素开销 | 48 字节/体素 |
| 压缩比 | 约 40:1 |
| 存储内容 | 完整的 RGB 线性 SH 辐照度(全方向性 RGB 辐照度) |
重建方式
- MBD 重建 逐像素、逐帧执行——完全实时
巧妙的维度混搭设计
这是 MBD 框架灵活性的最佳体现:
基向量核函数:2D
- 回忆前面介绍的 变形辐照度体积(Warped Irradiance Volume)
- 基向量核函数使用该变形体积的 2D 平面投影 作为空间域
- 即:基向量核是二维函数 → 进一步降低内存占用
系数核函数:3D
- 由于需要在整个 3D 空间中的任意位置 重建光照
- 系数核函数使用 3D 帽函数(3D Hat Functions),对应体积纹理的 纹素重采样函数(Texel Resampling Functions)
框架灵活性
MBD 允许:
├── 基向量核函数 → 2D(平面投影)
├── 系数核函数 → 3D(体积纹理)
├── 不同核函数可以有不同的尺寸、形状、维度
└── 求解器(Solver)无需修改 → 只需正确定义核函数即可
这意味着你可以根据数据特征自由选择 自适应基函数——不同维度、不同支撑大小——而整个优化框架保持不变。
Warzone 夜间地图展示
场景特点
- 夜间地图 中存在 大量点光源和直接光源
- 这些光源全部 烘焙到辐照度体积中
MBD 重建效果
- 即使在包含大量点状光源的远景视角下,也能清晰还原光源分布
- 体积的空间分辨率 足够高,能表达这些小型点光源
- 关键性能优势:
- 远距离的大量小光源 不需要运行时动态灯光
- 全部从预计算体积中重建 → 保持 60 FPS
- 这种"远景大量光源"的场景如果用动态灯光实现,帧率根本不可能达标
最终效果总结
| 方面 | 成果 |
|---|---|
| 压缩比 | ~40:1(48 B → 1 B/体素) |
| 质量 | 无聚类伪影,逼近参考解 |
| 性能 | 逐像素逐帧重建,60 FPS |
| 灵活性 | 2D 基核 + 3D 系数核混搭 |
| 鲁棒性 | 对支撑尺寸参数不敏感 |
| 实际价值 | 远距离大量光源无需动态灯光,彻底解决性能瓶颈 |
总结与闭幕致辞
三大核心贡献回顾
基于可见性的体积光照采样(Visibility-Based Sample Validation)
| 要点 | 说明 |
|---|---|
| 核心视角 | 采用 概率论观点(Probabilistic Point of View),引入观察位置的先验分布 |
| 优化目标 | 最小化 期望观察位置上的重建误差(Reconstruction Error over Expected View Position) |
| 关键洞察 | 体素表示的 漏光问题是基础性的,无法根本解决——但通过考虑观察位置的先验分布,可以 极大地减轻漏光伪影 |
| 方法论启示 | 不试图解决不可解的问题,而是 巧妙地绕过它(Side-step) |
再生核希尔伯特空间(RKHS)约束 SH 投影
| 要点 | 说明 |
|---|---|
| 核心框架 | 利用 RKHS 将 SH 系数 变换到空间域,在空间域中施加约束 |
| 色彩空间约束 | 超越单纯的非负性约束,引入 色彩空间边界框约束 → 消除颜色偏移 |
| 通用性 | 可以编码 多种不同的凸约束(非负性、色彩空间、半球域约束等) |
| 实用性 | 实现简单,鼓励大家自行实验 |
移动基分解(Moving Basis Decomposition, MBD)
| 要点 | 说明 |
|---|---|
| 本质 | 现有线性基分解模型的 泛化(Generalization) |
| 核心创新 | 从 第一性原理(First Principles) 出发,将 插值性 和 移动基向量 直接内建到模型中 |
| 与传统方法的根本区别 | 传统方法:先降维,再事后修补伪影 → MBD:在优化问题中直接解决 |
| 聚类不连续性 | 传统方法中独立聚类 无法协作重建 → MBD 通过核函数重叠让聚类 自然衔接 |
| 效果 | 高维数据的 高效、无缝压缩(Efficient and Seamless Compression) |
深入阅读:EGSR 2021 论文及演讲,详细讨论了相关方法与 MBD 的对比。