当前位置:网站首页>Unity技术手册-初探性能优化
Unity技术手册-初探性能优化
2022-06-30 18:00:00 【华为云】
关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
专注于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)
这位道友请留步️,我观你气度不凡,谈吐间隐隐有王者霸气,日后定有一番大作为!!!旁边有点赞收藏今日传你,点了吧,未来你成功️,我分文不取,若不成功️,也好回来找我。
边栏推荐
猜你喜欢
Redis beginner to master 01
MySQL transaction concurrency and mvcc mechanism
Four tips tell you how to use SMS to promote business sales?
详解单例模式
openGauss数据库源码解析系列文章—— 密态等值查询技术详解(上)
Redis入门到精通01
Personally test the size of flutter after packaging APK, quite satisfied
Construction and practice of full stack code test coverage and use case discovery system
DTD modeling
Cloud Native Landing Practice Using rainbond for extension dimension information
随机推荐
传统微服务框架如何无缝过渡到服务网格 ASM
全栈代码测试覆盖率及用例发现系统的建设和实践
Memory Limit Exceeded
Huaxing Securities: kitex practice under the original hybrid Cloud Architecture
亲测flutter打包apk后大小,比较满意
20200525-生物技术-四川师范大学自考生物技术(本科)考试计划.txt
「经验」爬虫在工作中的实战应用『理论篇』
企业选型作业上常犯的一个错误
MySQL事务并发问题和MVCC机制
MySQL transaction concurrency and mvcc mechanism
torch. roll
Reading notes of "high EQ means being able to talk"
mysql函数获取全路径
How does rust implement dependency injection?
Neon optimization 2: arm optimization high frequency Instruction Summary
年复一年,为什么打破数据孤岛还是企业发展的首要任务
Memory Limit Exceeded
Go Redis连接池
Delete duplicate elements in the sorting linked list ii[unified operation of linked list nodes --dummyhead]
slice