前文 应用于航空仪表的2D软件渲染引擎 中介绍了软件渲染引擎,近两个月基于软件渲染引擎实现了航空仪表业务 demo。经过大量优化,该方案已经满足目前的需求。本文主要展示渲染引擎的实现效果,介绍实现所需业务的技术关键点,以及性能效果和优化方案。
demo 效果如下:
由于渲染引擎基于软件渲染,且对适航有要求,因此渲染引擎使用原始位图做为渲染资源,避免使用如 png 资源,因为这会提升系统的复杂度。
渲染引擎需要支持以下基础能力:
- 透明/半透明 BMP 图片贴图(使用 32 位 BMP 图片)
- 支持抗锯齿
- 遮罩
- 字体渲染
字体渲染同样避免使用字体渲染引擎,字体渲染引擎同样会大幅提升系统的复杂度
基于上述基础能力,渲染引擎可以实现以下动画效果:
- 动画效果(上图中空地指示效果)
- 跑马灯效果(上图中方向指示效果)
- 弧形进度条(上图中垂直/水平速度指示效果)
- 条状进度条(上图中航程进度指示效果)
渲染引擎性能:
- 硬件环境
-
- CPU 主频 1G,使用单核运行 demo
- 操作系统
-
- 无
- 软件
-
- 软件尺寸小于 800K
- 分辨率 1280*720
- 性能
-
- 软件启动时间小于 1s
- 当前分辨率满负荷运行的帧率约 120 帧,实际运行帧率高于 120 帧
- 渲染引擎渲染一帧的时间小于 5ms
性能优化要点:
- 图片压缩 - 由于硬件及运行环境(无操作系统)所限,因此对图片一定要使用压缩方案。如果不使用压缩方案,一张原始的 1280*720 的 32 位 BMP 尺寸就超过 3.5M
- 后台渲染 - 使用自研工具对 BMP 预处理后再渲染,可以大大提升半透明/透明图片的渲染性能。实测发现此场景下渲染性能最高可以提升10倍
- tile 机制 - 对预处理的图片做 tile 化,可以降低处理后资源大小。tile 化后的资源是原资源尺寸的 50%
- 渐进解压 - 用到的时候才对图片做解压处理,可以提升启动性能
- 显示模组 - 根据数据对显示功能分组,保证数据发生变化时才实施计算、渲染、合成,避免无效计算。前面提到的性能数据是在每一帧数据都发生变化时得到的,实际场景中不会存在每一帧所有数据都发生变化,因此解释了为什么实际运行帧率会更高