乐趣区

关于gpu:移动端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 元。

退出移动版