如果你在做游戏或者图形密集型应用可能会遇到这样的问题画面很精美但帧率不够高或者想用光线追踪做真实反射但性能跟不上。HarmonyOS 的XEngine Kit就是为了解决这类问题——它提供了一系列 GPU 加速特性让你在不大幅降低画质的前提下提升渲染性能。XEngine 是什么XEngine 是 HarmonyOS 的 GPU 加速引擎提供以下核心能力特性说明适用场景VRS可变速率着色画面不同区域用不同的着色精度游戏中降低非焦点区域的渲染开销空间超分GPU 加速的图像放大低分辨率渲染 放大到高分辨率神经网络超分AI 加速的图像放大效果更好但需要 AI 硬件支持时序超分利用前后帧信息放大运动场景效果最好光线追踪反射GPU 加速的实时反射水面、镜面、金属表面光线追踪全局光照GPU 加速的全局光照室内场景的真实光照HPS高性能着色器GPU 加速的基数排序粒子系统、透明度排序下面是 XEngine 提供的各项 GPU 加速特性及其适用场景XEngine GPU 加速引擎VRS 可变速率着色超分辨率光线追踪HPS 高性能着色器空间超分: 速度快效果一般神经网络超分: AI 加速效果好时序超分: 运动场景效果最好光线追踪反射光线追踪全局光照GPU 加速基数排序降低非焦点区域渲染精度低分辨率渲染 放大到高分辨率水面/镜面/金属表面室内场景真实光照优化粒子系统基本用法XEngine 是 C API不是 ArkTS需要在 Native 层使用。使用流程一般是查询扩展是否可用创建 XEngine 对象在渲染管线中使用销毁对象查询扩展可用性在使用任何 XEngine 特性之前必须先查询设备是否支持// OpenGL ES 环境constchar*extensionNameHMS_XEG_GetString(XEG_ADAPTIVE_VRS_EXTENSION_NAME);// Vulkan 环境XEG_ExtensionProperties properties;HMS_XEG_EnumerateDeviceExtensionProperties(properties);如果返回的扩展名不为空说明设备支持该特性。VRS可变速率着色VRSVariable Rate Shading是一种优化技术对画面中不重要的区域用较低的着色精度渲染重要的区域保持高精度。打个比方你在玩射击游戏准星附近的区域需要高精度渲染因为你在看但画面边缘的天空和远处的建筑可以用低精度——反正你也看不清。这样 GPU 的工作量就减少了帧率就上去了。VRS 的工作方式VRS 把画面分成小块比如 8x8 像素一块每块可以设置不同的着色率1x1每个像素都着色最高质量2x1水平方向每 2 个像素共享一个着色结果2x2每 4 个像素共享一个着色结果最省性能4x4每 16 个像素共享一个着色结果自适应 VRSXEngine 的自适应 VRS 会根据画面内容自动决定每块区域的着色率——边缘和细节多的地方用高精度平坦的地方用低精度。你不需要手动指定。超分辨率超分辨率Super Resolution是把低分辨率的图像放大到高分辨率同时尽量保持画质。在游戏中你可以先用低分辨率渲染比如 720p再放大到屏幕分辨率比如 1080p 或 2K这样渲染开销大幅降低但画质损失不大。空间超分空间超分只利用当前帧的信息来放大。速度快但效果一般。// 查询空间超分扩展是否可用constchar*extHMS_XEG_GetString(XEG_SPATIAL_UPSCALE_EXTENSION_NAME);神经网络超分神经网络超分用 AI 模型来放大图像。效果比空间超分好但需要 AI 硬件支持。推荐超分倍率 1.0-1.5 倍。constchar*extHMS_XEG_GetString(XEG_NEURAL_UPSCALE_EXTENSION_NAME);时序超分时序超分利用前后帧的信息来放大。它会分析前后帧的运动向量把多帧的信息融合起来得到更清晰的结果。推荐超分倍率 1.25-2.0 倍。constchar*extHMS_XEG_GetString(XEG_TEMPORAL_UPSCALE_EXTENSION_NAME);时序超分是效果最好的方案适合运动场景比如赛车游戏、FPS 游戏。光线追踪光线追踪Ray Tracing是一种渲染技术通过模拟光线的传播路径来计算画面。它能做出非常真实的效果——反射、折射、阴影、全局光照——但计算量很大。XEngine 提供了两种光线追踪能力光线追踪反射让物体表面能反射周围的环境。比如水面倒映天空、镜子里看到人物、金属表面反射光线。// Vulkan 环境constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_RT_REFLECTION_EXTENSION_NAME);光线追踪全局光照模拟光线在场景中的多次反弹让室内场景的光照更真实。XEngine 提供了两种全局光照方案DDGI动态漫反射全局光照基于探针的方案适合动态场景NNGI神经网络全局光照基于 AI 的方案效果更好constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_RTGI_EXTENSION_NAME);HPS高性能着色器HPSHigh Performance Shader提供了 GPU 加速的基数排序。在粒子系统中透明粒子需要按深度排序才能正确渲染CPU 排序很慢HPS 把排序工作交给 GPU大幅提升性能。constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_HPS_RADIX_SORT_EXTENSION_NAME);选择 OpenGL ES 还是 Vulkan根据需要使用的特性来选择图形 API是否是否需要使用 XEngine 特性需要光线追踪或 HPS?必须使用 Vulkan只需要 VRS 和超分?OpenGL ES 即可评估具体需求光线追踪反射光线追踪全局光照HPS 基数排序VRS空间/神经网络/时序超分XEngine 同时支持 OpenGL ES 和 Vulkan 两种图形 API特性OpenGL ESVulkanVRS支持支持空间超分支持支持神经网络超分支持-时序超分支持支持光线追踪反射-支持光线追踪全局光照-支持HPS-支持如果你需要光线追踪或 HPS必须用 Vulkan。如果只需要超分和 VRSOpenGL ES 也能满足。小结XEngine 是 HarmonyOS 的 GPU 加速引擎提供了VRS可变速率着色降低非焦点区域的渲染精度超分辨率空间/神经网络/时序三种方案用低分辨率渲染 放大光线追踪反射和全局光照提升画面真实感HPSGPU 加速排序优化粒子系统这些特性都是 C API需要在 Native 层使用。使用前必须查询设备是否支持。下一篇我们来看 DisplaySync 和 HDR——怎么控制帧率和高动态范围显示。
鸿蒙开发-想让游戏更流畅?XEngine的GPU加速能力
如果你在做游戏或者图形密集型应用可能会遇到这样的问题画面很精美但帧率不够高或者想用光线追踪做真实反射但性能跟不上。HarmonyOS 的XEngine Kit就是为了解决这类问题——它提供了一系列 GPU 加速特性让你在不大幅降低画质的前提下提升渲染性能。XEngine 是什么XEngine 是 HarmonyOS 的 GPU 加速引擎提供以下核心能力特性说明适用场景VRS可变速率着色画面不同区域用不同的着色精度游戏中降低非焦点区域的渲染开销空间超分GPU 加速的图像放大低分辨率渲染 放大到高分辨率神经网络超分AI 加速的图像放大效果更好但需要 AI 硬件支持时序超分利用前后帧信息放大运动场景效果最好光线追踪反射GPU 加速的实时反射水面、镜面、金属表面光线追踪全局光照GPU 加速的全局光照室内场景的真实光照HPS高性能着色器GPU 加速的基数排序粒子系统、透明度排序下面是 XEngine 提供的各项 GPU 加速特性及其适用场景XEngine GPU 加速引擎VRS 可变速率着色超分辨率光线追踪HPS 高性能着色器空间超分: 速度快效果一般神经网络超分: AI 加速效果好时序超分: 运动场景效果最好光线追踪反射光线追踪全局光照GPU 加速基数排序降低非焦点区域渲染精度低分辨率渲染 放大到高分辨率水面/镜面/金属表面室内场景真实光照优化粒子系统基本用法XEngine 是 C API不是 ArkTS需要在 Native 层使用。使用流程一般是查询扩展是否可用创建 XEngine 对象在渲染管线中使用销毁对象查询扩展可用性在使用任何 XEngine 特性之前必须先查询设备是否支持// OpenGL ES 环境constchar*extensionNameHMS_XEG_GetString(XEG_ADAPTIVE_VRS_EXTENSION_NAME);// Vulkan 环境XEG_ExtensionProperties properties;HMS_XEG_EnumerateDeviceExtensionProperties(properties);如果返回的扩展名不为空说明设备支持该特性。VRS可变速率着色VRSVariable Rate Shading是一种优化技术对画面中不重要的区域用较低的着色精度渲染重要的区域保持高精度。打个比方你在玩射击游戏准星附近的区域需要高精度渲染因为你在看但画面边缘的天空和远处的建筑可以用低精度——反正你也看不清。这样 GPU 的工作量就减少了帧率就上去了。VRS 的工作方式VRS 把画面分成小块比如 8x8 像素一块每块可以设置不同的着色率1x1每个像素都着色最高质量2x1水平方向每 2 个像素共享一个着色结果2x2每 4 个像素共享一个着色结果最省性能4x4每 16 个像素共享一个着色结果自适应 VRSXEngine 的自适应 VRS 会根据画面内容自动决定每块区域的着色率——边缘和细节多的地方用高精度平坦的地方用低精度。你不需要手动指定。超分辨率超分辨率Super Resolution是把低分辨率的图像放大到高分辨率同时尽量保持画质。在游戏中你可以先用低分辨率渲染比如 720p再放大到屏幕分辨率比如 1080p 或 2K这样渲染开销大幅降低但画质损失不大。空间超分空间超分只利用当前帧的信息来放大。速度快但效果一般。// 查询空间超分扩展是否可用constchar*extHMS_XEG_GetString(XEG_SPATIAL_UPSCALE_EXTENSION_NAME);神经网络超分神经网络超分用 AI 模型来放大图像。效果比空间超分好但需要 AI 硬件支持。推荐超分倍率 1.0-1.5 倍。constchar*extHMS_XEG_GetString(XEG_NEURAL_UPSCALE_EXTENSION_NAME);时序超分时序超分利用前后帧的信息来放大。它会分析前后帧的运动向量把多帧的信息融合起来得到更清晰的结果。推荐超分倍率 1.25-2.0 倍。constchar*extHMS_XEG_GetString(XEG_TEMPORAL_UPSCALE_EXTENSION_NAME);时序超分是效果最好的方案适合运动场景比如赛车游戏、FPS 游戏。光线追踪光线追踪Ray Tracing是一种渲染技术通过模拟光线的传播路径来计算画面。它能做出非常真实的效果——反射、折射、阴影、全局光照——但计算量很大。XEngine 提供了两种光线追踪能力光线追踪反射让物体表面能反射周围的环境。比如水面倒映天空、镜子里看到人物、金属表面反射光线。// Vulkan 环境constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_RT_REFLECTION_EXTENSION_NAME);光线追踪全局光照模拟光线在场景中的多次反弹让室内场景的光照更真实。XEngine 提供了两种全局光照方案DDGI动态漫反射全局光照基于探针的方案适合动态场景NNGI神经网络全局光照基于 AI 的方案效果更好constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_RTGI_EXTENSION_NAME);HPS高性能着色器HPSHigh Performance Shader提供了 GPU 加速的基数排序。在粒子系统中透明粒子需要按深度排序才能正确渲染CPU 排序很慢HPS 把排序工作交给 GPU大幅提升性能。constchar*extHMS_XEG_EnumerateDeviceExtensionProperties(XEG_HPS_RADIX_SORT_EXTENSION_NAME);选择 OpenGL ES 还是 Vulkan根据需要使用的特性来选择图形 API是否是否需要使用 XEngine 特性需要光线追踪或 HPS?必须使用 Vulkan只需要 VRS 和超分?OpenGL ES 即可评估具体需求光线追踪反射光线追踪全局光照HPS 基数排序VRS空间/神经网络/时序超分XEngine 同时支持 OpenGL ES 和 Vulkan 两种图形 API特性OpenGL ESVulkanVRS支持支持空间超分支持支持神经网络超分支持-时序超分支持支持光线追踪反射-支持光线追踪全局光照-支持HPS-支持如果你需要光线追踪或 HPS必须用 Vulkan。如果只需要超分和 VRSOpenGL ES 也能满足。小结XEngine 是 HarmonyOS 的 GPU 加速引擎提供了VRS可变速率着色降低非焦点区域的渲染精度超分辨率空间/神经网络/时序三种方案用低分辨率渲染 放大光线追踪反射和全局光照提升画面真实感HPSGPU 加速排序优化粒子系统这些特性都是 C API需要在 Native 层使用。使用前必须查询设备是否支持。下一篇我们来看 DisplaySync 和 HDR——怎么控制帧率和高动态范围显示。