Unity技术手册-初探性能优化

举报
芝麻粒儿 发表于 2022/06/30 17:53:59 2022/06/30
【摘要】 👉关于作者众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)欢迎关注公众号【空名先生】获取更多资源和交流! 👉前提这是小空坚持写的Unity新手向系列,欢迎品尝...

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

欢迎关注公众号【空名先生】获取更多资源和交流!

👉前提

这是小空坚持写的Unity新手向系列,欢迎品尝。

小空为了方便更多的人(新手)看明白,使用的汉字,真实项目尽量使用英文规则昂。

新手(√√√)

大佬(√)

粒子这一块是个系列文章,并且介绍的非常详细,建议收藏

👉实践过程

为什么可以跨平台?为什么发布的包大呢?

因为Unity内置了Mono虚拟机,她之所以可以跨平台就是因为你写的Unity程序是在Mono虚拟机上运行的。而虚拟机是跨平台的。便捷的同时也会带来资源的增大,进而有可能带来运行卡的后续忧虑。

举个例子:如果你不穿衣服,你是不是只会在家里活动而不出去?这个时候你称体重轻那么个把斤,但是你突然穿上衣服了,这时候可以去外面任何地方浪了,相应的你在称体重的时候增加了那么点重量。

小芝:什么是Draw call?
她就是CPU对图形绘制接口的调用,CPU通过调用图形库(DirectX、OpenGL)接口,命令GPU进行渲染操作,因此Drawcall次数越大性能消耗越大。
那么又是什么原因造成的消耗呢?
在这个并行的时代,CPU和GPU也是独立而不互相依赖的并行工作,通过缓冲区来维护一个队列,CPU发命令,GPU执行命令。区别在于:
CPU在调用DrawCall前,需要经历一系列的体力劳动来做准备工作。
GPU本身计算能力就是她的强项(人工智能训练大范围用GPU计算更验证了这点)-所以渲染任务完成的很快。
就好比你用打印机打印一样,你需要提前将需要打印的内容准备好(这一点你是耗时的),然后只需要将需要打印的页发送给打印机,打印机会自己处理打印。CPU就像你准备打印内容一样准备DrawCall的内容,然后CPU将准备好需要绘制的“页”传递给GPU
所以就会造成一种奇怪的现象:
GPU:快来,快来,我闲不住了,我还想要,我准备好吸收了,尽情的释放吧。
CPU:不行,不行,累死我了,工作太多,有些虚了。

小芝:怎么优化?
我们既然知道了是CPU有压力,而造成压力的又是在DrawCall的准备工作上,所以优化思路的切入点就是减少DrawCall。
将同材质,同贴图,同shader的网格尽量合并
避免使用大量小的网格,如果必要,考虑合并
避免使用过多的材质,尽量共用
合并也是需要消耗的,尽量不在运行时合并
网格合并顶点是有上限的

小芝:哥啊,道理我都懂啊,但关键是怎么操作啊,来点实际的不好吗。

小芝:难道真的这样就行了?
小空:不然是,降低DrawCall是比较笼统的说法。
小芝:那你半天说了个屁啊。
小空:虽然降低DrawCall是有效果的,但drawcall并非是unity效率的直接衡量指标实际上,drawcall本身的call过程消耗比较低,消耗高的是drawcall对象集合的改变过程和集合中各个对象的处理过程,比如dynamicbatch和staticbatch相同drawcall下性能差别很大。
在Unity的统计框有个【SetPass calls】的,用这个衡量性能更准确一些。

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。