Cascaded Light Propagation Volumes for Real-Time Indirect Illumination
2012-01-03 12:10
375 查看
![](https://x3ddmg.sn2.livefilestore.com/y1pNGbGQcuv6AgIpvw3HefPa8uz7DSVTTwmakqjzrypkeABtbN9KmymnprUh7DDcl-Uwlo6w7nEDJjXtFw30TFhruFbBiK4ueXm/lpv3.jpg?psid=1)
http://www.crytek.com/sites/default/files/20100301_lpv.pdf http://www.crytek.com/sites/default/files/2010-I3D_CLPV.ppt
2010 i3d上的一个文章,ppt的有图,pdf则更加的详细一些。
crytek在之前的sig09上的介绍了light propagation volume,本blog里面也有了介绍:http://blog.csdn.net/ccanan/article/details/4975066
一些重复的事情就省去了。
开篇介绍了相当多的reference的东西,都是很不错的文章,尽管有些和crytek介绍的算法没有太大关系,但也是帮助crytek结出这么个果实不可或缺的部分。
再次对作者(Anton Kaplanyan@Crytek GmbH和Carsten Dachsbachery@VISUS / University Stuttgart)表示敬意,真是阅读了大量的文章,并且做了分析,在这基础上做了实现,最终分享出来,把游戏业进一步的向前推进,可谓hardcore!
后面的步骤和09sig上的文章差不多(本身时间也就是差了几个月么):
LightPropagationVolume Initialization:
渲染reflective shadow map(rsm)
rsm的每个pixel被看作是反射光的一个分布,作为virtual point light(vpl for short)照亮light propagation volume
这里存储的值是sh系数
SceneGeometry Injection使用另外一个3d tex来存储scene geometry分布,用来进行indirectlighting的遮挡,也就是会形成indirectlighting shadow。
![](https://x3ddmg.sn2.livefilestore.com/y1p3M531btno6AGhFG9u_UCquqq6_m5D6wqSkIBeAOCb9nvDyK8-ZS8FV-IA4BMcBU39jncspA477bHAXTvjKGSNMu0s7ztL-j9/lpv0.jpg?psid=1)
scene geometry distribution也是用sh系数表示,来源是gbuffer,gbuffer的种类越多越好,存储是用3d的tex,所以越多就越能准确的表达occlusion的信息。不过只有camera view的话,也能顶一下。sh系数在3d tex里面,进一步的propagation,就完成了occlusion distribution的构建。里面crytek给了几个名词:indirectlighting遮挡叫做fuzzy occlusiongeometry 分布这个叫做geometry volume(GV)
PropagationScehe
这里的propagation是经历了一个在destination cell在各个face上收集energy,然后以sh系数的方式在投射到中心点的这么一个过程。
![](https://x3ddmg.sn2.livefilestore.com/y1pVHPH49bjXY0RE6pKzgHk78vnOprctNa5Atrn_Jc3UOjdV_12NSiOaf-mACKyReocgNK7g-Y5gmy-fbiVH2w7jmllf5f0yRUX/lpv1.png?psid=1)
在算法上,构建face上的投射是使用create一个visibility的sh系数方式来做的,乘以source的intensity就得到在这个face上光通量(flux)的分布(以sh系数的形式)不过crytek说直接这样做就精度很差,所以做了一个变化,使用中间那个图抓的wc作为整个椎体的代表,这个角度上得到的intensity作为整个锥的一个平均值。
然后由face上的分布推出这个cell中心点的intensity分布就好。
这个过程中就会考虑到前面建立的geometry volume了,被遮挡的情况下,就会做衰减。
然后重复做这个propagation,就模拟了光的传递。
Cascade
看名字就知道怎么回事了,和cascaded shadow map类似的做法,有过渡,有snap to grid来防止抖动。
实现细节
使用2阶sh系数,也就是4个数(这个绝对是挺低的)。
cascade grid是rgba16f的32x32x32的3d texture。
rsm的resolution是256
light propagation部分做了8次迭代。
sth more
在有了之前的实现之后,这样几件事情顺理成章了:
做多次bounce
对particle一类的做indirectlighting
glossy reflection
性能:这个图里可以看出在console上是4ms及以下就可以达到,算是很不错了。
![](https://x3ddmg.sn2.livefilestore.com/y1p9ihFPk69gAL6VjRrrfhwne_e8ZFs3cUBScDyTMZRommtam2AfHw13Wdca-9U3_Wq9rl-swJWmCbd0-9a5XK0ADMxsGS_K--g/lpv2.png?psid=1)
相关文章推荐
- 论文总结-Perceptual Losses for Real-Time Style Transfer and Super-Resolution
- JSR 1: Real-time Specification for Java
- oratop - Utility for Near Real-time Monitoring of Databases, RAC and Single Instance (Doc ID 1500864
- Staple- Complementary Learners for Real-Time Tracking 阅读汇总
- 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
- EfficientMisalignment-Robust Representation for Real-Time Face Recognition
- Optimized contrast enhancement for real-time image and video dehazing
- Implementing a new real-time scheduling policy for Linux
- READING NOTE: ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation
- PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection - arxiv 2016.08
- Thread: BooleanRT : Realtime 3D boolean operations for (Runtime,Editor)
- Segger SystemView: Realtime Analysis and Visualization for FreeRTOS
- A Twofold Siamese Network for Real-Time Object Tracking 阅读笔记
- Easy Deployment of Real-Time Java for Linux
- Deep Bilateral Learning for Real-Time Image Enhancement
- 论文解读之Perceptual Losses for Real-Time Style Transfer and Super-Resolution
- 目标检测分割--BlitzNet: A Real-Time Deep Network for Scene Understanding
- 目标检测--PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
- Analysis of QoS in cooperative services for real time applications
- Example rebuttal for "YOLO: Real-Time Object Detection"