全景光照在游戏中的应用

正奕 腾讯互娱游戏美术师

全景光照简单的讲就是用全景图模拟相应环境来对对象进行照明。

 

全景图指的是包含了360度范围场景的图象,它可以是JPG格式、BMP格式、TGA格式等LDRI(Low-Dynamic RangeRadiance Image),也可以是HDR格式的HDRI(High-Dynamic RangeRadiance Image)。

 

全景光照在电影CG制作中被广泛使用,因为在合成CG素材到真实场景中往往需要适配真实场景的光照以保证效果拟真。然而单靠手工布光的方式难以还原整个环境的真实光照,所以在拍摄现场往往需要采集当时环境的光照制作成全景光照图供CG素材照明,以达到和真实场景更好的融合。

 

我做了一个简单的合成和全景光照案例:首先在停车场拍摄了一段短片,用全景相机记录了现场并制作成全景光照图和反射贴图(由于所使用的全景相机只能拍摄低精度的JPG格式,所以在灯光模拟的效果上要差些。我所模拟的场景是个纯室内环境,所以没在PS里用不同曝光值的全景图来合成HDR格式图) ,然后在BLENDER里面用RoboRecall的两个角色资源进行合成(合成过程中使用了摄像机捕捉来计算出摄像机的运动轨迹)。

 

整个流程中主要是用skylight作为全景图的光照载体来对角色照明,并未用到除skylight以外的其他灯光。

 

-所拍摄的视频(单帧):

 

 

-用GEAR360拍摄的全景图:

 

[ GEAR360作为一个低门槛的全景拍摄设备,coms感光器面积非常小,色彩和层次还原效果有限,有更高的需求建议使用单反结合云台拍摄多角度图片,再通过软件合成全景图或者使用更好的全景拍摄设备 ]

 

-使用了RoboRecall的角色和动画资源:

 

 

-合成后使用所拍摄的全景图对角色进行照明、渲染输出、校色后得到以下结果(单帧):

 

 

从视频中可以看出因为拍摄场景和光源信息是一致的,所以受光源影响的角色能够和场景高度融合,而不需要依赖手动布光还原整个真实场景的光照。

 

那现在我们谈一下全景光照在游戏中的应用。3A级主机游戏常使用全景图来进行光照,例如《战地》,《极品飞车》等游戏在制作中对光源拟真要求很高,也不可能完全靠人工制作所有带有丰富光照信息的环境。

 

-下面我在UE4里会详细说明游戏引擎中全景图光照的优缺点。

 

我用了《Paragon》的角色来做灯光范例,这个角色素材可以在引擎商店里免费下载。我先是以手动布光的方式用一个Spotlight和Pointlight来制作我想要的灯光效果,但是因为希望角色能够被均匀地照亮,但是又不希望受光太平,所以反复调整了灯光的位置、颜色以及强度等。但是看来要达到我想要的效果,需要更多的灯光和更多的微调,因为很多地方仍未被照亮,如果我开大灯光的范围,那离灯光近的地方就会爆光过度;但如果我需要布很多光,调整起各个灯光之间的强弱和颜色参数会比较花时间。

 

 

那我换个思路,尝试用全景图光照来达到我想要的效果。我往引擎里导入了些可以在网上下载到的HDR格式全景图片。在项目工程设置里我关闭了自动曝光,因为这个会影响到我对明暗的精确调整。我用skylight对角色进行照明,因为skylight可以作为全景图的光照载体。这个场景除了角色没有其他资源,没有可反射的信息,但是我需要反射源来渲染材质的质感,所以我把反射球设置成用全景图作为反射源。这么做有两个好处:第一是可以快速创造一个信息丰富的反射源;第二是可以保证和灯光色调一致,这样更合理。

 

-几个简单设置后,得到以下结果:

 

 

-这样还可以迅速尝试更多的灯光方案:

 

 

为什么手动布光很难做到全景光照的信息丰富度?可以看下下面的示意图。

 

 

全景图光照可以模拟环境每个角度的明暗和颜色来对物体进行照明,这个用手动布光是很难做到的。但是目前在游戏引擎里实现的全景图光照在信息采样上做过优化,也不能产生动态的阴影,所以还是需要配合手动布光一起才能应对游戏场景对灯光的各种需求。

 

我用手动布光和全景图光照相结合,在unreal4里做了个范例。场景资源是可以在unreal商店里免费下载的。整个灯光环境只用一个Direct Light来产生主光源投影,其他照明交给全景图光照。

 

-得到以下结果:

 

 

可以看到skybox自始至终,都没有颜色变化,因为skybox是使用了发光材质,不受光照影响,但是所有受光的物件都会因为全景图的不同而产生相应的变化。

 

以前我在一个多人FPS游戏的开发中,负责整个游戏的灯光和气氛,当时需要制作繁多的星球大气环境,用这个方式能非常高效地产出。

阅读与本文标签相同的文章