近期热门
粉丝27
关注 0
获赞 79
首页 CGJOY论坛 特效作品交流 特效教程
Unity3D手游美术优化心得(特效专题)

[特效教程] Unity3D手游美术优化心得(特效专题)

[复制链接]
7454 13 17 94 4年前 举报
Unity3D手游美术优化心得(特效专题)
前言:相似的文章有很多,这里交流一下我对这方面的理解和经验,也是为了履行承诺和回应期待。
本文主要介绍Draw Calls与Overdraw方向优化,开始之前简单说下其他游戏卡顿原因。
游戏中第一次释放技能发生卡顿:检查贴图是否过大并且没有压缩,特效用模型是否过大,二者均会造成加载慢或卡顿(无论是否预加载或是否是动态加载);游戏中每次释放特效都会卡顿机器还会发烫:(更全面的优化详情看我上一篇文章,本章针对特效进行展开)这时候开始针对Draw Calls与Overdraw开始优化。
Draw Calls
特效DrawCalls峰值最好不要太高,平时保持15以内如今的手机绝对不会有问题,这里根据效果重要程度判断(特写或大招效果特别的出众,DrawCalls达到20-30为了效果那是情有可原的)
减少DrawCalls的方式,Unity会将相同Layer或相同RenderQueue的同贴图进行合批。(UI合并成图集和MOBA游戏使用动态UI图集的原因)
1.png
具体方式如下:
现在8个prefab和一台摄像机一共9DrawCalls(4张贴图4个shader相同的材质球)RenderQueue均为3000
2.png 3.png 5f0ad1c22796f.png
现在分别改成不同的RenderQueue,3001/3002/3003/3004。
4.png 5f0ad1e5864fc.png
变成5 DrawCalls,每个1 23 4只会产生1 DrawCalls(这里不同贴图材质的粒子系统改成不同的Order in Layer也会合批)
5.png 5f0ad1fc9b498.png
说到这里优秀的你一定想到了一个更好的优化方式,创建一个1234的序列图,用粒子系统或shader去使用需要的部分,这时已经降到2了。
6.png 5f0ad1fc5d2b1.png
活用这种方式可以尽情制作自己想要的效果了,并且场景等特效任你摆(这里需注意Overdraw不要过分绘制,序列图集的大小不要过大,压缩后会损失太多效果)。
这里随口说一下为什么很多项目程序不让改粒子系统的Order in Layer,因为担心会Layer冲突打乱其他资源的合批,能靠RenderQueue解决不要改Order in Layer,或者与程序沟通一个特效使用的范围。
7.png
Overdraw
Overdraw的检查方式如下
8.png
这里左右两边为相同的材质球和效果(如下图),但是右边的绘制区域比左侧更少,用少量的模型定点数去减少绘制区域起到优化Overdraw的效果
9.png
10.png
环装特效就建环状模型,使无像素部位不计算。
11.png
12.png 13.png
绝对避免下图情况的发生,3D游戏需考虑摄像机位移至各个位置时是否会出现这种情况。
14.png
有见过特效师将粒子透明度降到很低,然后用大量粒子堆叠出效果的情况,控制好MaxParticles。
15.png
(这就是为什么上古时期很多公司特效制作不让用粒子系统的原因,不是不能用,是怕乱用。)
最后说一句卡顿不一定就是特效的问题,优化也一定不能一条腿走路,更多的可优化方案可看我上一篇文章,最后感谢大家的支持,有什么说的不对的地方请务必指正。
下次分享一下ShaderLab的学习心得吧,如果有下次。

17
点赞
0
打赏
94
添加到收藏夹

2

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论13
您需要登录后才可以回帖 登录

学习了
3年前
回复

使用道具 举报


感谢楼主分享!
4年前
回复

使用道具 举报


感谢楼主分享!
4年前
回复

使用道具 举报

66666666666
4年前
回复

使用道具 举报

感谢楼主分享!
4年前
回复

使用道具 举报

ZHowe 发表于 2020-7-14 13:51
相同贴图的相同,并且不能和非本贴图的相同。就试一下就会好理解的多

大佬留个联系方式吗,想跟你探讨一下,刚好我们马上开新项目了,我需要更多了解这方面的东西
4年前
回复

使用道具 举报

ZHowe  
月月月月1 发表于 2020-7-14 13:15
有点不明白,既然相同Layer或相同RenderQueue的同贴图会进行合批,那么你这上面 刚开始默认RenderQueue都30 ...

相同贴图的相同,并且不能和非本贴图的相同。就试一下就会好理解的多
4年前
回复

使用道具 举报

有点不明白,既然相同Layer或相同RenderQueue的同贴图会进行合批,那么你这上面 刚开始默认RenderQueue都3000的时候为什么也是9个DC,不应该也是5个吗
4年前
回复

使用道具 举报

感谢分享啊~学些学习~{:6_205:}
4年前
回复

使用道具 举报

数据加载中....
没有更多评论了
您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器