当前位置: 首页 > news >正文

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上,全新Mate70系列及多款全场景新品正式亮相。在游戏领域,HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit(图形加速服务),帮助游戏应用快速集成超帧、GTX自适应稳态渲染和自适应刷新率等渲染优化能力,并解决游戏运行不流畅、卡顿掉帧等痛点体验问题,让接入HarmonyOS SDK的手游,如《决胜巅峰》等,在Mate新机上的体验实现大幅提升。

在这里插入图片描述

独特大视野,推塔体验细腻又流畅

《决胜巅峰》在HarmonyOS NEXT上首发,并且在Mate X6折叠屏上首次以大视野和高帧率的形式呈现给MOBA类游戏玩家。在Mate X6折叠屏手机的超大视野下,《决胜巅峰》的可视画面提升25%,能够更全面地观察战场。通过超帧技术,将帧率突破到120帧,使得每一次技能释放、每一次推塔,都显得更加细腻、顺畅,极大地提升了游戏的沉浸感,为玩家带来前所未有的对战快感。

在对快速反应要求极高的MOBA类游戏中,超帧技术带来的120帧效果让画面更为流畅,帧率也更稳定,帮助玩家更好地掌控局势,提升整体的游戏体验。在团战中,华丽的技能和流畅的动画结合,也使得战斗画面更加震撼。

优化性能开销,游戏效果不 “打折”

通过结合《决胜巅峰》游戏开发者主动提供的游戏过程关键信息,可以实现GTX自适应稳态渲染和自适应刷新率等游戏加速方案,帮助开发者打造高画质、高流畅、低功耗的非凡游戏体验。

自适应稳态渲染可根据游戏场景、GPU负载等信息,动态调整渲染负载,减少游戏掉帧,让玩家获得一个更加稳定的游戏体验。

在这里插入图片描述

在这里插入图片描述

自适应稳态渲染技术接入架构示意图

自适应稳态渲染接入代码:

// 初始化ABR实例,配置Buffer分辨率因子范围属性,结合具体游戏分辨率、画质设置合适的范围
// 例如设置ABR对Buffer分辨率进行0.8~1.0倍的自适应调整
errorCode = HMS_ABR_SetScaleRange(context_, 0.8f, 1.0f);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_SetScaleRange execution failed, error code: %d.", errorCode);return false;
}
// 激活ABR上下文实例
errorCode = HMS_ABR_Activate(context_);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_Activate execution failed, error code: %d.", errorCode);return false;
}
// 相机运动数据结构体,设置每帧实时相机运动数据
ABR_CameraData cameraData;
cameraData.position = static_cast<ABR_Vector3>(camera_.GetPosition());
cameraData.rotation = static_cast<ABR_Vector3>(camera_.GetRotation());
// 每帧相机运动数据更新
errorCode = HMS_ABR_UpdateCameraData(context_, &cameraData);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_UpdateCameraData execution failed, error code: %d.", errorCode);return false;
}
//渲染前的准备,绑定目标帧缓冲索引,清空颜色缓冲 renderer_->BeginRenderTarget(fbo,BACKGROUND.x_, BACKGROUND.y_, BACKGROUND.z_, 1.0F); 
//在Buffer渲染前调用,执行失败不影响Buffer正常渲染 
errorCode = HMS_ABR_MarkFrameBuffer_GLES(context_);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_MarkFrameBuffer_GLES execution failed, error code: %d.", errorCode);
}
//调用绘制方法进行渲染 
opaqueLayer_Render(sceneDelta, camera_.GetviewMatrix() .lastViewProj_); 
//获取每帧的缩放信息 
float scale; 
erorCode =HMS_ABR_GetScale(context_. &scale); 
GOLOGD("Scale is %f, ". scale); 
if (errorCode != ABR_SUCCESS) {
GOLOGE("HMS_ABR_GetScale execution failed, error code: %d.", errorCode);
}
//将帧缓冲索引绑定为默认值0 
renderer_->EndRenderTarget();

在这里插入图片描述

点击查看自适应稳态渲染接入教程

据统计,多数游戏120FPS档位下,其实约70%渲染场景是没有变化的,因此主场景里将近7成的渲染都并非是必要的。

自适应刷新率可以根据游戏场景、玩家操作、CPU负载、GPU负载、手机温度等信息,智能地调整游戏帧率与屏幕刷新率,保证体验基础上实现降低功耗。在玩家休闲状态、游戏画面变化幅度小的情况下,帧率可适当调低,节省电量、控制温度;而在玩家操作剧烈、游戏画面急速变化时,帧率则提升到极致水平,保证玩家的游戏体验。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

自适应刷新率接入架构示意图

在这里插入图片描述

自适应刷新率接入流程示意图

自适应刷新率接入代码:

//配置OpenGTX属性
errorCode=HMS_OpenGTX_SetConfiguration(contextGtx_, &configGtx);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OPENGTX_SetConfiguration execution failed, error code: %d.", errorCode);return false;
}
//激活OpenGTX上下文实例
errorCode = HMS_OpenGTX_Activate(contextGtx_);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_Activate execution failed, error code: %d.", errorCode);return false;
}
//发送游戏场景信息
OpenGTX_GameScenelnfo gameScenelnfo;
gameScenelnfo.scenelD=OTHERS_SCENE;
gameScenelnfo.description=OGBT_DESCRIPTION.data();
gameScenelnfo.recommendFPS=OGBT_RECOMMEND_FPS;
gameScenelnfo.minFPS=OGBT_MIN_FPS;
gameScenelnfo.maxFPS=OGBT_MAX_FPS;
gameScenelnfo.resolutionCurValue.height=OGBT_RES_HEIGHT;
gameScenelnfo.resolutionCurValue.width=OGBT_RES_WIDTH;
errorCode = HMS_OpenGTX_DispatchGameSceneInfo(contextGtx_, &gameSceneInfo);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_DispatchGameSceneInfo execution failed, error code: %d.", errorCode);return false;
}
//发送游戏网络信息
OpenGTX_Networklnfo networklnfo;
networkInfo.networkLatency.down = OGBT_NETWORK_LATENCY_DOWN;
networklnfo.networkLatency.up= OGBT_NETWORK_LATENCY_UP;
networklnfo.networkLatency.total =OGBT_NETWORK_LATENCY_TOTAL;
networkInfo.networkServerlP=OGBT_NETWORK_SERVER_IP.data();
errorCode = HMS_OpenGTX_DispatchNetworklnfo(contextGtx_, &networklnfo);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_ DispatchNetworklnfo execution failed, error code: %d.", errorCode);return false;
}

在这里插入图片描述

点击查看自适应刷新率接入教程

除了图形加速服务(Graphics Accelerate Kit),HarmonyOS SDK还提供更多图形开放能力,为游戏等重载应用的图形渲染提供帮助,帮助开发者打造高帧率、高画质、低功耗的用户体验。

探索更多

访问图形加速服务(Graphics Accelerate Kit),了解更多详情开始使用。

*本文所提及数据均为内部实验室测试结果

*本文引用素材来自三方授权,因版本/机型不同可能存在变化,以实际为准。

相关文章:

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上&#xff0c;全新Mate70系列及多款全场景新品正式亮相。在游戏领域&#xff0c;HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit&#xff08;图形加速服务…...

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…...

106.【C语言】数据结构之二叉树的三种递归遍历方式

目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...

qt QToolButton详解

1、概述 QToolButton是Qt框架中的一个控件&#xff0c;它继承自QAbstractButton。QToolButton通常用于工具栏&#xff08;QToolBar&#xff09;中&#xff0c;提供了一种快速访问命令或选项的方式。与普通的QPushButton按钮相比&#xff0c;QToolButton通常只显示一个图标而不…...

2024年大热,Access平替升级方案,也适合Excel用户

欢迎各位看官&#xff0c;您来了&#xff0c;就对了&#xff01; 您多半是Access忠实粉丝&#xff0c;至少是excel用户&#xff0c;亦或是WPS用户吧。那就对了&#xff0c;今天的分享肯定对您有用。 本文1100字&#xff0c;阅读时长2分50秒&#xff01; 现实总是不尽人意&am…...

探索Scala的模式匹配:身份证识别与等级判定!!! #Scala # scala #匹配模式

在Scala编程语言中&#xff0c;模式匹配是一个强大且表达力丰富的特性&#xff0c;它允许我们以声明式的方式处理多种情况。今天&#xff0c;我们将通过两个有趣的例子来展示Scala模式匹配的魅力&#xff1a;身份证号识别和等级判定。 1. 身份证号识别&#xff1a;定位你的家乡…...

python数据分析之爬虫基础:爬虫介绍以及urllib详解

前言 在数据分析中&#xff0c;爬虫有着很大作用&#xff0c;可以自动爬取网页中提取的大量的数据&#xff0c;比如从电商网站手机商品信息&#xff0c;为市场分析提供数据基础。也可以补充数据集、检测动态变化等一系列作用。可以说在数据分析中有着相当大的作用&#xff01;…...

【星海随笔】syslinux

Ubuntu相关资料 https://www.pugetsystems.com/labs/hpc/ubuntu-22-04-server-autoinstall-iso/#Step_2_Unpack_files_and_partition_images_from_the_Ubuntu_2204_live_server_ISO https://launchpad.net/ubuntu/source/squashfs-tools/1:4.6.1-1build1 sudo tar -xf my_compu…...

力扣C语言刷题记录 (二)移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xff1a; 更改…...

【Vue3】【Naive UI】<NAutoComplete>标签

【Vue3】【Naive UI】标签 <NAutoComplete> 是 Naive UI 库中的一个组件&#xff0c;用于实现自动完成或联想输入功能。 它允许用户在输入时看到与当前输入匹配的建议列表&#xff0c;从而帮助用户更快地填写表单字段。 这个组件通常用于搜索框、地址输入等场景&#xff…...

【Halcon】使用均值滤波出现假边怎么办?

在图像处理过程中,均值滤波是一种常见的平滑技术,用于减少图像中的噪声。然而,当应用于具有显著边缘或对比度变化的图像时,均值滤波可能会导致“假边”现象,即原本不存在的边缘在滤波后变得明显。以下是如何在Halcon中处理这一问题,并提供一个完整的示例代码。 示例背景…...

Flask+Minio实现断点续传技术教程

什么是MinIO MinIO是一个高性能的分布式对象存储服务&#xff0c;与Amazon S3 API兼容。它允许用户存储和检索任意规模的数据&#xff0c;非常适合于使用S3 API的应用程序。MinIO支持多租户存储&#xff0c;提供高可用性、高扩展性、强一致性和数据持久性。它还可以作为软件定义…...

JAVA设计模式,动态代理模式

动态代理&#xff08;Dynamic Proxy&#xff09;是Java中一种非常有用的设计模式。它允许在运行时创建一个实现了一组给定接口的新类。这种模式主要用于当需要为某个对象提供一个代理以控制对该对象的访问时。通过这种方式&#xff0c;可以添加额外的功能&#xff0c;如事务管理…...

HTML 快速上手

目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…...

【计算机视觉算法与应用】模板匹配、图像配准

目录 1. 基于灰度值的模板匹配 2. 基于相关性的模板匹配 3. 基于形状的模板匹配 4. 基于组件的模板识别 5. 基于形变的模板匹配 6. 基于描述符的模板匹配 7. 基于点的模板匹配 性能比较 模板匹配的算法实现需要结合具体需求和应用场景来选择方法。以下是基于 OpenCV 的…...

【Linux】设计文件系统(C实现)

要求&#xff1a; (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限&#xff08;八进制&#xff09;、文件长度、时间&#xff08;创建时间&#xff0c;修改时间以及…...

详解Rust多线程编程

文章目录 多线程模型创建和管理线程自定义线程行为线程传递数据线程间通信线程池错误处理与线程Condvar(条件变量)无锁并发高性能并发库 Rust的多线程编程提供了一种安全、高效的方式来进行并发操作。Rust的并发性设计原则之一是确保线程安全&#xff0c;同时避免运行时的开销&…...

el-upload上传多个文件,一次请求,Django接收

1、:file-list"fileList" :on-change"handleChange" 将文件赋值到fileList 2、 :auto-upload"false" 手动触发上传 写个按钮点击执行这个 this.$refs.upload.submit(); 3、自己写上传&#xff0c;不会再触发上传成功或失败回调 4、 request.FI…...

Python实现网站资源批量下载【可转成exe程序运行】

Python实现网站资源批量下载【可转成exe程序运行】 背景介绍解决方案转为exe可执行程序简单点说详细了解下 声明 背景介绍 发现 宣讲家网 的PPT很好&#xff0c;作为学习资料使用很有价值&#xff0c;所以想下载网站的PPT课件到本地&#xff0c;但是由于网站限制&#xff0c;一…...

《JavaScript高级程序设计》读书笔记 20

感谢点赞、关注和收藏&#xff01; 原始值包装类型 为了方便操作原始值&#xff0c;ECMAScript 提供了 3 种特殊的引用类型&#xff1a;Boolean、Number 和 String。每当用到某个原始值的方法或属性时&#xff0c;后台都会创建一个相应原始包装类型的对象&#xff0c;从而暴露…...

29.新生活轨道

七月中旬&#xff0c;北京的夏天进入最炙热的阶段。阳光白晃晃地炙烤着大地&#xff0c;空气滚烫&#xff0c;连风吹在脸上都带着一股干燥的灼烧感。行道树上的知了叫得声嘶力竭&#xff0c;仿佛要用尽最后一丝力气&#xff0c;对抗这无休止的炎热。陈远的生活&#xff0c;也像…...

告别抢票焦虑:大麦网双端自动抢票系统深度解析与实战指南

告别抢票焦虑&#xff1a;大麦网双端自动抢票系统深度解析与实战指南 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾在心仪演出的开票瞬间…...

CANN 容器化部署:Docker 与 K8s 实战

一、为什么需要容器化 1.1 容器化优势 裸机部署:环境依赖复杂&#xff0c;版本冲突扩缩容困难&#xff0c;手动运维资源隔离差&#xff0c;互相影响容器化部署:环境一致性&#xff0c;开箱即用弹性扩缩容&#xff0c;自动运维资源隔离&#xff0c;互不影响版本管理&#xff0c;…...

胶片颗粒≠噪点!20年胶片扫描工程师首曝Midjourney底层噪声映射逻辑(RGB通道衰减比=1.03:0.97:1.12)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;胶片颗粒≠噪点&#xff01;20年胶片扫描工程师首曝Midjourney底层噪声映射逻辑&#xff08;RGB通道衰减比1.03:0.97:1.12&#xff09; 胶片颗粒是银盐晶体在显影过程中形成的物理性随机簇状结构&#xff0c;…...

戴森球计划工厂蓝图:革命性工厂配置架构的5大技术突破

戴森球计划工厂蓝图&#xff1a;革命性工厂配置架构的5大技术突破 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints蓝图仓库代表了戴森球计划游戏中最先进…...

从开发者反馈看taotoken api密钥管理与访问控制功能的实用性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从开发者反馈看taotoken api密钥管理与访问控制功能的实用性 在构建基于大模型的应用时&#xff0c;API密钥的管理与访问控制是保障…...

如何用4个PHP文件搭建跨平台音乐解析API

如何用4个PHP文件搭建跨平台音乐解析API 【免费下载链接】music-api Music API 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 你是否曾为音乐平台间的会员壁垒而烦恼&#xff1f;想开发音乐应用却苦于没有统一的接口&#xff1f;music-api为你提供了完美的解…...

UABEA:跨平台Unity游戏资源编辑神器,解锁游戏模组制作新境界

UABEA&#xff1a;跨平台Unity游戏资源编辑神器&#xff0c;解锁游戏模组制作新境界 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾想修改游戏中的角色皮肤、替换背景音乐&#xff0c;或是深…...

RoPE与KV缓存优化:提升Transformer长序列处理能力

1. 旋转位置编码&#xff08;RoPE&#xff09;技术解析旋转位置编码&#xff08;Rotary Position Embedding, RoPE&#xff09;是近年来Transformer架构中位置编码技术的重要突破。传统Transformer使用绝对或相对位置编码&#xff0c;而RoPE通过旋转矩阵实现位置信息的注入&…...

5分钟极速汉化:让Android Studio告别英文困扰的终极方案

5分钟极速汉化&#xff1a;让Android Studio告别英文困扰的终极方案 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Androi…...