华为CloudVR巨幕影院实时烘托效果技术探讨
在VR视频应用中,巨幕影院特性是模拟一个真实的影院环境,让用户在VR眼镜中可以体验到坐在影院中看电影的感觉。甚至于只要片源清晰度够高,完全可做到影院iMax的体验效果。
从运营商的角度来说,巨幕影院相对于其他VR业务还有几个显著的优势:
1、 不需要对CDN作任何改造,可以复用传统业务下巨量片源,直接移植到VR业务下,在第一时间充实内容。
2、 从PPD的角度讲,相对于180度、360度影片的VR业务,更容易达到高清晰度,达到影院的观影效果。
3、 巨幕影院支持3D影片,和在客厅电视上观影相比有体验差异,优势明显。
要做到巨幕影院的优质体验。如何模拟真实影院下的实时光影烘托效果就是绕不过去的一个技术细节。
如下面两个场景所示,所谓的实时光影烘托效果就是影院的墙壁、地面、座位等一切可以感光的物体,需要随着影院荧屏的光照色调、强弱有实时的反馈。
在华为的Cloud VR播放器SDK中,巨幕影院特性已经内置了实时光照的烘托效果,按照集成指导的说明,经过简单的设置,就可以达到比较好的效果。
下面从技术的角度探讨一下实时光照效果的技术实现,点到为止。
我们知道在Unity的光照系统中光源的LightMode有三种模式:
Realtime
即实时模式,在此模式下,Unity 在运行时每帧计算并更新实时灯光。没有预先计算实时灯光。
Mixed
烘焙和实时功能的混合模式,例如对灯光的间接照明进行烘焙,同时对直接照明进行实时计算。场景中混合模式灯光的行为和性能影响取决于我们全局混合照明模式的选择。
Baked
即烘焙模式,Unity 在运行之前预先计算Baked Lights 的光照,灯光的直接和间接照明被烘焙成光照贴图。设置为该模式后,该灯光在程序运行时将不占用性能成本,同时,将生成的光照贴图应用到场景中的成本也较低。
如下图所示,在通常的巨幕影院模型下,光源一般有两种:荧屏上根据影片内容发出的动态光源,这个光源会随着影片的内容不停在变化。同时墙壁上会有微弱的灯光,这个灯光是不会变化的。
从性能角度考虑,我们一般会将墙壁上的光源设置为烘焙模式,以降低对GPU运算的消耗。
而实现的重点即是荧屏上发出的光如何被感光物体感光到,要做到这一点,从实现路径讲,主要有如下步骤:
荧屏自发光
在Unity中,要让一个自发光的物体发出的光可以被另外一个物体反射到,必须要做如下几件事情:
l 发光物体和反射物体需要标识为Static,即静态物体,只有静态物体才会纳入光照系统的计算。
l 项目的全局光照开光必须处于打开状态。
由于这样的原因,在巨幕影院中,为了可以让荧屏可以发出光,我们就不能将电影的材质贴到Albedo材质上了,需要贴到Emission材质上。
实时更新GI材质
为了能让荧屏发出的光可以随时随着影片的内容实时变化,我们还需要让荧屏的Emission材质随着影片内容Update。
在Unity的RendererExtensions.UpdateGIMaterials方法提供了相关的能力,可以在Unity官网查阅相关内容。
调节光照强度
荧屏发出的光,如何在接受光照物体上反馈出合适的光照强度。
如果是通过调节荧屏Emision材质的Intensity属性,即屏幕的光照强度显然是不合适的。如果将屏幕调暗,会让影片的色彩饱和度降低,观影效果不佳。如果将屏幕调亮,会让屏幕变得刺眼,并让屏幕泛白,色彩失真。
最合适的方法是在荧屏和光照物体之间加个光照助力,进行调节。
比较好的一个实践方式是在影院环境中增加一个Reflection Probe组件,通过该组件将荧屏发出的光吸引进去,再通过一定的调节反射到其他物体上。
这样我们只要通过调节Reflection Probe的Runtime Setting Intensity属性,就可以对环境光照进行细调了。
物体反光
被反光物体上要做到真实感,需要注意两个要点:
l 物体需要标记为static,这样可以保证物体可以被光照系统计算在内。
l 物体设置合适的shader,以保证物体的质感和感光强度。
最后想说的是:一个好的体验需要无数遍的调优,Good Luck!
- 点赞
- 收藏
- 关注作者
评论(0)