软件渲染引擎实现的航空仪表效果

53 阅读2分钟

前文 应用于航空仪表的2D软件渲染引擎 中介绍了软件渲染引擎,近两个月基于软件渲染引擎实现了航空仪表业务 demo。经过大量优化,该方案已经满足目前的需求。本文主要展示渲染引擎的实现效果,介绍实现所需业务的技术关键点,以及性能效果和优化方案。

demo 效果如下:

1116-bg.gif 由于渲染引擎基于软件渲染,且对适航有要求,因此渲染引擎使用原始位图做为渲染资源,避免使用如 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%
  • 渐进解压 - 用到的时候才对图片做解压处理,可以提升启动性能
  • 显示模组 - 根据数据对显示功能分组,保证数据发生变化时才实施计算、渲染、合成,避免无效计算。前面提到的性能数据是在每一帧数据都发生变化时得到的,实际场景中不会存在每一帧所有数据都发生变化,因此解释了为什么实际运行帧率会更高