Irradiance Point Cloud:辐照点云,辐照缓存的亲兄弟。
首先我们先要区分一下辐照缓存和辐照点云,辐照点云的目的是为了辅助主要GI引擎进行计算,也就是先生成辐照点云信息,然后辐照缓存的光子和暴力算法的光子信息将会调用辐照点云的信息。
从摄像机视野范围发射光线,在碰撞点上创建光子信息,并继续反弹。持续下去,那么场景中将会布满一层光子。部分点会被多次命中。通过递进式计算,可以得到一个粗略的GI计算结果。
如果首次引擎使用辐照缓存或者暴力算法,那么我们通过这些信息点可以得到一个平滑的结果,下图的白色点则使用辐照点云计算出来的。(信息的传递是反向的,我们倒推就会发现,光线从灯光发射,二次GI引擎其实决定了一开始结果信息。之后传递给第一次GI引擎。第一次GI引擎其实用作于最终的矫正,然后再传递给摄像机。只不过Redshfit将这个信息反转了)
个人感觉辐照点云的算法,是将场景中铺满辐照点云的光子点,然后根据光子的信息和光线路径反推出灯光的位置。这样比暴力算法和辐照缓存的无脑试要快很多。
我们来看一下辐照点云的参数:
上面的光子储存模式和辐照缓存一致,这里就跳过了。
- Screen Radius:屏幕半径,针对于辐照点云,是布满整个场景,但是实际计算不能这样。因为这样会在高分辨率图像时生成大量的点。因此我们需要来控制每个点之间的间隔,这里按照最终像素距离进行决定。
值越小,占用显存越多得到的值也就越精准。
值越大,占用显存越少,但是结果就不精准。
根据上面逆推的逻辑,如果光子点过少,那么会影响主要GI引擎的计算。因此一般1920*1080的分辨率使用8/16即可。针对于高分辨率可以继续增加,列如32/64。
- Samples per Pixel:每个像素样本数(每个光子的采样)和辐照缓存的光线数量原理一致,较亮的场景使用8/16。较暗的场景使用32/64。屏幕半径也会影响,因为屏幕半径决定了每个像素有多少的光子,而这里的样本是分给每个像素的,因此光子越少,每个光子分配到的样本也就越多。
- Filter Size:过滤尺寸我们上面已经提到了,辐照缓存和暴力算法计算时将会调用辐照点云的信息。这里的过滤尺寸决定了调用该光子周围多少点云光子信息。值越大结果也就越平滑。
- Retrace Threshold:回溯阈值,辐照点云的光子构建不会过多的关注场景中的细节(折痕、角落等)因为需要节省显存空间。因此会在角落处产生伪影或者漏光。回溯阈值可以防止主要GI引擎使用这些光子点信息。值越大就越不会使用角落的点。tips:一般辐照缓存作为主要GI引擎使用1-2足够。暴力算法则为2-3
- Show Calculation:显示计算计算信息,只有在最终渲染才可见。可以取消掉,这样会稍微加快一些渲染速度。但不是特别明显。