找回密码
 立即注册
查看: 381|回复: 4

Unity3D 请问播放大量2048的全屏序列帧卡顿怎么解决?

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

  • 把序列帧改成视频,然后在Unity中播放这些视频。
  • 不要把所有图片一次性全部加载,而是自己写一个组件,动态加载并显示当前帧需要的图片;
  • 降低图片大小,减少图片数量,使用GPU可读的压缩格式对图片进行重新编码;
第二个问题就需要仔细的检查一下了,看看是不是每帧都把所有图片加载了一次什么的。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 10:49 , Processed in 0.065685 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表