哔巴可可 发表于 2016-6-15 09:37

Unity 粒子性能优化技巧

平时总结了一些优化技巧,仅当抛砖引玉,如有不足,多多指教。1:粒子大小,如果可以的话,粒子的size应该尽可能地小。因为Unity的粒子系统的shader无论是alpha test还是alpha blending都是一笔不小的开销。同时,对於非常小的粒子,建议粒子纹理去掉alpha通道。大块的特效最好在模型上面做,不好用粒子。 https://www.pianshen.com/images/176/ab7da5361cc41971402c0b5c7a3085a0.png2:大面积使用的粒子,或者模型,尽量使用add模式,因为blend模式会渲染通道,消耗比较大的内存。 https://www.pianshen.com/images/201/4a23f973826544a7fd6f16cb87374dc9.png
3:如果粒子叠加层次比较多,尽量使用中空模型,会大大降低渲染的压力。如图,如用到大面的环形效果,建议用右边的模型,中空,降低渲染压力。https://www.pianshen.com/images/616/2170d591b0ac69e305616ad9608f0db0.png
4: shader的使用方面,特效一般情况使用mobile模式下的shader,如有特殊需求,可以用shader forge做shader,并由程序优化至确认可以使用。
https://www.pianshen.com/images/421/490055204da69c1565e705cf8c4eb765.png


5:粒子系统的使用方面,每个发射器发射多少个粒子,最大粒子数就写多少个,因为最大粒子数默认的1000个是粒子池,会占用内存。粒子特效基本不接收光影和产生光影,故光影的效果选项去掉。如下图: https://www.pianshen.com/images/508/7010e207813f090f52fe9d3f56e3bdbc.png
6:大部分特效不要加入灯光,如想表现灯光效果,可以用glow模拟光照效果。
7:特效中需要用的模型资源能合并,尽量在max中合并,因为在unity中,模型只要k了动画就算一个dc,如果模型事先没在max中合并,几个模型就有几个dc,例如翅膀特效。就可以把模型做好都合并在一起,然后通过shader走uv,这样只会有1个dc https://www.pianshen.com/images/756/a4eda35950ef01427066a991925e99ec.png
8: 特效中用到的模型只使用一个skinned mesh renderer,角色方面也建议如此。
9: 如需用到骨骼动画,骨骼数量不要超过30。
10:不要使用mesh collider,特效中的mesh都要去掉该组件。 https://www.pianshen.com/images/642/c757ed14ce5ea27eb28373e8487b64aa.png

11:持续循环类特效发射周期尽量的大,因为周期如果很小,就会不断的生成发射器,这对cpu也有一定影响。如下图默认是5,调整到99999。
https://www.pianshen.com/images/972/3c5505403700759e213a58ebf6c927bc.png

12: 粒子系统中,关于透明度与粒子数量的关系,尽量如图一,不要出现图二的情况; https://www.pianshen.com/images/758/bade2eaf895a2264e62e67e4cf8450b6.pnghttps://www.pianshen.com/images/446/458f1ed6641a2ab22423355c1c32123e.png

13:特效中如果要k动画,那么animator组件应该位于特效最上层级的下一级。其他所有层级均在动画层级之下。14:贴图压缩格式:iOS上尽量使用PVRTC,Android上使用ETC15:图集大小最好不要高于1024,否则游戏安装之后、低端机直接崩溃、原因是手机系统版本低于2.2、超过1000的图集无法读取导致。16:特效中的mesh勾选静态以便合并 https://www.pianshen.com/images/908/136f5cdb146adb520307ad5fd363b81c.png17:unitypackage文件最终大小最好保持在1.2MB以下。贴图为带通道PNG贴图,最大不超过512*512。 单个贴图尽量控制64x64,细节比较多,经常用于大面积地方的贴图128x128,序列用于技能的不要超过256x256,用于全屏ui的序列,最大不要超过512x512,原则上不建议用序列,尽量用单个贴图,通过溶解等shader来实现序列效果。

所有贴图大小尺寸为1:1,2的幂次方。18:特效中用到的模型面数要尽量控制,选择合理的制作方法,避免出现高面数的模型。19: 新导入的模型都必须去掉这个选项。 https://www.pianshen.com/images/109/93d79c18ace50980610c4081e115f17d.png
20:如果模型不带动画,选择该模式。 https://www.pianshen.com/images/474/d3a31ac6de4e2fce966e21f4802bf032.png21:由于项目是3d项目,所以在特效制作方面,能用3d的手法就不要用很大的序列图。浪费很大资源,如有需要2d动效,可以用2d骨骼软件。输出蒙皮信息结合3d粒子效果。

个例:如何减少DC https://www.pianshen.com/images/988/597e2bc9719259a5e756a2404c074b8c.png这是我们的受击特效。DC是5个如果创建N个的话 DC会怎么样呢? https://www.pianshen.com/images/505/cc5ce924142637040e63a95e80407869.png可以看到Batches 1257....难怪卡死了.... https://www.pianshen.com/images/656/ec6903f0eba777f8378fd99caf3b4c48.pnghttps://www.pianshen.com/images/649/4e68aab17f7e31c5973c40898937c299.png这个特效是由5个例子特效组成的。我把每个粒子特效的OrderInLayer重新设置。2000,2001,2002,2003,2004确保每个粒子的OrderInLayer不同.不要重复. 接下来就是见证奇迹的时候了......0 0、https://www.pianshen.com/images/768/0f57e9bc46ff41bdca2a90e48289cf38.png 可以看到重复创建的特效都跑到Saved by batching了。大家理解了吗?特效又有新的事情要做了。 PS:关于单个特效也是能优化的。原理是一样的 https://www.pianshen.com/images/258/a7e82cf82d564c8c94bb7004966fc272.pnghttps://www.pianshen.com/images/401/319ee42a623270e4f4c2c79030126cc9.png这是一个散射子弹的特效。看这个特效的结构是相同的特效复制了5份换成了不同的角度。我还是一样的把OrderInLayer重新设置了。不过每个sq_skill_3_ball,sq_skill_3_fire,sq_skill_3_light都是设置成一样的。再一次见证奇迹的时刻- -、 https://www.pianshen.com/images/233/5f9e14941581e51ad536e97eb0275aa1.png没修改前DC的顶峰会随时间在12-16徘徊。修改后DC的顶峰稳定在8.

wd5846 发表于 2024-10-28 15:29

图片显示不出来{:8_754:}

yxtx@CK 发表于 2017-11-22 15:06

资源甚好,且阅且珍惜!

静夜流星 发表于 2017-11-22 11:10

buuco

346594032 发表于 2016-6-24 10:32

谢谢分享

╱/.Tangle 发表于 2016-6-15 10:35

10万个赞!!!!

landefa 发表于 2016-6-15 10:16

CGJOY——CG大师孵化器!

豆子存在 发表于 2016-6-15 10:05

不错,又占了一个沙发!

哔巴可可 发表于 2016-6-15 09:38

{:1_342:}自顶!!!!!价值提现
页: [1]
查看完整版本: Unity 粒子性能优化技巧