radiancecache - Lumen 浅析

radiancecache
VoxelLighting:因为没有meshid
每个屏幕像素随机,⾮常离散,⼀个像素只trace⼀两个光线,质量也还是很差的。
本⾝实在downsample的分辨率下去做这个trace。但是提⾼了每个像素trace的⽅向。
是在半球空间的世界normal的朝向上均匀分布了他的trace。trace的朝向使⽤了⼋⾯体编码atlas到⼀张⼤的贴图上。
存到radiance cache这张图上。降采样发出的8x8⽅向的点叫做屏幕空间probe,放置在gbuffer上。 本质上每个像素的ray变少了。
因为16的距离8x8, 也就是1/4. 但是空间内2个相邻的点trace 的东西可能很接近。
局部空间trace不同的点,朝向上的变化是很⼤的。 ⽐如这个16像素内,可能⼀个平⾯上。为了避免出现这种情况,
FinalGather的时候,每个像素需要按照ray的朝向去获取要的radiance信息。很有可能这个像素和周围4个像素不在⼀个位置上。所
以贡献可能是错的。所以adaptive 的去放置。就是先16 16的放置,放置完后进⾏快速的评估,因为知道位置以及对应的normal来
⾃gbuffer,所以就知道平⾯。周围四点差值过来,可以知道是背⾯还是正⾯。会存在⼀个误差weight,weight过⼤,就判断需要重
新放置。这样每个像素都会有⽐较可靠的可查询的radiancecache。
radiancecache⽣成各个⽅向的时候。做了重要度采样。BRDF做的时候,Gbuffer算的时候,这个probe受那些周围像素的影响,是
知道的。这些像素从哪差值也是知道的。周围像素在⼀个平⾯内,对这个probe有差值贡献的brdf综合起来。算gbuffer的时候就知
道了这个brdf值,累积起来,就是这个probe上朝向的brdf的分布。会有⼀张brdf的8x8的分布图。最简单⽐如背向⾯brdf都是0,没
必要计算的。DiffuseBRDF更简单。Lighting部分更简单,只要重新投射上⼀帧probe的位置。⽐如第⼀帧啥都没有,是均匀分布
traceray的,全球空间,投射到⼀个⼋⾯体8x8的朝向上。Trace完之后知道那些是亮的那些是暗的。这些其实就是
incomingradiance的⼀个引导。就可以做lighting的importancesample。其实就是⼀个参考值,不⼀定合理。可以被修正,不同于
brdf。brdf只关注对出射⽅向的贡献,某些⽅向可以⼀直是0. 但lighting开始⽐如是暗的,但是如果⽅向偏⼀点点就会有贡献。所以
不能把这种都抹杀掉。否则下⼀帧引导这个⽅向永远不会有ray。所以lighting没那么关键,brdf才是决定性。
Voxel每帧重建,但是效率很⾼,使⽤card投影出来,低通滤波。所以就可以对probe的朝向做⼀些修正。还可以做这些trace,但是
是importancesample guide的trace。
相邻的probe会去做空间的滤波。也就是spatial filter。这个滤波得要找对应⽅向的朝向才能做滤波。如果8x8⽅向⼀致,就不⽤遍
历,index⼀招就找到。importancesample⾥⾯的还是这个朝向的光reassign到另外⼀个⽅向。只是多了⼀个间接层。还是同样的
index去查询它。所以能⾮常快的radiance的这个space去做空间的滤波。
radiancespace做3x3的kernal 的滤波。相当于屏幕空间做48 x 48。这⾥很多基于某个平⾯reject权重这样⼀些操作。还没有解决光
纤⻓度不⼀样导致每个像素的trace开销不⼀样。所以屏幕空间只负责很短距离。
所以需要worldspaceprobe。放置由screenspaceprobe决定。ssprobe⼀定范围内没trace到,直接插值worldspace的。
worldspace是全球⽐如64x64,也有brdf的importancesample的修正。global相关低频更新就可以了,因为对屏幕空间影响会很
⼩。最后需要屏幕空间每个像素,从这些radiancecache去做插值。
前⼀帧cache下来的世界空间的radiancecache。所以多次防弹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值