移动端GPU性能深度优化分析
对于开发一款游戏,大多数的开发人员仅仅停留在会使用Unity提供的组件来做游戏开发,至于这些组件的底层是什么?渲染队列、深度写入以及Overdraw这些涉及到GPU的名词到底是什么?如何根据GPU性能指标来调优?这些基本上对于大多数开发人员都是陌生的。
对于有机会去手写Shader的开发人员,是否对Shader有足够的了解,在兼顾GPU性能的同时又可以实现完美的效果?
该课程从移动端GPU的架构入手,深入各种GPU性能指标来逐个分析哪些特性会拖垮GPU性能,小到数据类型,大到GPU硬件缓冲去全方位分析GPU性能的提升。
1. 移动端GPU架构简介
2. GPU性能指标
3. Shader代码优化
4. 以“水”特效实例从硬件层到软件层进行性能一步一步调优
作者于洋,Unity技术专家、引擎组组长。曾就职于人人网、Kabam、竞技世界。从事游戏开发十余年,经历了从Flash到Unity的游戏开发过程,长期从事游戏渲染和性能优化相关工作,对PBR、云、雾、地形、URP管线等有深入研究,曾参与过《Legacy of Zeus》、《荒岛求生》、《mythwar puzzle》等游戏的渲染和性能优化工作,乐于分享渲染和优化的相关技术。
目录
1|简介
2|移动端GPU架构简介
3|测试条件和小程序
4|采集GPU性能指标
5|结论分析
6|Shader代码优化
7|“水”特效优化
本篇转载自《移动端GPU性能深度优化分析》的第1节。
1|简介
现在市面上的手机游戏,不管是哪一种类型的,在场景设计上,不论是大世界、小城镇、森林、哪怕是沙漠中,或多或少都会出现“海”、“湖”等自然景观组成因素,以下我们统称为“水”特效,如下图,出自手游《原神》。
有的手游中甚至为了还原逼真效果,对“水”特效加上了一些计算较为复杂,严重拖慢GPU性能的效果,比如“折射”、“反射”、甚至海底“焦散”,这些效果如果真的按照场景中动态实时渲染的话,对于移动设备来说,压力会相当大。如果遇上了低端机,比如红米7A、早期的摩托罗拉、LG等几款机型,想要实时跑起来这些效果,更是难上加难。
本文将从移动端GPU架构、渲染队列、ZWrite、OverDraw等硬件方面和Shader代码复杂度方面,结合GPU性能分析工具对GPU性能从浅入深进行分析,最后拿“水”特效这个实例讲述如何在低端机设备上通过优化GPU,提高帧率。
对于GPU的优化,一般从带宽、OverDraw、Shader复杂度等方面来考虑,本文将涉及到OverDraw和shader复杂度方面,带宽优化后续文章会涉及到。
OverDraw是当同一个像素被进行多次绘制导致的一种现象。这种现象会产生比较严重的填充率问题。要理解OverDraw, 我们必须要知道Unity场景中渲染对象的渲染顺序。在不同渲染队列中的对象也是按照不同的顺序进行排列。比如,Unity在几何体队列(Geometry Queue)中,是按照从前到后(front-to-back)的顺序来对几何体进行绘制,这样可以最小化OverDraw,但是在透明队列(Transparent Queue)中,是按照从后到前(back-to-front)的顺序来实现屏幕上物体的透明效果。
OverDraw的优化是一个比较复杂的话题,没有一个万能的解决方案,但是我们可以通过减少那些无法自动排列的渲染对象的重叠(Overlapping)。从Unity的Scene视图着手研究,在我们编辑器下的Draw Mode里可以让我们看到当前场景中的OverDraw情况。
以上就是《移动端GPU性能深度优化分析》的第1节,此篇文章比较适合从事游戏开发的Unity客户端开发人员、希望提升GPU性能优化能力的人以及对性能优化以及Shader感兴趣的同学。
读完全篇后你会深入了解移动端GPU架构,对各种GPU性能指标的调优技能提升,并优化书写Shader的能力。
作者的另一篇文章《深入UGUI Mask组件原理和性能深度优化》也同时上线,组合购买仅需19.9元。
相关文章
- TCP性能调优
- 【MySQL】性能优化之 order by (一)
- 记一次基于Unity的Profiler性能分析
- 每天将MYSQL SLOW QUERY REPORT分发到各个邮箱供分析改善数据库性能-PYTHON
- LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD
- 【原创】一文掌握 Linux 性能分析之 I/O 篇
- SAP CRM Fiori 应用 my Opportunities 的后台性能分析
- 另一种使用SAP SAT事务码对通过浏览器启动的应用的性能测量和分析方式
- 运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南
- SAP CRM中间件一些性能问题的分析和处理办法
- 性能优化挑战重重,鲲鹏 HPC 如何突破算力桎梏?
- sar命令,linux中最为全面的性能分析工具之一
- 【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 )
- 一次完整的性能测试,测试人员需要做什么?(上)
- Jmeter性能测试系列——性能测试工作实施一(需求分析与定义)
- 掌握这几个JVM性能分析利器,故障排查不在话下
- 【ORACLE性能分析和优化思路学习笔记01:为什么会出现数据库的性能问题】