早在去年9月的2.3版本中,LayaAir引擎就支持了任意数量和任意类型的实时光源等,让场景的实时光照等渲染效果得以大幅提升。在上个版本重构完善PBR的时候,还接入了全局光,不断加强3D场景中关于光的效果。
而与光效息息相关的另一个重要系统“阴影系统”,也是三维引擎中最常用的渲染功能之一。尤其是实时阴影相对于静态阴影,会大幅提升场景的生动性,带来更真实的视觉体验。因此,一个良好的阴影算法从引擎使用的角度来看是非常重要的。
LayaAir引擎团队本着精益求精的态度,在2.6.0版本中,对阴影系统进行了重构,针对现有的阴影系统功能进行了诸多改进和一些新特性的增加,带来了性能、效果、以及易用性的提升,下面我们来进行逐条讲解。
一、提升生成ShadowMap的渲染性能
在以前引擎版本的阴影中,阴影使用普通渲染目标,在渲染时需要编码,采样时还需要解码。本次的2.6.0版本中,重构并使用了硬件级的Depth纹理来生成ShadowMap,大幅节约了渲染 ShadowMap的开销,充分挖掘了硬件潜力,所有平台下,均可大幅度提升生成ShadowMap渲染性能。
二、使用硬件ShadowMap提升阴影效果
在WebGL2.0下,我们本次的2.6.0版本中,使用了ShadowMap硬件纹理,对阴影性能与效果进一步做了提升。ShadowMap纹理的特点是由硬件进行深度比较,并且可以先比较后进行线性过滤,可谓是硬件级的PCF,不仅带来了性能的提升,还带来了效果的提升,一箭双雕。
三、提升自定义Shader阴影易用性
开发者使用以前的引擎版本,用自定义Shader实现阴影有些复杂,尤其是产生阴影的pass和渲染的pass混淆在一起时,不太友好。本次的2.6.0版本中,剥离ShadowCaster为独立pass,使得结构更加清晰,一目了然。让自定义Shader实现阴影更加简单。
四、大幅提升阴影效果和稳定性
在以往引擎版本的阴影系统中,我们移动摄像机经常会发现阴影的边缘会剧烈抖动,视觉效果非常难受,本次重构我们重点考虑了阴影效果的稳定性,解决摄像机移动和旋转时阴影边缘抖动的问题,大幅提升阴影效果和稳定性。在移动摄像机时,你会发现阴影坚若磐石,达到了烘培级阴影的稳定性,整体来说为开发者带来了极