Real-Time Global Illumination(3D)

实时全局光照:为了简单和快速,实时全局光照是在直接光照的基础上再加一次间接光照。

 

直接光照加间接光照的效果,图中小太阳的地方是直接光照,然后小太阳的光线会照射到p点

 实时全局光照的主要思路是:分为两个问题,第一步先确定直接光照点,这个可以用shadow map来解决,第二部是确定那些直接光照点(次级光源)对p点的贡献。

先确定次级光源,通过shadow map可以知道被光线直接照射的点,光线通过shadow map上的像素照射到物体表面,这些点其实是一片很小的区域,把他们对p点的作用加起来就是最后看到的渲染结果,但每一个次级光源都有自己的光线反射,为了能够快速运算,假设次级光源点的反射都是漫反射,但p点的反射是正常的反射,有Glossy和diffuse。

 

 次级光源对着色点p的贡献如何计算,因为次级光源是一个很小的面光源,可以用path trace的思路来做,也就是对次级光源采样的方法来算

 

 也是从渲染方程来计算,其中的Li是次级光源发出的radiance,在次级光源q上,它是漫反射,所以BRDF是常数,BRDF乘以入射的radiance就是出射的radiance,入射的radiance等于光源强度除以接受面积,然后会发现入射的radiance的式子分母dA和积分最后面的dA消掉了,这样就可以计算积分内的式子直接得到结果。但这里的visibility项很难算,因为要考虑每一个着色点和每一个次级光源的光线能否到达的情况,所以就忽略visibility,也就是光线能够直接到达,不会被挡住。

 

 从渲染方程上看,q到p的距离上还加了平方,所以在实际计算次级光源对p点的着色时,如果次级光源离着色点比较远,就可以忽略改次级光源,那么怎么样确定次级光源和着色点在三维空间下的距离,一种思路是把着色点投影到shadow map上的像素上,然后取改像素附近的像素对应的次级光源,也可以对像素附近采样。

 

Light Propagation Volumes(LPV)

解决的主要问题:对于任意的着色点,能够计算出对它有贡献的所有radiance
主要原理:radiance在传播过程中不会改变,且是直线传播

实现方式:把三维空间划分为一个个的小格子,次级光源发射出的radiance不断通过小格子传播

 

 

 实现步骤;

step1:找到次级光源,还是使用shadow map的方法获得,当然如果有多个光源,就要维护多个shadow map,减少一定数量的次级光源也是可以的。

 

 

 Step 2:注入,把场景放入3D的格子中,计算每一个次级光源,把他们加起来,投影到SH上,这里只用了SH的前2阶来表示。

 

 

 Step 3:传播,一个格子里的radiance可以向其附近的6个格子传播,然后每个格子也不断传播,大约四次后就会稳定下来,这样就会知道每个格子里的radiance了。

 

 Step 4:渲染,任何一个着色点,都可以用所在格子内的radiance对其渲染。但会有一些问题 ,如果着色点所代表的物体比格子还要小,因为之前假设格子内的radiance是平均的,是一样的,在下图情形中,点p就会照亮它的背面。所以把格子划分的更小一下,但会增加计算和存储的负担。格子过大会发生照亮自身物体背面的情况,过小会增加负担,所以格子的大小要适当。这里的格子之间的radianc传播也是不考虑阻挡的。

 

 

Voxel Global Illumination(VXGI)

VXGI把场景划分成一个个小格子,和RSM(上面图中的)相比,RSM的次级光源是一片面积,在VXGI中是一块格子,

VXGI与LPV不同,LPV是radianc在格子内传播,然后可以知道每个格子内的radiance,让VXGI是从相机角度出发渲染,根据着色点的材质比如Glossy,那么就会从着色点发出一个圆锥体,这个圆锥体会和VXGI内的格子相交,从而判断是否有次级光源对着色点有贡献。

 VXGI第一步:也是确定次级光源,通过RSM或者其他的方法,VXGI在格子内记录其光源入射方向范围,法向量范围,然后就可以得到出射方向范围。

 

 第二步:根据camera trace和shade point及其材质,比如glossy,就可以确定一个圆锥范围,然后和场景中所有的格子查询相交。这里可以根据圆锥离shade point的距离,在对应的VXGI层级上查找。

 

 如果材质是diffuse,可以用很多个小圆锥来代替。

 

 VXGI与LPV的比较:LPV是记录次级光源,然后传播radianc,使得radianc在格子内,给着色点渲染时就会非常快,但由于LPV记录次级光源是由SH的前两阶记录,就会不够真实。VXGI是通过层级格子来记录次级光源,然后通过从着色点出发以一个圆锥体向外查询与次级光源的相交,这样会比较慢,但会比较真实。

posted @ 2022-09-05 21:00  捞的不谈  阅读(116)  评论(0编辑  收藏  举报