同上篇 这篇是针对mesh的

资源加载性能测试代码

与上篇所提出的测试代码一样,我们对于其他资源的加载性能分析同样使用该测试代码。我们将每种资源均制作成一定大小的AssetBundle文件,并逐一通过以下代码在不同设备上进行加载,以期得到不同硬件设备上的资源加载性能比较。

测试环境
引擎版本:Unity 5.2版本
测试设备:三台不同档次的移动设备(Android:红米2、红米Note2和三星S6)


网格资源

网格资源与纹理资源一样,在加载时同样会造成较高的CPU占用,且其加载效率由其自身大小(网格数据量)决定。因此,我们通过选择不同数据量的网格资源来详细分析其加载效率。

测试1:不同面片数的网格资源加载效率测试
我们选取了四种不同面片数的网格资源,含有的面片数分别为1K、5K、10K和50K,且不含有Tangent顶点属性。四组网格资源的内存占用分别为195KB、0.8MB、1.4MB和3.9MB,其对应AssetBundle大小为43KB、108KB、178KB和507KB。

测试网格:

我们在三种不同档次的机型上加载这些网格资源,为降低偶然性,每台设备上重复进行十次加载操作并将取其平均值作为最终性能开销。具体测试结果如下表所示:

通过上述测试,我们可以得到以下结论:

1、资源的数据量对加载性能影响较大,面片数越多,其加载越为耗时。设备性能越差,其耗时差别越为明显;

2、随着硬件设备性能的提升,其加载效率差异越来越不明显。

测试2:相同面片数、不同顶点属性的加载效率测试
我们选择测试1中的网格资源做为该测试的样本数据,并在打包时加入Tangent顶点属性。则四组网格资源的内存占用分别为287KB、1.2MB、2.1MB和5.8MB,其对应AssetBundle大小为72KB、228KB、376KB和937KB。与测试1相同,我们在三种不同档次的机型上重复进行十次加载操作并将取其平均值作为最终性能开销。具体测试结果如下图所示:


通过上述测试,我们可以得到以下结论:

1、顶点属性的增加对内存和AssetBundle包体大小影响较大。与测试1中未引入Tangent顶点属性的网格数据相比,测试2中的网格数据在内存上均大幅度增加(增加量与网格顶点数有关),且AssetBundle大小同样有成倍(1~2)的增加。

2、顶点属性增加对于加载效率影响较大,且顶点数越多,影响越大。

注意事项:
模型常见的顶点属性主要有Position、UV、Normal、Tangent和Color。Color属性与Tangent属性一样,如果网格顶点拥有该属性,同样会对内存、物理体积和加载性能造成影响。

在使用Draw Call Batching时,切忌将不同属性的网格模型拼合在一起。举个例子 ,100个网格模型进行Static Batching,如果99个模型只有Position和UV两种属性,而剩下1个模型函数有Position、UV、Normal、Tangent和Color五种属性。那么引擎在进行拼合时,会将前99个模型的顶点属性补齐,然后再进行拼合。这样无形中会增加大量的内存占用,从而造成不必要的内存浪费。

测试3:开启/关闭Read/Write功能的加载效率测试
我们使用测试1中的网格资源数据,并关闭其Read/Write功能,从而来查看其Read/Write功能对加载效率的影响。关闭Read/Write功能后,四组网格资源的内存占用分别为104KB、454KB、0.8MB和2.3MB,其对应AssetBundle大小为38KB、94KB、152KB和428KB。与测试1相同,我们在三种不同档次的机型上重复进行十次加载操作并将取其平均值作为最终性能开销。具体测试结果如下图所示:

通过上述测试,我们可以得到以下结论:

1、关闭Read/Write功能会降低AssetBundle的物理大小,其降低量与资源本身数据量相关。同时,关闭Read/Write功能会大幅度降低网格资源的内存占用;

2、关闭Read/Write功能会略微提升该资源的加载效率。



通过以上测试和分析,我们对于网格资源的管理建议如下:

1、在保证视觉效果的前提下,尽可能采用“够用就好”的原则,即降低网格资源的顶点数量和面片数量;

2、研发团队对于顶点属性的使用需谨慎处理。通过以上分析可以看出,顶点属性越多,则内存占用越高,加载时间越长;

3、如果在项目运行过程中对网格资源数据不进行读写操作(比如Morphing动画等),那么建议将Read/Write功能关闭,既可以提升加载效率,又可以大幅度降低内存占用。

时间: 2024-08-24 12:00:16

同上篇 这篇是针对mesh的的相关文章

转:zTree树控件实战篇:针对多个下拉加载zTree树应该如何做出合理的配置

今天有一个zTree的朋友遇到一个非常棘手的问题,才研究zTree树控件两天就被上头催着看成果,很是苦恼.他面对的问题就是页面内多个地方需要下拉在其文本框下方加载zTree树,由于对zTree下拉加载树的一些关键配置以及原理的不太深入导致问题无从查起.今天就来一起聊聊这样一个下拉加载zTree的问题. 一.几个关键的配置需要注意 1.针对不同的下拉选择需要有自己独立控制zTree显示位置以及隐藏相应标签的方法: 2.需要根据所点击事件定位zTree的显示位置: 3.zTree树选择后需要加以判断

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

C++:位操作基础篇之位操作全面总结

位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识.提高篇则针对各大IT公司如微软.腾讯.百度.360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目. 下面就先来对位操作作个全面总结,欢迎大家补充. 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快. 在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中

基础知识回顾第三篇数据库访问

前言:本篇主要针对数据库的操作,在这里不适用hibernate或者mybatis,用最原始的JDBC进行讲解,通过了解这些原理以后更容易理解和学习hibernate或mybatis. 1:jdbc的简单操作 首先需要下载jdbc驱动的jar包 如果不想下载在C:\Program Files (x86)\MySQL\Connector J 5.1.26位置也可以找到 如果是maven项目的话需要在pom上引入下面的依赖包 1 <dependency> 2 <groupId>mysql

Juniper老司机经验谈(SRX防火墙NAT与策略篇)视频课程上线了

继前面的<Juniper老司机经验谈(SRX防火墙优化篇)>之后,Juniper老司机经验谈(SRX防火墙NAT与策略篇)第二部视频课程也录制上线了 1.两个课程完全独立又相结合, SRX防火墙优化篇是针对防火墙双机.配置优化内容. SRX防火墙NAT与策略篇则是针对防火NAT.策略内容 . 两部除了前几4单节基础理论与模拟环境搭建部分一样外,其他内容完全不重叠. 2.本课程内容: 大家在QQ群.论坛里经常提的问题,许多人对SRX使用中NAT\策略问题不是很理解,实际工作中碰见太多问题,惹出了

敏捷开发 之 理论概述篇

一. 敏捷实践 1. 敏捷宣言 个体与交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作   胜过 合同谈判 响应变化   胜过 遵循计划 1.1 个体与交互胜过过程和工具 合作.沟通以及交互能力要比单纯的编程能力更为重要. 工具要选用合适的,不要一开始就盲目选择所谓强大的.要从小工具开始尝试,直到无法适用再去更换. 1.2 可以工作的软件胜过面面俱到的文档 面面俱到的文档需要花费大量的时间成本来编写和维护.过时的文档比没有文档更具危害性. Martin文档第一定律:直到迫切

针对监控摄像机(海康、大华等)进行手动录像的录像文件播放器功能设计

参考上一篇: 针对监控摄像机(海康.大华等)进行手动录像的功能设计 录像后需要自定义一个播放器来播放录像文件. 简单设计界面如下: 打开文件,可暂停,可停止,可以拖动进度条. static int width = 1920, height = 1080; int videoWidth = 639, videoHeight = 479; int YUVWidth = 640, YUVHeight = 480; bool bPause = false; bool bPlayStop = false;

位操作基础篇之位操作全面总结

文章参考地址:http://blog.csdn.net/morewindows/article/details/7354571# 位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识.提高篇则针对各大IT公司如微软.腾讯.百度.360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目. 下面就先来对位操作作个全面总结,欢迎大家补充. 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快

「翻译」一篇redis文章引发的翻译——JVM能支持多少线程?

昨天看了一篇关于redis 的文章https://www.cnblogs.com/fanwencong/p/5782860.html 作者说他模拟了100万线程的并发,我对这个有一些怀疑,看了评论也有很多质疑的声音.当然我这篇不是要批评作者对线程的模拟,事实上作者写的对redis的使用是很不错的,我们本篇主要针对个人电脑上的JVM最多能支持多少个线程.以下是StackOverflow上的一个提问,我简单的翻译了一下. StackOverflow原回答请点我 Eddie 的回答 This depe