赞
踩
目录
1.CPU瓶颈测试:在不采用批处理和阴影技术的情况下,创建成千个简单的立方体对象。
2.只创建一个需要最少量DrawCall的简单对象,但使用昂贵的着色器对纹理进行数千次采样。
为了执行准确的GPU受限的性能分析测试,应在V Sync Count中禁用 Vertical Sync,否在测试数据将受到干扰。
Gfx.WaitForPresent通常用来表示CPU正在等待垂直同步完成,因此在本测试中需要禁用。
CPU的大部分时间都花在Gfx.WaitForPresent任务上,这是CPU等待GPU完成当前帧浪费的时间。
暴力测试方法,即在场景中去除指定的活动,并检查性能是否有大幅提升。如果一个小的调整导致速度大幅提升,就说明找到了瓶颈所在的重要线索。
对于CPU受限,最明显的暴力测试是降低DrawCall来检查性能是否有突然的提升。
对于GPU,有两种好的暴力测试方法,分别是降低屏幕分辨率和降低纹理分辨率,以确定是填充率受限还是内存带宽受限。
与片元着色器相比,顶点着色器的影响微乎其微。
确定应用程序时CPU受限还是GPU受限,如果是GPU受限,还应确定是前端受限或后端受限,是填充率瓶颈还是内存带宽瓶颈。
Skinning是基于动画骨骼的当前位置变换网格顶点的过程。启用该功能后,会将Skinning活动推送到GPU中。
我们的目标是降低实际的顶点数量。
有3种方法:
1.让美术团队手动调整,生成多边形数更少的网格,或使用网格抽取工具来简化网格。
2.简单地从场景中移除网格,但这应该是最后的手段。
3.实习网格的自动剔除特性,如详细级别(LOD)
如果前端遇到瓶颈,却在使用曲面细分技术,就应仔细检查曲面细分是否消耗了前端的大量资源。
GPU实例化利用对象具有相同渲染状态的特点,快速渲染同一网格的多个副本。
可以将动态批处理看成一种简单的GPU实例化,因为真正的GPU实例化可以节省更多的资源,并支持通过参数调整实现更多的定制化。
选中Enable Instancing复选框,可以在材质级别上应用GPU实例化,修改着色器代码,就可以引入变化。这样,就可以为不同的实例提供不同的旋转、比例、颜色等特性。
这个系统比动态批处理更加通用,因为可以更多地控制对象的批处理过程。(?)
GPUInstancing.html
LOD指的是根据对象和相机的距离和/或对象在相机视图中占用的空间,动态地替换对象。LOD最常见的实现是基于网格的LOD。
LOD组的目的是从这些对象中生成边界框,并根据相机视野内的边界框大小决定应该渲染哪个对象。
LevelOfDetail.html
缺点:消耗磁盘占用空间、RAM和CPU;替代网格需要捆绑在一起加载到RAM中,并且LODGroup组件必须定期测试相机是否移动到新位置,以修改LOD级别。
优点显著:动态渲染较简单的网格,减少了需要传递的顶点数据量,并潜在减少了渲染对象时需要的DrawCall数量、填充率和内存带宽。
剔除组
剔除组(Culling Groups)是UnityAPI的一部分,允许创建自定义的LOD系统,作为动态替换某些游戏或渲染行为的方法。
在其最基本的层次上,剔除组系统仅仅指出,物体对相机是否可见,它们有多大。
CullingGroupAPI.html
减少填充率消耗和过度绘制的最佳方法之一是使用Unity的遮挡剔除系统。该系统的工作原理是将世界分割成一系列的小单元,并在场景中运行一个虚拟摄像机,根据对象的大小和位置,记录哪些单元对其他单元是不可见的(被遮挡)。
遮挡剔除将自动忽略视锥体剔除的对象。
因为必须为遮挡剔除启用Static标志,所以此功能不适用于动态对象。
如果为场景进行了正确的配置,遮挡剔除可以剔除不可见的对象,减少过度绘制和DrawCall数,来节省填充率。
请注意,即使对象被遮挡剔除,也必须计算其阴影,所以不会节省这些任务的DrawCall数和填充率。
降低粒子系统密度和复杂度非常简单:使用更少的粒子系统,生成更少的粒子,使用更少的特殊效果。
1.使用粒子删除系统
2.避免粒子系统的递归调用
Start(),Stop(),Pause(),Clear(),Simulate(),IsAlive(),默认的withChildren参数是true,显示传入false参数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。