unity性能优化-GPU
demi 在 周五, 01/10/2020 - 17:15 提交
GPU:负责整个渲染流水线。它会从处理CPU传递过来的模型数据开始,进行Vertex Shader、Fragment Shader等一系列工作,最后输出屏幕上的每个像素。因此它的性能瓶颈包括顶点、像素、显存等因素有关。
GPU:负责整个渲染流水线。它会从处理CPU传递过来的模型数据开始,进行Vertex Shader、Fragment Shader等一系列工作,最后输出屏幕上的每个像素。因此它的性能瓶颈包括顶点、像素、显存等因素有关。
我们经常用渲染管道(rendering pipeline)来描述渲染(rendering),而且有一点必须铭记在心:高效的渲染就是保证信息快速流通。
对于不在摄像机拍摄范围内的对象,对这一对象的绘制是完全没有必要的,所以可以用到遮挡剔除技术:将静态物体勾选static;选择Windows->Occlusion Culling打开遮挡剔除窗口,单机Bake;修改bake界面的参数大小,可以修改Bake的单元的大小......
务必删除脚本中为空或不需要的默认方法; 只在一个脚本中使用OnGUI方法;避免在OnGUI中对变量、方法进行更新、赋值,输出变量建议在Update内; 同一脚本中频繁使用的变量建议声明其为全局变量,脚本之间频繁调用的变量或方法建议声明为全局静态变量或方法;不要去频繁获取组件,将其声明为全局变量......
本文档描述了为PowerVR Rogue架构优化GLSL代码的方法。这些优化是低级的,因此可用于从硬件中获得最后10%的性能提升。在使用这些技术之前,有必要确保使用了最优的算法,并充分利用GPU。
由于图形引擎的复杂性,瓶颈可能发生在CPU、GPU、,也可能发生在CPU与GPU的传输数据与交互之中。这里我们只假设瓶颈在GPU上,讨论GPU的优化方法。
人工智能的目标就是最优化:在复杂环境与多体交互中做出最优决策。几乎所有的人工智能问题最后都会归结为一个优化问题的求解,因而最优化理论是人工智能必备的基础知识。
最优化理论(optimization)研究的问题是判定给定目标函数的最大值(最小值)是否存在,并找到令目标函数取到最大值(最小值)的数值。
要实现最小化或最大化的函数被称为目标函数(objective function)或评价函数,大多数最优化问题都可以通过使目标函数 f ( x ) 最小化解决,最大化问题则可以通过最小化 − f( x ) 实现。
实际的最优化算法既可能找到目标函数的全局最小值(global minimum),也可能找到局部极小值(local minimum),两者的区别在于全局最小值比定义域内所有其他点的函数值都小;而局部极小值只是比所有邻近点的函数值都小。
理想情况下,最优化算法的目标是找到全局最小值。但找到全局最优解意味着在全局范围内执行搜索。
目前实用的最优化算法都是找局部极小值。
介绍:
在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。
Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。
本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。
Unity内存管理机制简介
要想了解垃圾回收如何工作以及何时被触发,我们首先需要了解unity的内存管理机制。Unity主要采用自动内存管理的机制,开发时在代码中不需要详细地告诉unity如何进行内存管理,unity内部自身会进行内存管理。这和使用C++开发需要随时管理内存相比,有一定的优势,当然带来的劣势就是需要随时关注内存的增长,不要让游戏在手机上跑“飞”了。
unity的自动内存管理可以理解为以下几个部分:
如何对现有的程序进行并行优化,是 GPU 并行编程技术最为关注的实际问题。本文将提供几种优化的思路,为程序并行优化指明道路方向。
优化前准备
首先,要明确优化的目标 - 是要将程序提速 2 倍?还是 10 倍?100倍?也许你会不假思索的说当然是提升越高越好。
但这里存在一个优化成本的问题。在同样的技术水平硬件水平下,提升 2 倍也许只要一个下午的工作量,但提高 10 倍可能要考虑到更多的东西,也许是一周的工作量。提高 100 倍, 1000 倍需要的成本,时间就更多了。
然后,需要将这个问题进行分解。通常来说先对数据集进行分解,然后将任务进行分解。这里要从数据集这样的矩阵角度来分析数据,将输入集和输出集中各个格点的对应关系找出来,然后分派给各个块,各个线程。
策略一:识别代码中的瓶颈所在