虚幻4的lpv全局光照

[复制链接]
查看11265 | 回复16 | 2016-8-5 17:54:32 | 显示全部楼层 |阅读模式
本帖最后由 天才小熊猫 于 2016-8-5 18:09 编辑

最近社区技术文章很活跃,我也来贡献一个,虽然是14年写的文章,不过在官方roadmap看到了lpv的新特性,激动的是EPIC还没有放弃LPV的优化,期待ing。其次最近也研究出来采用LPV+后期几乎调整出一个大概的Lightmass的效果,过段时间附上分享文档。

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,并会配上一些图来讲解一下。首先来看这么一张图:

002904sshd8uwqk8ussyxg.jpg

如果不仔细看会看不出来什么,2张对比图,上图是静态gi,而下图是实时gi,很明显的则会注意到左边的树叶,那么在实时gi下,每个树叶片面接收到光照后则会向周围反射,同时这些反射带有颜色信息,例如下图,红色小球在反射光照下会在地面投射微弱的红色,再例如右侧的场景中,绿色小球反射在墙面上的颜色。

011435ur18woowmh15xorp.jpg

很明显的一组数据表明,实时gi拥有比静态gi更好的光影呈现,相当于静态和动态gi一个是用时间换质量,一个是用质量换时间。不过,随着技术的不断成熟,实时gi会越来越强。同时又引出一个新概念,带物理属性的材质及光照,也就是说光照带有真实的物理属性,并且与材质互动,这个我将会在后面写一篇关于虚幻4的物理材质研究。

笔者是个强迫症患者,同时笔者喜欢实时gi这一个新起渲染方案。请各位在确保开启了lpv后阅读以下内容。在虚幻4中,为了保证有更好的实时gi效果,会用到后期处理体积中的lpv属性卡,如下图:

004317v258z0r0v60r926e.jpg

其中intensity表示反弹的强度,越大,那么反射强度越高,这个就不多说了,主要说下参数size、light lnjection bias,size控制动态光照的被照射范围大小,说白了,如果数值小了,对于大型模型会产生黑色条纹,因为产生动态gi是以一个范围存在的,如图:

005122rfno05zrn551j6cj.png


红框内则是超出了需要实时gi计算的范围,此时需要把size值加大。而light lnjection bias则控制实时gi被计算的偏角,简单说size调整范围大小,而light lnjection bias则调整偏移量。此处我mark一下,这里有一个bug,向着阳光,则会不受控的出现色彩失真。在调整合适后,参数和效果如下图:

首先是定向光参数:

010108l6jsuu7uj0smi0eu.png

然后是后期体积参数:

010216k1k41zx3py8ban1b.png

最后大致效果如下:

010255a75z0rzkh5j17522.png

各位可以根据自己所需的进行调整,配合环境光遮蔽,以及后期体积里的film进行更为逼真的环境制作,笔者将在后面使用lpv制作一个基于虚拟现实工程的虚幻4室内场景,方便各位研究。备注一下,因为现在lpv还处于开发阶段,所以会出现各种异常的bug,如果做商用项目请慎用。


以下附上在u4的lpv下跑的一段游戏即时演算:




最后上一个jason0079会员翻译的LPV文档。

120931zyvu7vlplpdvijji.jpg


下载: UE4-Light Propagation Volumes(LPV).pdf (524.32 KB, 下载次数: 338)


评分

参与人数 1能量币 +10 收起 理由
Alex_Tsui + 10 好东西,收藏!

查看全部评分

个人博客 : ericsong.org
243901991@qq.co | 2016-8-5 21:44:03 | 显示全部楼层
沙发位耶!
回复

使用道具 举报

sdziyouren | 2016-8-6 11:51:03 | 显示全部楼层
是源文件吗?
回复 支持 反对

使用道具 举报

yuemingxishan | 2016-8-7 00:59:13 | 显示全部楼层
LPV   VXGI  有点头大了,两者应该不是一个东西,但都是用于免烘焙的实时GI。
目前二者都不建议商用,因为都是在开发阶段。但LPV更成熟和好操控一些(可能是 VXGI 那篇帖子写的太长了,看完之后很害怕)。
总之免除了光影构建的时间真是一件好事情!
最后请教个问题,大大LPV在编辑器中什么位置开启呢?
回复 支持 反对

使用道具 举报

cg_bull | 2016-8-11 00:47:45 | 显示全部楼层
楼主,LPV对点光源和聚光灯无效么,打开后为什么没想过???
回复 支持 反对

使用道具 举报

cg_bull | 2016-8-11 00:55:13 | 显示全部楼层
今天试了试,LPV配合SSAO DFAO做室外简直完美,,效果好帧数损失也低,但唯独点光源和聚光灯就算开启Dynamic Light也没效果,求救
回复 支持 反对

使用道具 举报

yuqinggame | 2016-9-6 06:16:52 | 显示全部楼层
感谢楼主分享资料
回复 支持 反对

使用道具 举报

Eric_Song | 2016-9-6 09:03:22 | 显示全部楼层
yuemingxishan 发表于 2016-8-7 00:59
LPV   VXGI  有点头大了,两者应该不是一个东西,但都是用于免烘焙的实时GI。
目前二者都不建议商用,因为 ...

在引擎config目录里的ConsoleVariables.ini。添加r.LightPropagationVolume = 1。然后按照我论坛写过的一个帖子里调试
个人博客 : ericsong.org
回复 支持 反对

使用道具 举报

小小强 | 2016-10-16 16:16:11 | 显示全部楼层
楼主啊!怎么能使镜子发射的近处更加清楚啊!
回复 支持 反对

使用道具 举报

qomolangma | 2017-4-8 22:03:35 | 显示全部楼层
这个好,免烘焙肯定是今后发展的方向。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则