小熊猫探讨——虚幻4的lpv全局光照
发表于2016-04-28
首先我也不是什么大神,只是拿出自己了解的和会的知识。首先lpv全称Light Propagation Volumes,中文称为光能传递,是一种实时生成光照环境的光照方案。当然虚幻4对于lpv官方说明地址是:https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/LightPropagationVolumes/index.html,不过个人觉得没多大用。在探究lpv之前,我想解释一下,游戏中的光照可能会是多种多样,复杂的先不说,方便新手和初识的人理解,在游戏中应用的光照常见的有2种,一种是以静态构建为光照贴图,一种则是完全的事实产生光照信息,
1、先说下前者,以虚幻引擎为例,虚幻3采用lightmass静态全局光构建,将光照信息写入场景,这种光照优点在于在用于打开产品时,计算机不需要实时计算光照环境,而只需要挂载构建好的光照数据即可,缺点则是无法提供逼真的光影环境,以及对于复杂场景的构建消耗的计算机硬件会随,举个简单的例子,一棵树经过lightmass后,投影写入地面,当树木被摧毁后,那么地上的影子则还是原来的形状,此处补充一点:只是举个例子,当然现在静态光可以用动态阴影。当然这不是重点。构建后的的光照,一般地图文件会大一些,因为包含了场景所有的光照数据。就相当于用3dmax进行效果图渲染。
2、在说下后者,实时动态全局光照,听名字就能看出,这种光照会实时的更新光影数据,让场景看起来更加逼真,这时我要补充一点,在游戏场景中,直接放入一个定向光,投影会是黑色的,导致这种情况是因为默认给的灯光是直接光照,而我们现实生活中则还有光子反弹、光的折射等各种光学变化,而实时动态全局光照(后面简称实时GI)正式为了要求而实现这些光学变化。复杂的成像原理就不多说了,随后给几个图就明白了,虚幻4在之前刚公布时,是svogi,一种实时gi算法,而后来放弃采用了lpv方法,最开始我们见到的lpv实时gi,则是这项技术的发明者crytek,大家对这家公司肯定很熟悉,著名cryengine曾经红遍大江南北。而虚幻4的lpv技术并不是来自epic,而是微软的工作室Lionhead为开发神鬼寓言:传奇而单独开发的技术,后被集成在虚幻4中,大家看到无论现在的虚幻4也好,寒霜或者是u3d5,都开始给自己产品整合实时gi,那么实时gi的好处在于无需花费大量时间和过多的计算机性能开销,就可取得逼真的光照效果,拥有静态光照所没有的复杂光照,缺点是现在实时gi的技术还不是绝对成熟,实现的细节丰富程度还达不到静态所呈现的效果。 在后面将会着重分析下lpv这套实时gi方案。
那么有了一个简单的介绍之后,我们本期的主人公登场lpv登场了。本篇文章仅限初学者和初级爱好者,对于什么更高级的人士诸如图形工程师神马的,可以洗洗睡了,lpv在虚幻4中开启的方式,我在本板块的虚幻4两套光照算法切换的帖子里已经说明了,各位对号入座好了。首先我着重的细说一下lpv,并会配上一些图来讲解一下。首先来看这么一张图:
![](http://gameweb-img.qq.com/gad/20160428/phpL3Ajm6.1461849220.jpg)
如果不仔细看会看不出来什么,2张对比图,上图是静态gi,而下图是实时gi,很明显的则会注意到左边的树叶,那么在实时gi下,每个树叶片面接收到光照后则会向周围反射,同时这些反射带有颜色信息,例如下图,红色小球在反射光照下会在地面投射微弱的红色,再例如右侧的场景中,绿色小球反射在墙面上的颜色。
![](http://gameweb-img.qq.com/gad/20160428/phpmXtyQ1.1461849236.jpg)
![](http://gameweb-img.qq.com/gad/20160428/php61ar4G.1461849243.jpg)
很明显的一组数据表明,实时gi拥有比静态gi更好的光影呈现,相当于静态和动态gi一个是用时间换质量,一个是用质量换时间。不过,随着技术的不断成熟,实时gi会越来越强。同时又引出一个新概念,带物理属性的材质及光照,也就是说光照带有真实的物理属性,并且与材质互动,这个我将会在后面写一篇关于虚幻4的物理材质研究。
笔者是个强迫症患者,同时笔者喜欢实时gi这一个新起渲染方案。请各位在确保开启了lpv后阅读以下内容。
在虚幻4中,为了保证有更好的实时gi效果,会用到后期处理体积中的lpv属性卡,如下图:
![](http://gameweb-img.qq.com/gad/20160428/phpHpbmUS.1461849262.jpg)
其中intensity表示反弹的强度,越大,那么反射强度越高,这个就不多说了,主要说下参数size、light lnjection bias,size控制动态光照的被照射范围大小,说白了,如果数值小了,对于大型模型会产生黑色条纹,因为产生动态gi是以一个范围存在的,如图:
![](http://gameweb-img.qq.com/gad/20160428/php6giCIx.1461849275.png)
红框内则是超出了需要实时gi计算的范围,此时需要把size值加大。而light lnjection bias则控制实时gi被计算的偏角,简单说size调整范围大小,而light lnjection bias则调整偏移量。此处我mark一下,这里有一个bug,向着阳光,则会不受控的出现色彩失真。在调整合适后,参数和效果如下图:
首先是定向光参数:
![](http://gameweb-img.qq.com/gad/20160428/phpFUw44Y.1461849285.png)
其次是后期处理体积参数:
![](http://gameweb-img.qq.com/gad/20160428/phpd0dGyM.1461849292.png)
最后效果如图:
![](http://gameweb-img.qq.com/gad/20160428/php0ziuOv.1461849301.png)
各位可以根据自己所需的进行调整,配合环境光遮蔽,以及后期体积里的film进行更为逼真的环境制作,笔者将在后面使用lpv制作一个基于虚拟现实工程的虚幻4室内场景,方便各位研究。备注一下,因为现在lpv还处于开发阶段,所以会出现各种异常的bug,如果做商用项目请慎用。
以下附上在u4的lpv下跑的一段游戏即时演算:
http://v.youku.com/v_show/id_XNzQ0MjA1MzA4.html
虽然虚幻4和cryengine采用都是lpv方案,但是却在实现上有着区别,如果后面有时间,我会把Light_Propagation_Volumes当初的论文翻译一次并且标注。
下文我发一个Cornell box测试图工程各位爱好实时gi的爱好者,在此环境上创造出更好的效果
![](http://gameweb-img.qq.com/gad/20160428/phpE5xF6u.1461849311.png)