文章目录
- [1 -> 概述](#1 -> 概述)
- [2 -> AI超帧技术原理](#2 -> AI超帧技术原理)
-
- [2.1 -> 从传统MEMC到AI驱动的演进](#2.1 -> 从传统MEMC到AI驱动的演进)
- [2.2 -> 算法模式:内插与外插](#2.2 -> 算法模式:内插与外插)
- [2.3 -> 运动估计模式:基础模式与增强模式](#2.3 -> 运动估计模式:基础模式与增强模式)
- [2.4 -> 顶点标记技术详解](#2.4 -> 顶点标记技术详解)
- [3 -> AI超帧与传统GPU超帧的方案对比](#3 -> AI超帧与传统GPU超帧的方案对比)
-
- [3.1 -> 输入数据的差异](#3.1 -> 输入数据的差异)
- [3.2 -> 硬件资源利用的差异](#3.2 -> 硬件资源利用的差异)
- [3.3 -> 画质表现的差异](#3.3 -> 画质表现的差异)
- [4 -> 集成开发实践](#4 -> 集成开发实践)
-
- [4.1 -> 开发环境准备](#4.1 -> 开发环境准备)
- [4.2 -> Vulkan平台超帧能力集成](#4.2 -> Vulkan平台超帧能力集成)
- [4.3 -> OpenGL ES平台集成流程](#4.3 -> OpenGL ES平台集成流程)
- [4.4 -> 代码示例](#4.4 -> 代码示例)
- [4.5 -> 增强模式顶点标记示例](#4.5 -> 增强模式顶点标记示例)
- [4.6 -> 应用架构与调用流程](#4.6 -> 应用架构与调用流程)
- [5 -> 性能收益与实测数据](#5 -> 性能收益与实测数据)
- [6 -> 应用场景与未来展望](#6 -> 应用场景与未来展望)

1 -> 概述
在移动游戏和高性能图形渲染领域,帧率与功耗之间的博弈一直是开发者面临的核心挑战。传统优化手段如直接降低分辨率或限制帧率,虽能缓解功耗问题,却不可避免地牺牲视觉质量,难以在画质、性能和能效之间取得平衡。
鸿蒙6.0操作系统在Graphics Accelerate Kit中正式引入AI超帧(AI-based Frame Generation)能力,这一能力自6.0.0(20)版本开始支持,标志着鸿蒙在图形加速领域迈出了关键一步。AI超帧的核心思路是:利用端侧NPU进行AI模型推理,在GPU渲染的真实帧之间智能插入预测帧,从而在不显著增加GPU负载的前提下大幅提升画面帧率。
AI超帧方案相较于传统GPU超帧方案具有三大核心优势:其一,充分利用NPU硬件资源进行AI推理,显著降低GPU负载和系统功耗;其二,仅依赖前后帧颜色图即可完成帧预测,大幅降低集成复杂度------传统GPU方案需依赖颜色图、深度图、投影矩阵、几何顶点运动向量等多维输入,而AI方案只需要前后帧颜色图即可;其三,在处理剧烈或非线性运动等复杂场景时,AI超帧展现出比传统算法更明显的性能优势。
作为鸿蒙6.0 Graphics Accelerate Kit的重要组成部分,AI超帧能力与自适应缓冲分辨率(ABR)、Open GPU Turbo X(OpenGTX)等图形加速技术共同构成了HarmonyOS图形加速服务矩阵,旨在解决游戏运行时画面卡顿、掉帧、长时间运行过热等痛点问题。
2 -> AI超帧技术原理
2.1 -> 从传统MEMC到AI驱动的演进
Graphics Accelerate Kit的超帧能力经历了从传统硬件加速到AI智能驱动的演进过程。最初的超帧方案采用硬件-软件协同的运动估计与运动补偿(MEMC)技术,基于渲染管线中的时域和空域信息,在游戏真实帧之间高效插入预测帧。这类方案虽然能够在最大程度保持原始画质的同时提升帧率和流畅度,但在处理复杂运动场景时存在一定局限。
随着NPU算力的提升和AI模型的成熟,鸿蒙将超帧能力推向了新的高度。AI超帧不再依赖复杂的硬件加速逻辑,而是采用端侧NPU进行轻量化AI模型推理,仅依赖前后帧图像即可完成预测。这一技术路线的变革不仅降低了集成复杂度,也为移动设备上的高帧率游戏体验提供了更优的能效比。
2.2 -> 算法模式:内插与外插
鸿蒙Graphics Accelerate Kit提供两种超帧算法模式:内插模式(Interpolation Mode)和外插模式(Extrapolation Mode)。
内插模式利用相邻两个真实渲染帧进行超帧计算生成中间的预测帧,即利用第N-1帧和第N帧真实渲染帧预测第N-0.5帧预测帧。由于中间预测帧的像素点通常能在前后两帧中找到对应位置,因此内插模式的预测帧效果较外插模式更优。但内插模式存在一个固有缺陷:由于第N帧真实渲染帧需要等待第N-0.5帧预测帧生成并送显后才能最终送显,因此会新增1~2帧的响应时延。
外插模式则基于两个相邻的真实帧进行帧计算,生成未来的预测帧。具体而言,帧N-1和帧N是两个真实帧,帧N+0.5则是一个未来预测帧。外插模式的最大优势在于不改变渲染时间线与显示时间线的帧间顺序,因此不会产生由外插操作本身引入的响应延迟。不过,当两个真实帧之间的差异较大,或相机/物体运动方向突然改变时,预测帧在图像边缘和物体边缘容易出现模糊伪影。
开发者在实际应用中需要根据具体场景选择适合的算法模式,在画面质量与响应延迟之间做出权衡。
2.3 -> 运动估计模式:基础模式与增强模式
除了算法模式的选择,AI超帧能力还提供两种运动估计模式:基础模式(Basic Mode)和增强模式(Enhanced Mode)。
基础模式基于历史帧的颜色、深度和相机矩阵信息进行运动估计。这种模式实现简单、资源消耗低,适用于大多数常规游戏场景。
增强模式利用历史帧的几何顶点信息进行更高精度的运动估计,从而绘制出质量更高的预测帧。但启用增强模式需要开发者在代码中额外标记绘制顶点的绘制调用(Draw Calls),即在需要标记的绘制调用之前和之后分别添加起始和结束标记命令。这一过程基于OpenGL ES的Transform Feedback特性对标记绘制调用处理的所有顶点数据进行缓冲,经过顶点匹配、运动估计和屏幕空间投影等操作后获得高精度运动向量,最终绘制出预测帧。
增强模式的运动估计原理决定了其更高的精度和更好的画质表现。由于标记对象能够在运动估计阶段获得更高精度的运动向量图,尤其在相机和物体快速移动的游戏场景中,增强模式的帧生成效果明显优于基础模式,模糊伪影显著减少。
需要注意的是,增强模式当前仅适配华为Mate 60、Mate 60 Pro、Mate X5等特定手机系列机型。在不受支持的设备上,系统将自动降级为基础模式。
2.4 -> 顶点标记技术详解
增强模式的核心在于顶点标记。开发者需要在开发阶段使用图形驱动库(OpenGL ES)提供的API,在需要标记的绘制调用之前和之后分别添加起始标记命令和结束标记命令。正确的顶点标记策略对最终画质至关重要:
- 只标记运动物体:由于一个画面中通常只有少数物体在运动,而运动物体的运动预测恰恰是最困难的。仅标记运动物体可以在不显著牺牲性能的前提下实现明显的画质提升。
- 标记时机选择:应在参与深度图生成的Pass中标记绘制调用。对于延迟管线(Deferred Pipeline),建议在gbuffer pass中标记;对于带有预深度(Pre-depth)的前向管线,建议在预深度pass中标记;对于不带预深度的前向管线,建议在基础pass中标记。
- 性能与精度的平衡:更高精度的运动向量图需要更高的性能开销,因此开发者必须在精度和性能之间找到平衡点。
顶点标记技术使AI超帧能力能够在画质和性能之间实现更加灵活的调节,为追求极致画质的游戏提供了专业化优化路径。
3 -> AI超帧与传统GPU超帧的方案对比
3.1 -> 输入数据的差异
传统GPU超帧方案重度依赖前后帧颜色图、深度图、投影矩阵、几何顶点MV等多维输入信息。这意味着开发者需要从渲染管线的各个环节收集并传递大量数据,集成工作复杂且容易出错。
AI超帧方案则完全不同------它采用了更灵活的AI模型,仅依赖前后帧颜色图即可完成预测。这一特性极大降低了集成复杂度与系统压力,开发者无需处理深度图、投影矩阵等复杂数据,仅需提供前后帧的颜色图像即可获得预测帧。
3.2 -> 硬件资源利用的差异
传统GPU方案的任务处理完全依赖GPU单元,在高负载场景下GPU往往成为系统瓶颈,导致功耗飙升和发热问题。
AI超帧方案充分利用NPU硬件资源进行AI模型推理,通过AI算法对复杂场景的帧率进行提升,实现更佳的功耗收益。NPU专门针对神经网络推理进行架构优化,在处理AI模型推理任务时具有比GPU更高的能效比。
3.3 -> 画质表现的差异
在《诛仙2》的实机测试中,AI超帧方案的表现尤为出色:
- 角色快速移动时,无"影腿"或残影现象;
- 前景与背景颜色错位污染显著减少;
- 静态物体伪影更少且无碎裂感,画面稳定性增强;
- 动态文字UI保持清晰,交互流畅度提升。
4 -> 集成开发实践
4.1 -> 开发环境准备
AI超帧能力的集成需要满足以下环境要求:
- DevEco Studio 6.0.0 Release或更高版本
- HarmonyOS SDK 6.0.0 Release SDK或更高版本
- 硬件设备:华为手机或平板,系统版本HarmonyOS 5.0.5 Release或更高版本
4.2 -> Vulkan平台超帧能力集成
以Vulkan图形API平台为例,AI超帧能力的集成主要涉及frame_generation_vk.h头文件中声明的各类接口。这些接口声明于libframegeneration.so库中,系统能力为SystemCapability.GraphicsGame.RenderAccelerate,起始版本为5.0.0(12)。
核心接口包括:
- 结构体 :用于描述超帧上下文实例创建所需的属性信息(
FG_Context_VK)、输入输出图像的格式信息、同步状态信息及图像信息等。 - 函数:创建超帧上下文实例、设置算法模式、下发帧生成命令等。
4.3 -> OpenGL ES平台集成流程
对于使用OpenGL ES API的开发者,AI超帧能力集成的主要业务流程如下:
-
创建上下文实例 :用户进入超帧适用的游戏场景后,应用调用
HMS_FG_CreateContext_GLES接口创建超帧上下文实例。 -
配置超帧实例属性:
- 调用
HMS_FG_SetAlgorithmMode_GLES设置超帧算法模式,选择内插模式或外插模式; - 调用
HMS_FG_SetResolution_GLES设置超帧输入输出图像分辨率; - 可选调用
HMS_FG_SetCvvZSemantic_GLES设置齐次裁剪空间Z/W范围及深度测试函数; - 可选调用
HMS_FG_SetImageFormat_GLES设置真实渲染帧颜色缓冲区图像格式。
- 调用
-
激活超帧实例 :调用
HMS_FG_Activate_GLES接口激活超帧上下文实例。 -
生成预测帧 :调用
HMS_FG_Dispatch_GLES接口并传入历史真实渲染帧颜色信息、深度信息、相机矩阵信息,生成预测帧并更新预测帧缓冲区。当相机视图投影矩阵的平移分量非常大时(如超过10W),需要在调用HMS_FG_Dispatch_GLES前调用HMS_FG_SetExtendedCameraInfo_GLES设置相机扩展信息,以获取精度更高的预测帧效果。 -
预测帧送显与真实帧送显:先绘制预测帧并送显,随后绘制缓存中的上一帧真实渲染帧并送显。
-
销毁上下文 :用户退出超帧适用场景后,调用
HMS_FG_DestroyContext_GLES接口销毁超帧上下文实例并释放内存资源。
4.4 -> 代码示例
以下基于OpenGL ES平台的超帧能力集成代码示例展示了关键步骤:
cpp
// 1. 引用超帧头文件
#include <graphics_game_sdk/frame_generation_gles.h>
// 2. CMakeLists.txt配置
find_library( # Sets the name of the path variable.
framegeneration-lib
# Specifies the name of the library.
framegeneration
)
target_link_libraries(entry PUBLIC
${framegeneration-lib}
# Other libraries
)
// 3. 创建超帧上下文实例
FG_ErrorCode CreateContext(FG_Context context) {
FG_Context_VK contextInfo = {}; // 配置上下文属性
return HMS_FG_CreateContext_GLES(&contextInfo, &context);
}
// 4. 设置超帧算法模式
FG_ErrorCode SetAlgorithmMode(FG_Context context) {
// 选择内插模式或外插模式
FG_FrameGenerationAlgorithmMode mode = FG_FRAMEGEN_ALGO_MODE_INTERPOLATION;
return HMS_FG_SetAlgorithmMode_GLES(context, mode);
}
// 5. 设置输入输出分辨率
FG_ErrorCode SetResolution(FG_Context context, uint32_t width, uint32_t height) {
return HMS_FG_SetResolution_GLES(context, width, height);
}
// 6. 激活超帧实例
FG_ErrorCode ActivateContext(FG_Context context) {
return HMS_FG_Activate_GLES(context);
}
// 7. 在每一帧调用超帧分发接口
void RenderFrame(FG_Context context, FG_ImageInfo inputInfo, FG_DispatchParams params) {
// 更新每一帧的参数信息
params.camera = currentCameraMatrix; // 当前相机矩阵
params.prevCamera = previousCameraMatrix; // 历史相机矩阵
params.nearPlane = nearPlane; // 近平面
params.farPlane = farPlane; // 远平面
// 调用超帧生成接口
FG_ErrorCode result = HMS_FG_Dispatch_GLES(context, &inputInfo, ¶ms);
if (result == FG_SUCCESS) {
// 绘制预测帧并送显
DrawPredictedFrame();
// 绘制真实帧并送显
DrawRealFrame();
}
}
// 8. 程序退出时销毁超帧实例
void DestroyContext(FG_Context context) {
HMS_FG_DestroyContext_GLES(context);
}
对于Vulkan平台的开发者,frame_generation_vk.h提供了类似但针对Vulkan API定制的接口,结构体定义涵盖了输入输出图像的格式信息、同步状态信息以及每帧都需要更新的参数信息。
4.5 -> 增强模式顶点标记示例
对于选择增强模式的开发者,需要在代码中添加顶点标记。以下为基于OpenGL ES的顶点标记代码示例:
cpp
// 引入头文件
#include <GLES3/gl32.h>
// 定义扩展宏
#define GL_DRAWCALL_HINT 0x8193
#define GL_START 0x8194
#define GL_END 0x8195
// 声明动态物体的顶点数量
GLsizei vertices;
// 渲染循环
void UpdateAndRenderOpaqueScene() {
/* 准备渲染资源... */
// 在绘制动态物体之前开始记录顶点数据
glHint(GL_DRAWCALL_HINT, GL_START);
// 绘制动态物体的顶点
glDrawArrays(GL_TRIANGLES, 0, vertices);
// 在绘制动态物体之后停止记录顶点数据
glHint(GL_DRAWCALL_HINT, GL_END);
}
4.6 -> 应用架构与调用流程
Graphics Accelerate Kit的帧生成能力集成应用架构可分为三个部分:C++层、ArkTS层和工具链层:
- C++层:实现场景渲染和管理超帧生命周期
- ArkTS层:实现前端UI,并在应用和UI生命周期中调用C++侧的图形渲染方法
- CMake编译工具链:将C++代码编译为SO文件供ArkTS调用
典型的调用流程为:
- 在
EntryAbility.ets的OnCreate函数中设置超帧模式; - 在NAPI层调用
InitAPP函数,挂载应用生命周期对应的本地方法,并创建渲染线程; - 在NAPI层调用
InitUI函数,为XComponent注册事件回调函数; InitAPP函数完成初始化后开始创建Surface,创建成功后触发OnSurfaceCreated事件回调,调用InitVulkan方法执行渲染并初始化超帧资源,然后在OnFrame方法中循环绘制场景,包括生成和插入预测帧。
5 -> 性能收益与实测数据
AI超帧能力的实际效果已在《诛仙2》鸿蒙版手游中得到了充分验证。作为鸿蒙系统AI超分超帧技术的首个深度合作手游,《诛仙2》团队与华为技术团队历经146个日夜的匠心打磨,成功在移动端实现了PC级画质体验。
在实机测试中,《诛仙2》鸿蒙版集成AI超帧验证后取得了显著的性能收益:
- 平均帧率 从51.76FPS提升至58.68FPS,接近满帧运行;
- 单帧能效降低20%+,不仅带来操作手感的飞跃,也显著延长了玩家使用时长与设备续航表现。
在画质方面,鸿蒙6.0时域AI超分技术协同GPU+NPU异构计算,实现了2倍超高清渲染。山川纹理纤毫毕现、衣袂飘动栩栩如生、法术特效流光溢彩,视觉质量在无明显损失的前提下实现了整体功耗降低10%以上,尤其是在GPU重载场景中表现更为突出。
6 -> 应用场景与未来展望
AI超帧能力的应用场景不仅局限于大型MMO手游。在开放世界游戏、竞技类游戏、AR/VR应用以及各类高帧率需求的图形应用中,AI超帧都有广阔的应用空间。Graphics Accelerate Kit提供的超帧、ABR、OpenGTX等多维图形加速技术能够协同工作,帮助开发者构建更加流畅、高效、省电的图形应用。
值得一提的是,AI超帧技术的演进与整个移动图形产业的技术趋势高度一致。ARM等芯片厂商也在积极探索神经网络图形技术,如ARM发布的神经帧率增强(Neural Frame Rate Upscaling)技术能够在不增加GPU负载的情况下实现帧率翻倍,与鸿蒙AI超帧的技术理念不谋而合。这表明AI驱动的图形加速正在成为移动端图形优化的主流方向。
对于开发者而言,AI超帧能力带来的核心价值在于:让画质与性能不再是非此即彼的抉择。通过HarmonyOS SDK,开发者可以在不牺牲视觉质量的前提下实现性能突破,为终端用户提供更加流畅、稳定、低功耗的高品质图形体验。
感谢各位大佬支持!!!
互三啦!!!