早在去年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实现阴影更加简单。

四、大幅提升阴影效果和稳定性

在以往引擎版本的阴影系统中,我们移动摄像机经常会发现阴影的边缘会剧烈抖动,视觉效果非常难受,本次重构我们重点考虑了阴影效果的稳定性,解决摄像机移动和旋转时阴影边缘抖动的问题,大幅提升阴影效果和稳定性。在移动摄像机时,你会发现阴影坚若磐石,达到了烘培级阴影的稳定性,整体来说为开发者带来了极大的视觉舒适感。

五、提升软阴影效果并优化性能

我们还在本次版本中,优化了软阴影的算法,减少了对shadowMap的采样次数,在一定程度上提升了软阴影的性能和效果。

六、提供阴影明暗调节功能

曾经有开发者抱怨阴影的明暗不能调节,达不到预期效果。本次重构,我们充分考虑了阴影的易用性,Light增加shadowStrength属性,提供了阴影的明暗调节功能,开发者可根据项目情况自行调节阴影深浅。

七、提升shdowMapZ轴精度

本次重构阴影系统时,我们充分考虑了对ShaodowMap精度的运用,增加shadowNearPlane属性,并通过阴影深度压缩技术提升ShadowMap的Z轴精度,另外开发者也可通过shadowNearPlane接口自行增加阴影深度范围,但是一般情况并不需要开发者理会。

八、优化shadowDistance易用性

也有开发者对我们反馈过阴影看不见、阴影找不到等问题,本次我们针对该问题,简化了shadowDistance接口概念,优化后shadowDistance为距离摄像机的最大距离,不再和光源位置混淆。阴影的可见距离只和距离摄像机的距离有关。

对于沿着灯光方向超过shadowDistance后无法在视锥内产生阴影的问题,开发者无需再关心,阴影内部做了优化,引擎会始终保持沿灯光方向投射阴影的正确性,shadowDistance接口易用性得到加强。

九、阴影渲染模式的名称更易懂

在对本次版本的易用性优化方面,我们考虑到曾经有开发者不明白shadowPCFType的含义而提出疑问,所以基于易用性角度出发,我们将shadowPCFType接口名称调整为更容易理解的ShdowMode,其值调整为Hard/SoftLow/SoftHigh(硬边缘阴影/低幅度软边缘阴影/高幅度软边缘阴影),使含义更加通俗直观。

十、新增两个接口解决“阴影斑”

“阴影斑”是很多引擎实现阴影无法避免的一个问题,而且对于不同的场景往往需要针对性的调节,在以前版本的阴影系统中并没有暴露可调接口。本次重构的版本里,我们为开发者增加了shadowDeothBias和shadowNormalBias两个接口来解决“阴影斑”的问题,开发者可根据项目情况自行控制参数调节。但是大部分情况,开发者其实无需理会。

十一、提升了阴影性能

实时阴影通常会增加大量的渲染批次,而阴影的裁剪精度在一定程度上也决定了渲染批次的最小值。尽可能的减少渲染到ShadowMap的批次可以降低性能开销。本次在重构阴影系统时,我们提升阴影裁剪精度,优化了阴影裁剪算法,减少shadowMap中不必要的渲染物体,使批次尽可能达到最少。从而提升了阴影的性能

十二、缩减Shader纹理单元占用

在很多的移动端设备,纹理单元通常只有8个,而在以前引擎版本的阴影系统中,最多会占用3个。这对一些拥有复杂贴图的Shader(比如引擎内置的PBR材质)是比较难受的。于是本次重构阴影系统,我们采用了阴影图集的方式,来优化阴影占用Shader纹理单元,让ShadowMap占用纹理单元在任何情况都保持为1,合理可控。为开发者自定义复杂Shader保留了更多的纹理单元。

ShadowMap数量保持为1之后,以前的接口shadowPSSMCount显然不具备名称表达的合理性,所以我们将其调整为shadowCascadesMode,调整后的名称含义为阴影的级联模式(NoCascades/TwoCascades/FourCascades) 。

十三、提升ShadowMap利用率、阴影效果

在“稳定性的阴影”算法中通常会由于摄像机的FOV较大导致ShadowMap利用率非常低,本次重构阴影后我们采用球面分割代替了平行分割,大幅提升了ShadowMap利用率,同时也间接提升了阴影的效果。

十四、其它新增功能

  • 支持Directional Lightmap

  • RenderTexture增加Depth格式

  • RenderTexture增加ShadowMap格式

  • shaderPass增加pipelineMode

  • SystemUtils.supportRenderTextureFormat()增加Depth和ShadowMap格式支持

以往引擎版本更新说明:

  • LayaAir次世代引擎再进一步, 2.5版本重构并完善了PBR引擎模块,新增支付宝小游戏适配及发布!

  • LayaAir2.4的3D物理引擎库体积减少近50%、编码模块不再内嵌到LayaAirIDE,支持微信引擎插件。

  • LayaAir2.3支持任意多光源渲染, 引擎开始在GitHub实时提交维护了!3D导出插件支持Unity2018了!

  • LayaAir2.2引擎源码全面切换至TypeScript,支持WebGL2.0

  • LayaAir 2.1 已废除Canvas API兼容!

引擎案例介绍:

  • 132款3D跑酷极限运动主题的微信小游戏分享

  • LayaAir引擎78款3D射击主题微信小游戏分享,看看玩过几款!

END

推荐阅读:

  • 如何使用及参与维护Github的LayaAir引擎源码

  • VSCode高效开发工作流配置指南

  • 科普:零基础了解3D游戏开发

  • 应对苹果iOS新规,Layabox再次成功过审HTML5的APP包,同时推出iOS过审协助服务

重磅:3D光影已经完善,LayaAir2.6.0重构了阴影系统!相关推荐

  1. 华为内测基于Android 10.0的EMUI 10系统;2019年Q1真无线耳机市场份额,苹果占半壁江山……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  2. 加密软件漏洞评测系统_苹果向用户推送macOS Big Sur 11.0.1正式版系统_华强北软件网_软件行情_软件新闻_软件评测_手机应用文章...

    前几天,苹果在新品发布会上介绍,macOS Big Sur正式版将于11月12日(当地时间)进行推送.北京时间11月13日凌晨,苹果方面正式向用户推送了macOS Big Sur 11.0.1正式版系 ...

  3. zuk z2 Android7.0官方,联想ZUK Z2确定升级安卓7.0:官方曝光系统截图

    [TechWeb报道]作为联想搅局智能手机市场的重磅旗舰,ZUK Z2终于迎来了安卓7.0版本,主动曝光者是联想副总裁常程,他在个人微博上主动曝光了采用Android 7.0的ZUK Z2系统截图.由 ...

  4. 一加3t氢android8_一加3t氢android8_一加氢OS推出Android 8.0正式版 新系统流畅到飞起...

    原标题:一加氢OS推出Android 8.0正式版 新系统流畅到飞起 一加手机早在去年万圣节就在一加3和3T上开始公测基于Android 8.0的氢系统了,但奈何当时由于国内大部分软件都不兼容而导致迟 ...

  5. 一加3t氢android8_一加氢OS推出Android 8.0正式版 新系统流畅到飞起

    原标题:一加氢OS推出Android 8.0正式版 新系统流畅到飞起 一加手机早在去年万圣节就在一加3和3T上开始公测基于Android 8.0的氢系统了,但奈何当时由于国内大部分软件都不兼容而导致迟 ...

  6. 集装箱储能系统本地服务器,0.5MW-1MWh集装箱储能系统方案

    0.5MW-1MWh集装箱储能系统方案 来源:76范文网 | 时间:2019-04-17 10:25:23 | 移动端: 0.5MW-1MWh集装箱储能系统方案 本文简介: 0.5MW/1MWh集装箱 ...

  7. zuk z2 android 7.0,联想ZUK Z2确定升级安卓7.0:官方曝光系统截图

    TechWeb报道 作为联想搅局智能手机市场的重磅旗舰,ZUK Z2终于迎来了安卓7.0版本,主动曝光者是联想副总裁常程,他在个人微博上主动曝光了采用Android 7.0的ZUK Z2系统截图.由此 ...

  8. 一加3t氢android8_国内最快:一加3/3T已升级到基于安卓8.0的氢OS系统

    自从8月份谷歌正式发布Android8.0系统后,关于谁能最先吃上这块奥利奥甜点的猜测就一直不断,现在可以明确,一加手机用户最先大范围得到官方支持. 继前段时间一加官方发布基于安卓8.0的氧OS系统后 ...

  9. 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]

    用SignalR 2.0开发客服系统[系列3:实现点对点通讯] 原文:用SignalR 2.0开发客服系统[系列3:实现点对点通讯] 前言 目录: 用SignalR 2.0开发客服系统[系列1:实现群 ...

最新文章

  1. ADB常用命令简洁版整理
  2. TCP 客户端程序开发
  3. 查询优化器内核剖析第一篇
  4. 步步为营 .NET 代码重构学习笔记 十
  5. Redis基础(四)——持久化
  6. InnoDB缓存相关优化
  7. 消色差、半复消色差、复消色差的区别
  8. 自回归模型(AR Model)
  9. 【重构】SqlParameter的作用
  10. .net 访问共享文件夹
  11. 黑鲨创建nt6引导出错_黑苹果神器,一键生成OpenCore EFI 文件
  12. android 功能防抖,Android RxJava 实战系列:功能防抖
  13. HDOJ 1847Good Luck in CET-4 Everybody!(巴士博弈)
  14. 物联网为什么需要5G?
  15. java 重写equals方法的种种“坑”
  16. 关于数据驱动消费金融业务的几点看法
  17. python之生成器(~函数,列表推导式,生成器表达式)
  18. 打造高效研发团队 (2) —— 研发流程篇
  19. 2023麦肯锡中国消费者报告
  20. modbus_tk库的使用和分析

热门文章

  1. 诊断和响应故障_执行闪回和数据库时间点恢复(Flashback and Database Point-in-Time Recovery)
  2. Python zip*用法(一行代码实现矩阵的旋转)
  3. An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent, and a s
  4. 计算机网络工程方向,计算机网络专业发展方向
  5. 苹果4s怎么越狱_iPhone11/iPhoneXs iOS13.3越狱来啦
  6. Netgear路由器救砖教程
  7. 圆周率100位可以这样速记
  8. python圆周率后100位_Python实现计算圆周率π的值到任意位的方法示例
  9. 二叉排序树的特点以及实现代码
  10. win7不提示计算机重名,VMware安装win7系统提示网络上有重名怎么解决