对于开发一款游戏,大多数的开发人员仅仅停留在会应用 Unity 提供的组件来做游戏开发,至于这些组件的底层是什么?渲染队列、深度写入以及 Overdraw 这些波及到 GPU 的名词到底是什么?如何依据 GPU 性能指标来调优?这些基本上对于大多数开发人员都是生疏的。
对于有机会去手写 Shader 的开发人员,是否对 Shader 有足够的理解,在兼顾 GPU 性能的同时又能够实现完满的成果?
该课程从挪动端 GPU 的架构动手,深刻各种 GPU 性能指标来一一剖析哪些个性会拖垮 GPU 性能,小到数据类型,大到 GPU 硬件缓冲去全方位剖析 GPU 性能的晋升。
- 挪动端 GPU 架构简介
- GPU 性能指标
- Shader 代码优化
- 以“水”特效实例从硬件层到软件层进行性能一步一步调优
作者于洋,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 元。