城市与车辆组合而成的几何结构包含大约23万个多边形(69万个顶点),各种材料映射于四周,而照明由单个无阴影平行光投射灯提供。提供的源材料包括构建应用所需的代码、项目文件和艺术资产,包含本教程介绍的源代码优化。
致谢本教程是DavidHoulton编写的Android和OpenGLES3.0版(PDF)。它配有英特尔GPA。
教程结构
本教程将为您展示四个优化步骤。每一步都会采用英特尔GPA分析应用识别特定的性能瓶颈。然后在应用中切换至相应的优化以消除瓶颈,并再次进行分析以测量所实现的性能提升。所采用的优化步骤均遵循。
在本教程中,采用优化后,CityRacer的渲染性能提高了83。
前提条件采用和构建CityRacer示例。采用执行性能分析。英特尔GPA可与大多数Android设备兼容;不过基于x86架构的Android设备可提供最详细的分析指标。CityRacer示例应用CityRacer逻辑划分成赛车模拟和渲染子组件。赛车模拟包含对车辆加速、刹车、转向参数,以及针对轨迹跟踪和防撞的AI建模。赛车模拟代码位于track.cpp和vehicle.cpp文件中,本教程中采用的优化不会对其产生任何影响。
渲染组件包括使用OpenGLES3.0和内部开发的CPUT框架牵引车辆和场景几何图。第一版渲染代码就表现出了一次通过的努力和决心,可提供多种性能限制设计选择。
网格和纹理资产可从Media/defaultScene.scene文件中加载。独立网格即可标记成预先放置的场景物品,或基于每实例转换数据的实例化场景,也可标记成可接受模拟提供的转换数据的车辆。场景中设置了多个摄像头:车辆尾部各设置一个,还设置了另外一个摄像头以支持用户自由开发场景。所有性能分析和代码优化均面向车尾摄像头模式。
为实现本教程的目的,CityRacer设计成从暂停模式开始,这样有利于大家了解各分析步骤以及相似的数据集。取消选中CityRacerHUD的Pause复选框,或在CityRacer.cpp顶部设置g_Paused=false,可解除CityRacer的暂停状态。
优化潜力将CityRacer应用视作可以工作但未经优化的原型。在初始状态下,它可提供所需的视觉效果,但不提供渲染性能。它包含许多技巧和设计选择,是典型游戏类开发(限制渲染性能)中比较具有代表性的。开发过程中的优化阶段旨在逐步识别性能瓶颈、通过修改代码消除瓶颈,并测量所获得的性能提升。
请注意,本教程仅介绍一小部分适用于CityRacer的优化方法。具体来说,它仅考虑源代码会完全采用的优化,不对模式或纹理资产做出任何更改。我们此处不介绍其他会更改资产的优化方法,因为通过教程实施这些方法会非常繁琐。但它们可通过英特尔GPA工具来识别,而且在真实游戏优化中应该考虑使用。
本文所展示的性能数据均通过运行Android、基于英特尔®凌动™处理器的系统(代号“BayTrail”)获得。具体数据可能因系统的不同而有所差异,但相对性能关系应该类似,因此从逻辑上来说,性能优化应该相同。
整个教程采用的优化方法均可在CityRacer.cpp中找到。通过CityRacer的HUD或在CityRacer.cpp中直接修改可对这些方法进行切换。
CityRacer.cpp
1boolg_Paused=真;
2boolg_EnableFrustumCulling=假;
3boolg_EnableBarrierInstancing=假;
4boolg_EnableFastClear=假;
5boolg_DisableColorBufferClear=假;
6boolg_EnableSorting=假;
随着优化的逐步开展,它们将一个一个启用。一个变量控制一个或多个代码段的替换,以实现教程中相应步骤的优化目标。
优化教程第一步是在Android设备上构建和部署CityRacer。如果正确设置了Android环境,位于CityRacer/Game/Code/Android的buildandroid.bat文件将为您执行这些步骤。
接下来启动英特尔GPAMonitor,右击系统托盘图标,然后选择SystemAnalyzer。
SystemAnalyzer将显示待连接的平台列表。选择您的Androidx86设备并按下“Connect”。
SystemAnalyzer连接Android设备后,将显示供分析的应用列表。选择CityRacer并等待启动。
在CityRacer运行的过程中,按下帧采集按钮以采集GPU帧的截图以供分析。
检查帧打开面向OpenGL*的帧分析器,并选择刚才采集的CityRacer帧,以详细地检查GPU性能。
顶部的时间线将按照均匀分布的工作‘erg’展开,一个erg通常对应一次OpenGL绘制调用。如欲了解更多有关传统时间线显示的信息,请在X轴和Y轴上选择GPUDuration。这样可以快速显示哪些erg的GPU耗时最长,以及我们首先应该关注的地方。如果没有选择erg,右侧面板将显示整个帧的GPU耗时,为55毫秒。
《教程:使用英特尔庐INDEGPA改进您的Android*游戏性能》相关参考资料:
android 教程、androidstudio教程、android 程序教程、android studio教程、英特尔 高性能计算、android、三星android平板、android auto、google android