0%
ISM
- 间接光的可见性查询,能够快速生成不那么准确的可见性结果
- 1 个 pass 实现粗糙的多光源阴影
- 将整个场景用很多点表示,然后对这些点做低分辨率的阴影
- 阴影上的空洞使用 pull-push 补全(降采样再上采样)
Introduction
- ISM 是很多低分辨率的 shadow maps
- ISM 可以和 IR(instant radiosity)结合
- IR 基于 VPL(virtual point lights),大的开销就在可见性上
相关工作
- Global Illumination Methods
- 精确可见性
- 拆分远近的几何,近处集合计算光照不需要考虑可见性
- Real-Time Global Illumination
- 大多需要静态场景
- precomputed radiance transfer(PRT)
- VPLS
- 考虑可见性之后,算法都不太可行
- Visibility Approximations in Rendering
ISM
- 使用 VPL,那么可见性只需要在
VPL(几百个)和光源之间计算【而不是任意两点】
- ISM 将场景划分为点,然后通过 pull-push 填补空洞
Scene Preprocessing
- 场景使用点表示
- 根据三角形面积,随机采样三角形;然后在三角形上随机采样点
ISM Creation
- 单张 ISM 生成【一个 VPL 对应一张 ISM】
- 将所有的点做投影,生成深度图
- box splatting kernel【
GL points】
- 大小基于点到对应 VPL 距离的平方
- 假设每一个场景的点表示相同的面积
- 面积反比于距离平方?
- VPL 向着半球发光,因此深度图需要覆盖半球,这里使用 parabolic maps
- 动态场景:将三角形的变换转移应用到点上即可
- 1 个 pass 里面就可以渲染很多低分辨率的 ISM
- 每个 ISM 渲染相同数量的点(fixed, random subset of the point
set)
- 保存 ISM(128x128)到一个大纹理图中(4096x4096)
- 为了减少计算量,点很少,因此深度图中会有空洞
- pull-push【实现,一共 3 层】
- pull:降采样构建 image pyramid【/2】
- push:上采样插值计算未定义的值
- 加上 outlier rejection【pull/push 都有】
- pull 的时候只计算相近值,push 的时候只修改差别大的值
- 阈值为 5% 场景大小,\(2^l\)
scale【最精细层 \(l=0\)】
讨论
- \(P\) 个点,有效分辨率为 \(N_{\text{res}}=(\pi/4)n^2\) 的 parabolic
ISM
- 每个 ISM 的平均点数 \(\bar{P}=P/N_{\text{res}}\)
- 假设最优点采样,如果场景深度的复杂度为 \(\bar{P}\),那么就能够很好的生成深度图
- pull-push 减小了这个问题;但是这样得到的深度图不可能是完美的

Indirect Illumination with
ISMs
- one-bounce GI
- GPU 构建 VPLs【快】
- Splatting Indirect Illumination
类似的方法构建【TODO:有兴趣再看】
- 点光源构建 cube map,重要性采样之后,获取 \(N_{\text{vpl}}\) 个位置
- 其他方法也 ok(photon shooting 等)
- 加速
- 每个 ISM 只用部分场景点
- 渲染的时候使用附近的 VPL【类似 Splatting Indirect
Illumination】,然后用 geometry-aware blur 去除噪声
- IR 本身的限制:材质需要是 diffuse,或者 slightly glossy
Multiple Bounces
- imperfect reflective shadow maps(IRSM))
- 类似 SM => RSM,我们也能让 VPL 的光照多一跳
- 此时 ISM 里面存储的是 indirect illumination 信息而不是深度值
结果
- NVIDIA GeForce 8800 GTX
- single-bounce of indirect illumination at 640x480(G-Buffer block
size 8x8)
实验
- 当时情况下效果很好,速度 10x【对比 IR + SM】
- \(N_{vpl}=512\):误差随着 ISM
分辨率、场景点个数的变化

- pull-push 能解决漏光问题
- IRSM 效果展示
- glossy 场景展示,4096 VPLs,2k 场景点
- VPL 太少会导致 temporal flicker,我们测试场景都还好
其他应用
- 面光源:使用点光源近似
- 512 个点光源近似右边的发光白条;256x256 ISM,8k 场景点

讨论
- 对于场景而言,复杂的话需要更多场景点;目前手动给
- 低分辨率 ISM,导致小物体的阴影被忽略
- 参数需要手动给定,目前不是全自动的
- diffuse 场景:1024 VPLs,场景点 \(P=1/4
N_{\text{res}}\times N_{vpl}\),ISM 分辨率 128x128 差不多