网易首页 > 网易号 > 正文 申请入驻

【厚积薄发】为什么Android游戏画面在30帧运行时有抖动现象

0
分享至


这是第450篇UWA技术知识分享的推送,精选了UWA社区、UWA AI问答的热门话题等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com

UWA QQ群:793972859

本期目录:

  • 为什么Android游戏画面在30帧运行时有抖动现象

  • 团结引擎VS Skinning开启ENABLE_VS_SKINNING_MORE_BONES后,性能反而下降

From UWA AI 问答

Q1:Android平台下,游戏以30帧运行时,即便整体性能稳定,仍普遍存在画面抖动现象,想探讨一下这可能是由于什么原因造成的?

A:画面抖动(Jitter)是Android平台30帧游戏中常见但易被忽视的问题,即便整体FPS稳定,仍可能因以下原因导致视觉上的不流畅或抖动感:

1. 帧生成时间不均匀(Frame Pacing问题)

这是最核心的原因。即使平均帧率为30FPS,若帧的生成间隔不均匀(如一帧耗时28ms,下一帧耗时38ms),会导致视觉上出现“微卡顿”或“抖动”。Android设备尤其在高刷新率屏幕(如90Hz、120Hz)下,若未正确配置帧同步策略,GPU与显示子系统之间的帧提交节奏失配,极易引发此问题。

解决方案:

  • 确保关闭Optimized Frame Pacing(部分模拟器和低端设备存在兼容性问题,实测可缓解抖动)。

  • 使用Choreographer回调来对齐VSync信号,确保帧更新时机精准。

  • 在Unity中,避免仅依赖Application.targetFrameRate=30,因其在动态刷新率设备上可能导致帧率倍数下降(如从30→15)。

可结合定时重设帧率策略:

IEnumerator SetFrameRatePeriodically()
{
while (true)
{
yield return new WaitForSeconds(10);
Application.targetFrameRate = 31;
yield return new WaitForSeconds(0.1f);
Application.targetFrameRate = 30;
}
}

2. GPU与CPU工作负载波动引起帧时间波动

即使平均性能达标,若每帧CPU或GPU耗时波动大(如某些帧CPU耗时接近33ms,其他帧仅15ms),会造成帧间隔不一致,表现为抖动。

排查建议:

  • 使用UWA GOT Online的CPU每帧耗时曲线>40ms帧数占比指标,分析是否存在高波动性。

  • 检查是否存在偶发性任务(如GC、资源加载、逻辑计算集中爆发),导致单帧骤增。

3. 渲染管线与垂直同步机制冲突

Android设备厂商常自定义显示策略,部分机型在非原生刷新率(如60Hz设备跑30Hz)时,系统VSync调度可能出现偏差,导致帧呈现时间错位。

优化方向:

  • 避免频繁切换目标帧率,保持帧率恒定。

  • 在支持的设备上尝试使用SurfaceFlinger相关调试工具观察实际显示帧时序。

  • 若使用自定义渲染管线,检查后处理、阴影等异步操作是否引入延迟。

4. 输入与渲染不同步

触摸输入更新频率(通常60Hz或更高)与30Hz渲染不同步,可能导致操作反馈延迟感叠加视觉抖动。

改进措施:

  • 尽量将关键UI更新与渲染帧对齐。

  • 对高频输入做插值或预测处理,提升交互平滑度。

综上,画面抖动多源于帧间时间不一致性而非平均帧率不足。建议优先通过UWA性能报告中的Jank均值>40ms帧数占比CPU每帧耗时曲线进行量化分析,并针对性优化帧生成节奏与负载均衡。

Q2:有什么解决方案?

A:针对Android平台30帧下画面抖动问题,可采取以下系统性解决方案:

1. 精准控制帧率同步(核心措施)

  • 关闭Optimized Frame Pacing:该功能在部分设备(如MuMu模拟器)存在兼容性问题,易导致帧提交延迟。在Player Settings中禁用此选项可显著改善抖动。

  • 使用Choreographer对齐VSync:通过Android原生API确保每帧更新与系统刷新信号同步,避免因调度偏差导致的帧间隔不均。

  • 周期性重设目标帧率:应对动态刷新率设备(如120Hz降为60Hz时30帧变15帧),可定时重置targetFrameRate以强制系统重新计算:

IEnumerator SetFrameRate()
{
while (true)
{
yield return new WaitForSeconds(10);
Application.targetFrameRate = 31;
yield return new WaitForSeconds(0.1f);
Application.targetFrameRate = 30;
}
}

2. 优化渲染负载与资源管理

  • 降低GPU Skin等高负载特效密度:大量骨骼蒙皮或复杂Shader会加剧帧间波动,建议在低端设备上动态降级。

  • 使用RenderTexture替代Varying插值写回:避免Shader频繁读写主存造成带宽压力,将所需参数绘制到GlobalTexture中复用。

  • 调整Graphics Quality设置:关闭非必要的后处理效果(如动态阴影、抗锯齿),减少单帧渲染开销。

3. 避免运行时性能突变

  • 防止GC集中触发:减少堆内存分配,避免匿名函数、装箱操作;使用对象池管理高频创建/销毁对象。

  • 异步加载资源:通过AssetBundle或Addressables分帧加载,避免单帧卡顿。

  • 限制后台下载并发数:若使用BackgroundDownload,应采用任务队列+线程池模式,控制同时下载数量(如≤5个),防止IO阻塞主线程。

4. 监控与验证工具

  • 使用UWA GOT Online报告分析CPU耗时曲线>40ms帧占比Jank指标,定位帧时间波动源头。

  • 启用UWA本地资源检测,排查冗余Shader变体或大纹理占用。

  • 在真机环境中启用Perfetto或Systrace,观察SurfaceFlinger合成节奏是否稳定。

综上,解决抖动需从帧生成节奏控制负载均衡系统兼容性适配三方面入手,优先确保帧间隔一致性,再逐步优化资源与逻辑开销。

分享链接 :

https://www.uwa4d.com/main/uwa-shared.html?shareId=a93edb8c-708a-4dd5-b999-c34331f41bb9

From问答社区

Q:ENABLE_VS_SKINNING关键字最多支持单个SkinnedMeshRenderer 64根骨骼,所以需要使用ENABLE_VS_SKINNING_MORE_BONES。测试60个单位每个单位骨骼150+,开启后,iPhone XR帧率只有5fps,未开启时帧率20

fps,产生了负优化,会是什么原因?

A: 使用UWA AI问答的功能尝试解读这个问题。

分享链接:


https://www.uwa4d.com/main/uwa-shared.html?shareId=b341fe8e-c27b-4c18-8d09-9abdcf048ba4

问题分析:

1. 顶点着色器计算量激增

  • 开启ENABLE_VS_SKINNING_MORE_BONES后,Unity会切换到更复杂的顶点着色器路径,以处理每顶点更多骨骼影响。

  • 每个顶点的蒙皮计算为:输出位置 = Σ(权重_i × 骨骼变换矩阵_i × 本地位置)。当单个模型骨骼数达150+,即使每个顶点仅受4根骨骼影响,GPU仍需加载并计算大量骨骼矩阵。

  • 这导致:

    • ALU指令数大幅上升,超出移动端GPU执行能力;

    • 显存带宽压力剧增,频繁读取骨骼矩阵纹理或UBO;

    • 着色器编译生成低效代码,尤其在旧版Metal/OpenGL ES驱动下。

2. 硬件性能瓶颈凸显

  • iPhone XR搭载A12芯片,其GPU性能有限,尤其对高ALU和带宽需求场景敏感。

  • 60个单位×150+骨骼 → 总骨骼数超9000,远超常见角色批次规模。

  • GPU每帧需完成:

    • 数千个骨骼矩阵上传(若未合批);

    • 大量顶点着色器并行运行;

    • 渲染管线等待数据就绪,造成Gfx.WaitForPresentOnGfxThread延迟飙升。

3. Unity内置GPU Skinning机制缺陷

  • Unity原生的GPU Skinning(含ENABLE_VS_SKINNING系列宏)在移动平台优化不足:

    • 未有效利用现代API(如Metal Argument Buffers)减少绑定开销;

    • 缺乏对实例化与多对象批量处理的深度整合;

    • 在复杂角色场景下,反而增加CPU-GPU同步负担。

优化建议:

优先关闭ENABLE_VS_SKINNING_MORE_BONES,采用替代方案。

1. 降低骨骼数量(资源层)

  • 与美术协作,通过减骨工具将非关键区域骨骼合并或移除;

  • 目标控制单模型骨骼数在75以内,确保可使用标准ENABLE_VS_SKINNING路径。

2. 使用自定义GPU Instancing + GPU Skinning

  • 参考UWA开源方案,实现基于Compute Shader的骨骼动画计算;

  • 结合GPU Instancing批量渲染相同怪物类型,显著降低DrawCall与动画更新开销;

  • 可同时规避Animator.Update和MeshSkinning.Update的CPU瓶颈。

3. 启用QualitySettings.skinWeights = 4 Bones并导入时锁定

  • 在Model Import Settings中设置Skin Weights为Standard (4 Bones),避免运行时冗余计算;

  • 禁止使用Auto模式导致动态降级开销。

4. 控制屏幕内更新范围

  • 设置SkinnedMeshRenderer.updateWhenOffscreen = false,停用屏幕外角色的动画计算;

  • 配合LOD系统,在远处使用简化骨骼版本。

5. 考虑动画共享技术

  • 对同类角色,使用统一动画状态源,其它实例通过CopyPose复用结果;

  • 可结合对象池管理,进一步减少Animator组件数量。

⚠️ 注意:ENABLE_VS_SKINNING_MORE_BONES应仅用于极少数特例角色,且需严格测试目标设备表现。常规项目不建议开启。

有经验的朋友欢迎转至社区交流:

https://answer.uwa4d.com/question/68f9a7c9244ce21ce9ec0937

无论是社区里开发者们的互助讨论,还是AI基于知识沉淀的快速反馈,核心都是为了让每一个技术难题都有解、每一次踩坑都有回响。本期分享分别来自UWA AI问答和UWA问答社区,希望这些从真实开发场景中提炼的经验,能直接帮你解决当下的技术卡点,也让你在遇到同类问题时,能更高效地找到破局方向。

封面图来源于网络

今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com

UWA社区:community.uwa4d.com

UWA学堂:edu.uwa4d.com

点击下方名片关注我们,将我设为星标,及时接收小编每日推送哦,性能优化不迷路~

近期精彩回顾

【学堂上新】

【充电一刻】

【厚积薄发】

【厚积薄发】


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“多付车费后男子轻生”后续:一审判司机退还900元 司机称钱已交给法院

“多付车费后男子轻生”后续:一审判司机退还900元 司机称钱已交给法院

红星新闻
2025-11-11 10:56:13
卡地亚晚宴明星站位曝地位:那英、郭晶晶靠边站,C位实至名归

卡地亚晚宴明星站位曝地位:那英、郭晶晶靠边站,C位实至名归

查尔菲的笔记
2025-11-10 16:06:40
认真刷完曾医生和祖院长的视频,谁看了不说一句窒息?

认真刷完曾医生和祖院长的视频,谁看了不说一句窒息?

诗意世界
2025-11-10 18:51:56
中央考核巡查组已进驻山西、黑龙江、辽宁、江苏、江西、海南、重庆、云南、甘肃、新疆

中央考核巡查组已进驻山西、黑龙江、辽宁、江苏、江西、海南、重庆、云南、甘肃、新疆

新京报政事儿
2025-11-11 11:56:48
打“第三者”耳光后,时隔8年原配再被刑拘

打“第三者”耳光后,时隔8年原配再被刑拘

中国新闻周刊
2025-11-11 15:41:42
中国“以牙还牙”后,高市早苗怕了,日本政府:称对台湾立场没变

中国“以牙还牙”后,高市早苗怕了,日本政府:称对台湾立场没变

潮鹿逐梦
2025-11-10 19:48:21
湖南人民医院事件后续,偷拍者身份已曝光,曾医生有口难辩

湖南人民医院事件后续,偷拍者身份已曝光,曾医生有口难辩

平老师666
2025-11-10 23:42:34
美国造出“稀土磁铁”!美财长向全球宣布:将摆脱中国“卡脖子”

美国造出“稀土磁铁”!美财长向全球宣布:将摆脱中国“卡脖子”

博览历史
2025-11-10 20:15:30
4.99万!刘强东不给雷军留活路!

4.99万!刘强东不给雷军留活路!

广告创意
2025-11-10 17:24:49
农户23年前响应号召种下300亩杨树,成材后发现被纳入保护区禁止采伐,官方回应

农户23年前响应号召种下300亩杨树,成材后发现被纳入保护区禁止采伐,官方回应

极目新闻
2025-11-11 14:19:28
极目政情丨上海市委原常委朱芝松被公诉,曾长期从事军品工作,违规决定降低国有土地使用权出让价格

极目政情丨上海市委原常委朱芝松被公诉,曾长期从事军品工作,违规决定降低国有土地使用权出让价格

极目新闻
2025-11-11 15:54:17
宝妈高铁堵道后续:知情人透原因,正脸被扒黑皮胖脸,已全网社死

宝妈高铁堵道后续:知情人透原因,正脸被扒黑皮胖脸,已全网社死

鋭娱之乐
2025-11-10 20:55:45
高市硬刚到底,要将中国高官驱逐出境?中方以牙还牙,日本破防了

高市硬刚到底,要将中国高官驱逐出境?中方以牙还牙,日本破防了

时时有聊
2025-11-11 14:34:52
“台独”政客跑欧洲议会自嗨无底线,然而并没有什么用!

“台独”政客跑欧洲议会自嗨无底线,然而并没有什么用!

新民晚报
2025-11-11 10:08:58
琉球群岛地位未定,中方在联合国亮明态度,日媒破防

琉球群岛地位未定,中方在联合国亮明态度,日媒破防

头条爆料007
2025-11-10 22:03:53
魔幻一幕:机器人证明自己不是人,史上首次

魔幻一幕:机器人证明自己不是人,史上首次

大道微言
2025-11-10 10:08:11
华农27岁博士校园溺亡后续:父亲被安保抬出,姐姐怀孕6月哭晕

华农27岁博士校园溺亡后续:父亲被安保抬出,姐姐怀孕6月哭晕

180视角
2025-11-11 13:30:42
北京今晚有雾明天有风,本周还有雪

北京今晚有雾明天有风,本周还有雪

鲁中晨报
2025-11-11 15:43:04
官方通报“儿子暴打93岁母亲”:因琐事发生口角后动手殴打,涉事男子已被抓获,案情正侦办

官方通报“儿子暴打93岁母亲”:因琐事发生口角后动手殴打,涉事男子已被抓获,案情正侦办

极目新闻
2025-11-11 14:09:23
河北廊坊通报“新人婚车遭拦截被索要50条烟”:系误传,实为索要9条香烟,对胡某某、殷某某等6人给予行政处罚、批评教育处理

河北廊坊通报“新人婚车遭拦截被索要50条烟”:系误传,实为索要9条香烟,对胡某某、殷某某等6人给予行政处罚、批评教育处理

扬子晚报
2025-11-11 10:19:33
2025-11-11 16:36:49
侑虎科技UWA incentive-icons
侑虎科技UWA
游戏/VR性能优化平台
1515文章数 985关注度
往期回顾 全部

游戏要闻

上半年国产销量前10!Steam《动物栏》开启新史低!

头条要闻

欧洲高颜值王室访华:曾与高中老师结婚 二婚嫁入王室

头条要闻

欧洲高颜值王室访华:曾与高中老师结婚 二婚嫁入王室

体育要闻

维金斯0.4秒空接暴扣绝杀 热火险胜骑士

娱乐要闻

何超莲窦骁真的没离婚?

财经要闻

南昌三瑞智能IPO:委外代工模式存疑

科技要闻

苹果新品惨败,产线拆光、二代搁浅!

汽车要闻

盈利"大考",汽车智能化企业的中场战事

态度原创

健康
艺术
游戏
公开课
军事航空

超声探头会加重受伤情况吗?

艺术要闻

田英章日常书信曝光,字迹开阔惊艳人心!

宫本茂透露《宝可梦》推出双版本的秘辛

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

空军发布重磅视频 多款新型战机亮相

无障碍浏览 进入关怀版