Unity3D 请问播放大量2048的全屏序列帧卡顿怎么解决?
做毕设的时候,需要播放十几组序列帧。每组序列帧大概100+张图,我使用U3D 自带的animator自动生成播放,结果三四个还行。多了就卡的不动了。求各位大神有没有解决办法? 是一组动作100+图片还是所有动作?如果是一组动作100+图完全没必要,用序列贞做动画要计算下贞率,一套动作,12(图)/s这是大厂高端2D游戏的标准了。U3d中建议用2dtoolkit做序列贞动画,原理是,将动作小序列图打包成图集,并生成纹理坐标。这样一个动作只需一次DrawCall,极大提高渲染效率。
题外话。目前2D游戏很少用序列贞来做了,因为图量大到爆。推广渠道喜欢小小小,美美美的精干货。又美又小?很予盾、咋整?2D骨骼动画呗!spine你值得拥有。 1 实现方式
首先如果是全屏,不要用序列帧,采用Playmovie播放视频的方式。
2性能优化
当前情况的话,唯一的方式就是调整图片的压缩格式,还有播放速度调整。 首先图片太大占用很多内存,读取和加载时间也会很久。
其次渲染过程有个概念叫batching,它是有单次提交上限的,U3d印象最大支持8192,即2048x4,所以超过这个数目要等待下次,下下次,甚至下下下次bathcing才能够绘制出来,导致必然卡。
Animator本身是CPU更新,速度跟逻辑复杂度有很大关系,具体没有项目和数据也不好判断,希望你的例子里面这个东西不会造成性能瓶颈。
实在无法评估你的项目,100+张图是指100+个图集还是100+个图片文件?如果100+个文件每个进入u3d都是2048x2048,同时播放,那么性能是内存和渲染双方面的开销。需要你打打图集或者缩小图片或者尽可能的想办法合理使用内存。如果是100+张图集,每个2048x2048,那么播放序列帧,即使同时播放好几个序列,理论上也不需要加载全部图集,此时减少batching的数据量,减少更新动画的逻辑量估计就可以解决问题。
然后另一个哥们说的很对,如果你是全屏序列帧,那还是直接放视频好了。
以上纯属个人瞎猜,解决问题还是要你自己看看profiler确认具体瓶颈在哪然后再搞。 这种情况需要解决的问题有两个,一个是这么多图片是否把显存挤爆了;一个是中间是否存在多余的重复加载操作;
第一个问题解决的思路大概有3个,分别是:
[*]把序列帧改成视频,然后在Unity中播放这些视频。
[*]不要把所有图片一次性全部加载,而是自己写一个组件,动态加载并显示当前帧需要的图片;
[*]降低图片大小,减少图片数量,使用GPU可读的压缩格式对图片进行重新编码;
第二个问题就需要仔细的检查一下了,看看是不是每帧都把所有图片加载了一次什么的。
页:
[1]