浅分析lumen的重要性采样代码

Importance Sampling
1 ScreenProbeComputeBRDFProbabilityDensityFunctionCS:
线程 8 x 8
线程数量:probe数量
每个线程都会先算出对应的屏幕深度,如果有深度,那么就会算出对应的⼀个pixelUV,再得到对应的Gbuffer,再根据gbuffer深度
和pixel屏幕uv算出pixel的世界坐标。其实也就是对应的采样点的世界坐标,再可以通过判断probe是否与所采样点的平⾯是否接
近,如果接近就是这个点对probe有影响。那么就会通过将worldnormal计算成三阶球谐的九个系数,并且保存同时累积sh数量。
最后累加求和并且保存到对应的RWBRDFProbabilityDensityFunctionSH

2ScreenProbeComputeLightingProbabilityDensityFunctionCS:
线程 8 x 8 可以改4或者16
线程数量:probe数量
这步就是采样irradiance的pdf,所以将当前probe投影到上⼀帧,看看周围的probe的邻居,也就是4个邻居probe点。是不是会对
历史probe造成影响,判断⽅法和上⾯⼀样。如果有影响,那么就采样对应的proberadiance以及probe权重。这⾥是9个⾥⾯随机
选4个,FixedJitterIndex随机抖动。最后会Lighting = HistoryRadiance / HistoryRadianceWeight; 这⾥的radiance 如果历史的
radiance权重⼤于4,那么他的transparency就是= 0,也就是说不需要采样当前radiance了。否则还需要采样当前帧,也就是根据
uv得到worldcondirection,他还会再根据tracing数量来判断半⻆⻆度,然后就去采样radiancecache,如果⽚段
tadiancecachecover了这个当前的probe点,那么就会通过结合半⻆⻆度去conetraceradiancecache,乘以上⾯的transparency,
就是融合累积,柔则的话lighting就是1.
最后就是Solid Angle * lighting

ScreenProbeGenerateRaysCS:
线程 8 x 8 可以改4或者16
线程数量:probe数量
根据threadgroupid获取probe uindex,然后再可以获取到brdf的9个sh系数。 然后根据uv获取tracing⽅向,最后点乘brdfpdfsh和
当前前进⽅向的sh,得到tracing⽅向的pdf. 如果⽤了importance sample的话,那么就会获取到对应的lightingpdf,再根据tracing
数量进⾏缩放,最后相乘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值