Real-time Global Illumination(in 3D)
全局光照 = 直接光照(光线弹射一次)+ 间接光照(光线弹射大于一次)
Reflective Shadow Maps(RSM)
用间接光照照亮一个点p需要知道什么?
- 哪些surface patches are directly lit
- shadow mapping可以提供这个信息
- 每个surface patch对p的贡献是什么
- 每个surface patch作为area light,把他们都加起来

假设被直接光照亮的次级光源是diffuse的


(它这里分母四次方是因为点乘当中没有归一化)
忽略次级光源对shading point的可见性。


总结:其实就是shadow mapping的思想,把所有次级光源看作diffuse,着色的时候进行对次级光源采样
这是对于单个光源。问题是无法处理过多光源,也没有考虑间接光照部分的可见项,并且有非常多的采样。
可以看作Virtual point light(VPL)方法的光栅化版
Light Propagation Volumes(LPV)
CryEngine3引入的技术,快速、质量高
核心问题
- shading point来自不同方向的radiance
思想
- Radiance在空间中沿直线传播并且不改变
- 使用3D网格将直接光照的表面传输到其他地方
步骤
==Generation== of radiance point set scene representation生成radiance点集
- 找到直接光照表面
- 应用RSM
- 可能使用简化的diffuse surface patches(virtual light sources)
==Injection== of point cloud of virtual light source into radiance volume
- 预细分场景为3D网格
- 对于每个格子,找到包含的virtual light source
- Sum up their directional light distribution
- Project to first 2 orders of SHs(4 in total)投影到2阶SH
Volumetric radiance ==propagetion==
- 对于每个网格,收集6个表面接收到的radiance
- Sum up,and again use SH to represent
- 重复传播若干次至收敛
Scene ==lighting== with final light propagation volume
- 对于每个shading point,找到所在的grid cell
- 取网格中的incident radiance(from all directions)
- Shade
问题
- 因为认为同一网格radiance相同 ——light leaking
- 同样假设格子间的visibility不计算
Voxel Global Illumination(VXGI)
two-pass algorithm
Two main differences with RSM
- Directly illuminated pixels -> (hierachical) voxels
- Sampling on RSM -> tracing reflected cones in 3D(Note the inaccuracy in sampling RSM) (Cone tracing)



问题:体素化的复杂度
Real-time Global Illumination(Screen Space)
Screen space:利用从相机渲染场景得到的直接光照信息Direct illumination
相当于post processing on existing rendering
Screen Space Ambient Occlusion(SSAO)
环境光遮蔽AO,Crytek
AO就是场景中物体之间的contact shadow,易于实现,增强场景中的相对位置信息
SSAO
- An approximation of GI
- in screen space
Key idea 1
- 假设不知道间接光照
- 假设它是一个常数,对于所有shading points,来自不同方向
- idea1相当于Ambient的思路
Key idea 2&3
- 考虑different visibility(towards all directions)at different shading points
- (3D建模软件里大概叫天光)
- 此外,假设是diffuse材质

Theory


$K_a * L_i^{indir}*albedo$
在diffuse、间接光照为常数的情况下,这是准确的


投影立体角(Projected solid angle)
(实际上解释了$cos\theta dw_i$ 半球积分为$\pi$ )


但是这样是没有加权平均的
如何实时计算ka项
- 世界空间
- ray casting
- 屏幕空间
- post-rendering pass
- 不用预计算
- 不依赖场景复杂度

只考虑一定范围内有没有遮挡物
- SSAO
- 假设任何一个shading point 在周围体积采样点,判断点被shading point看到的结果
- 使用相机的depth buffer来判断
- 按理说只需要考虑法线方向的半球就可以了,但法线信息可能是不知道的
- 因此做法是,只有过半的点在内部(红点),才开始使用AO,使用球而不是半球,但是只有过半的点才开始计算
- 也没有cos项的权重,但这一点可以忽略了
其他问题:False occlusions

Choosing samples
- 采样越多越精确,但考虑速度只用16个
- 少量sample得到结果,再降噪
Horizon based ambient occlusion(HBAO)
- 也是在屏幕空间
- 近似ray tracing 深度缓冲
- 需要知道法线(normal map),只采样半球
- (有法线可以对不同方向进行加权计算)
Screen Space Directional Occlusion(SSDO)
- SSDO
- SSAO的提高
- 考虑更多的实际间接光照
- 思路
- 不必假设接受的间接光照是uniform的
- 一部分间接光照信息是已知的(间接光照=次级光源提供的直接光照(RSM))
- SSDO使用的直接光照信息不来自于RSM,来自于摄像机
- 类似于path tracing
- 在shading point发射随机的光线
- 如果没有遇到障碍物,是直接光照
- 如果遇到障碍,是间接光照
- 比较
- AO假设间接光照来源非常远,DO假设间接光照来源周围

类似HBAO,考虑点p的局部半球

采样到的点不被挡住,则没有间接光照,被挡住,则有间接光照,并且把它们加起来。
如图3,会出这样的问题,P-A没有被挡住,但在屏幕空间的深度判断下,将它认为是挡住的,P-B则相反。
- SSDO质量更接近离线渲染
- 仍然只是小范围的GI
- 可见性偏差
- 屏幕空间的问题,丢失了不可见表面的信息(一切SS都会出现这种问题)

Screen Space Reflection(SSR)
- SSR
- RTR中实施GI的方式
- 在屏幕空间进行光线追踪
- 不需要3D信息
- 基本任务
- 求交
- 光线和场景
- 着色
- 从交点像素到着色点
- 求交
反射本身就是全局光照
假设场景没有反射,要加入反射,反射出来的东西都是屏幕上已有的东西。
- 对于每个像素(镜面反射)
- 计算反射光线
- 和屏幕上的物体求交
- 使用交点颜色做反射色
- 对于一定roughness的材质,根据BRDF考虑采样的反射光线数量
- 甚至可以加上法线信息

对于地面任何一个点,可以描述它的反射光,如何求交?
- Linear Raymarch
- 每一步检测深度值
- 质量取决于step size

- Hierarchy ray trace
- Generate Depth Mip map
- 下采样使用最小深度而不是平均
- 类似于3D空间的层次结构(BVH,KD-tree)
- 能快速舍弃不可能相交的像素
- 最小值建立一个保守的判断逻辑
- Generate Depth Mip map


先保守一点只走一步,没有交点,就可以多走一些,如果终于遇到了最小深度交点,就有可能和场景相交了,就需要少走一些。



最小层级都有交点,或者离开了屏幕,就可以停止了。
局限:Mipmap上判断不了起点不在2^k上像素的深度最小值
- 问题:,因为只在屏幕空间中计算
- Hidden Geometry Problem
- Edge Cutoff
Shading using SSR
和path tracing没有差别,只需要假设diffuse reflectors/secondary lights
- 是否引入平方衰减?
- 不需要,只要是算radiance,就不用,只有irradiance才会有伴随面积变大,能量衰减的效果。
- 是否考虑了着色点和次级光源之间的可见性?
- 是的,因为ray trace

可以解决
Sharp、bulrry reflections
Contact hardening(specular的lobe在非常近的距离,也只会采样很少的范围)
Specular elongation(被拉长,还是brdf的lobe采样的原因)
Per-pixel roughness and normal