Unity DrawCall优化「建议收藏」

Unity DrawCall优化「建议收藏」UnityDrawCall优化一MeshRenderer二SkinnedMeshRenderer三合并要求对比四总结五场景制作建议DrawCall优化合并,也叫批处理,即DrawCallBatching.通过减少Drawcall数提高性能。一MeshRenderer分为DynamicBatching和StaticBatching…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Unity DrawCall优化 

一 Mesh Renderer 
二 Skinned Mesh Renderer 
三 合并要求对比 
四 总结 
五 场景制作建议 

DrawCall优化合并,也叫批处理,即DrawCall Batching. 通过减少Draw call数提高性能。 

一 Mesh Renderer 
分为Dynamic Batching和 Static Batching 
Dynamic Batching 
不需要任何操作,只要共享材质(即使是不同的Mesh模型也可以),就会自动被合并。可以自由移动旋转。但有以下使用要求: 
(1)单个Mesh的vertex attribute总数不超过900. 
即 vertex* attributeCount < 900 
例如一个Mesh有pos,uv,normal,那么attributeCount为3, 
也就是顶点数量不超过300个。 
(2)游戏对象使用相同模型和材质时,只有相同缩放(即xyz等比缩放,浮点尾数可以有细微差)的会被合并。 
如 
(1,1,1)与(1,1,1) 
(2,2,2)与(2,2,2) 
(0.5,0.5,0.5)与 (0.5,0.5,0.5) 
(2,2,2)与(2,2,2.0001) 
(3)场景烘焙:烘焙后同材质将不会被烘焙。lightmap 有隐藏的材质参数:offset/scale, 所以使用lightmap的物体不会被合并 
(4)Shader不能使用多Pass:多Pass的Shader会破坏Dynamic Batching 

Static Batching 

原理: 
运行游戏后将一组游戏对象的多个模型会被动态合并为1个。这组游戏对象所有使用同一材质的在一个DrawCall来完成。这些游戏对象运行后无法移动缩放旋转。但是Drawcall一定是最大化合并的,并且不受动态合并的诸多限制(见下文详述)。 
注意:即使物体都使用了同样的模型,在batch后每一个物体都会创建一份模型对应的geometry,在新的Combined Mesh里。所以过多的batch会增加内存占用。例如场景里的树群就不适合Static Batch,而适合动态合并。 
实现方法: 
(1)MeshRenderer勾选Batching Static: 勾了即可 
(2)代码中使用UnityEngine.StaticBatchingUtility实现(可以在任何平台调用): 
      1)将所有要合并的静态物体(不须勾Batching Static)放入统一一个root 
      2)StaticBatchingUtility.Combine(root); 
      之后就合并好了! 
区别: 
勾选Batching Static: 
完全自动合并,在MeshFilter里显示的是 Combined Mesh(root:scene)。合并后不能移动 
StaticBatchingUtility: 
合并到一个游戏对象下。合并后可以移动父节点游戏对象 

二 Skinned Mesh Renderer 
Unity对Skinned Mesh Renderer没有任何batching, 但插件Mesh Baker可以对Skinned Mesh进行合并。 
注意: 
(1)修改Renderer.material将会创建一份新的material,应使用Renderer.sharedMaterial来保持材质公用。 
(2)可以使用Mesh.Optimize() 优化模型。导入模型不需要调用此接口,在导入模型至Unity3d时已自动处理。 
代码创建的模型有可能需要调用此接口来优化。 

三 合并要求对比 
要求   动态 静态 
1 只能是MeshRenderer不能是SkinnedMeshRenderer 要求 要求 
2 Shader必须是单Pass 要求 不要求 
3 不能被场景烘焙(不能标注为Light map static) 要求 不要求 
4 网格模型文件总点数要求 要求 不要求 
5 网格模型单个文件点数要求 要求 不要求 
6 限制缩放 要求 不要求 
7 限制位移旋转 不要求 要求 

另外Unity中任何Mesh的面 有65536的面数限制 

四 总结 
三种方式: 
1 动态合并 
    优点: 
        内存消耗小 
        可以自由位移旋转 
    缺点: 
        要求众多() 
2 标记Light map static合并 
    优点: 
        最方便快捷,要求最少 
    缺点: 
        完全不能移动 
        内存有消耗 
        只能处理在Scene中默认放置的物体 
3 代码StaticBatchingUtility合并 
    优点: 
        方便快捷,要求少 
        可整体移动 
        可处理代码动态加载的场景或物体 
    缺点: 
        内存有消耗 

代码合并是要求最少的,并可以整体移动。而动态合并可以移动旋转,并做Animation动画。故推荐StaticBatchingUtility + 动态合并。 

五 场景制作建议 
美术人员在制作某场景时,尽量: 
静态物体:使用静态合并 
条件 
   1 用Mesh Renderer,也就是不绑定骨骼 
   2 不是Wrap循环UV的贴图,尽量合并到一张大图集 
方法 
   标注Batching Static即可 

动态物体:使用动态合并,动画可以用Unity的动画去做 
条件 
   1 无骨骼 
   2 不参与场景烘焙 
   3 相同物体相同缩放 
   4 单个Mesh的vertex attribute总数不超过900. 
   5 Shader单Pass 
方法 
   满足条件Unity自动优化 
(不满足动态合并要求的。场景动画可以用骨骼动画去做。但应尽量避免或者少的使用这种方式。因为没有Drawcall优化效率较低) 

PS: 
要关闭动态合并在subshader里加以下代码即可 
Tags { “DisableBatching” = “true” } 

如果是非Mobile端可以考虑使用GPU Instancing 
如果是有超级多的人,可考虑使用顶点动画提高性能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191775.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Navicat 4 激活码_通用破解码

    Navicat 4 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    69
  • SDIO接口概念介绍「建议收藏」

    SDIO接口概念介绍「建议收藏」SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。  SDIO协议是由SD卡的协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。由于这个,SDIO和SD卡规范间的一

    2022年10月3日
    0
  • 国内能用的国际邮箱推荐哪个?公司邮箱号码大全「建议收藏」

    国内能用的国际邮箱推荐哪个?公司邮箱号码大全「建议收藏」在网上看到大家一直在讨论国际邮箱哪个好用,TOM、163、gmail等,在国内用哪个邮箱呢?外贸公司需要跟客户沟通合同信息、物流货代公司需实时沟通货柜清关进展、电商公司采购出口需跟国外办事处或客户沟通、软件信息公司老板是老外,也必须用国际邮箱,这些使用邮箱的人90%都会在国内用邮箱,所以在国内能的国际邮箱是刚需。国内能用的国际邮箱推荐常用个人邮箱,但进了公司用企业邮箱才发现真的不一样。TOM企业邮箱是我在大学里看到老师用过的,现在公司分配了一个给我,之前的个人邮箱Facebook验证码都收不到,公司的这

    2022年9月24日
    0
  • app制作好后怎么上线_app如何上线到应用市场

    app制作好后怎么上线_app如何上线到应用市场自己开发一款APP上线前的步骤问题额,是这样的,一款App想要上线的话,是不需要跟国家部分打交道的。你需要的是和其他公司去打交道。比如说苹果的App,你想在APPstr上线的话,首先你要有一个开发者账号。这个账号是直接跟美国苹果公司申请的,费用是99美元一年。申请的时间大约是一个月左右。账号下来了之后,就可以上传安装包,苹果公司会审核这款App,值得一提的是,苹果公司的审核机制很严格,审核的时间…

    2022年10月30日
    0
  • maven版本查看_maven最新版本

    maven版本查看_maven最新版本工作中,我们经常要操作maven以及配置maven,有时还需要向maven中手动添加jar包;那么如何查看maven的版本呢?第一种方法:就是从你安装maven插件的目录文件夹中可以看出;第二种方法:直接使用黑窗口命令查看:但是前提是mavenhome环境变量必须配置好否则无法查看;输入命令 mvn-version 那,如何配置maven的环境变量呢?计算机–右键…

    2022年8月22日
    3
  • 【深度讲解】手把手教你python制作萝莉音智能对话语音机器人,附全部源码!速速学起来!!

    文章目录演示先看看前言一定要看第一步实现普通智能对话第二步文字转萝莉音第三步播放音频第四步综合上述代码完整代码下载地址演示先看看前言一定要看为了让大家真正学会,我用分模块步骤的方式讲解,这样也能让大家不仅在娱乐的同时,还能学到知识。东西有点多,你大可不必着急复制粘贴,你只需要看看我的讲解即可,最下面可以直接下载完整的源码文件。第一步实现普通智能对话代码如下:#coding=gbk”””作者:川川时间:2021/8/21″””importrequestsprint(‘请输入你想说的

    2022年4月17日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号