设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3635|回复: 13
打印 上一主题 下一主题

[有事请教] 关于MV游戏模仿大型端游的资源预加载问题

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5060
在线时间
705 小时
注册时间
2018-12-11
帖子
241
跳转到指定楼层
1
发表于 2019-6-28 10:54:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
大家都知道MV网页版的弊病,就是老要出LOADING,每过一个图都可能弹一下,严重影响游玩体验。

因为MV的资源管理模式几乎就是用到再加载,其实就是边玩边加载图片,这样图片稍微加载慢一点就出LOADING了,玩玩就LOADING,很烦。但为什么其他网游没这个问题,因为他们在游戏启动的时候一次性把资源全都预加载上来了。

不是说其他游戏就没这个问题,只是他们都解决了,所以说。你们玩过的氪金网游,是不是或多或少会有启动加载界面?

最近我也模仿这些大型端游改写了MV的图片缓存机制,在启动时进行预加载并且花钱找UI做了加载界面。(参考:https://lisliz.xyz)虽然这样是彻底消除了网页版MV的LOADING问题。

但是来了新的问题,预加载的这些图片很占内存。


用浏览器的性能分析工具可以看到预加载的这些图片占用350MB内存,这个是我个人不太能接受的。这样很多1G内存的手机基本就没法玩了,究其原因还是MV使用的图片格式是png,GPU本身是不支持显示png格式的,必须被CPU解压成RGBA位图才能被显卡所识别呈现给玩家。RGBA位图是每个像素占用4字节,也就是说一张1000*1000分辨率的图片在内存里要占用1000*1000*4=4MB的内存,非常可怕。

个人稍微调查了一下GPU能识别的压缩图片格式,如果MV使用这种压缩图片格式,则不需要解压成每个像素占用4字节的RGBA格式,大量节省内存,主要格式有S3TC,ETC,PVRTC这三种,参考文章:https://www.cnblogs.com/wbaoqing/p/6185252.html


图:webgl告诉我你的显卡可以用S3TC的压缩格式。

如果MV要使用这些压缩纹理来节省图片内存占用的话,有什么方法可以让MV使用压缩纹理么。或者有大佬可以做这样的插件,我直接用买的,研究这个真的心累。

Lv3.寻梦者

梦石
0
星屑
4583
在线时间
1205 小时
注册时间
2016-4-7
帖子
982

开拓者

2
发表于 2019-6-28 17:20:40 | 只看该作者
预载入不一定需要载入到内存 预载入到本地硬盘也是预载 当年flash页游一堆这样的
只不过问题在于这些缓存有大小限制 比如html5的application cache 就是5mb
还有玄学办法让他们下载离线资源包【我也很好奇这是如何实现的 但是当年确实遇到过这样的flash页游
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5060
在线时间
705 小时
注册时间
2018-12-11
帖子
241
3
 楼主| 发表于 2019-6-28 19:15:58 | 只看该作者
本帖最后由 lisliz 于 2019-6-28 19:18 编辑
dearake 发表于 2019-6-28 17:20
预载入不一定需要载入到内存 预载入到本地硬盘也是预载 当年flash页游一堆这样的
只不过问题在于这些缓存有 ...


哦哦,感谢指导,目前游戏里部分资源是【预载入到本地硬盘】的,部分资源是【预载入内存】的。

立绘,se,me,bgm这种不会卡MV场景加载的都会预载到硬盘。

但是tilesets和光影,事件贴图,菜单UI图片这种,会引起loading问题的资源就直接载入内存。

之前这些资源到硬盘中还是会引发一瞬间的LOADING画面让人很不爽,所以就改为内存预载了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1257
在线时间
179 小时
注册时间
2021-3-19
帖子
9
4
发表于 2023-10-14 07:12:29 | 只看该作者
本帖最后由 Angie丨 于 2023-10-14 07:13 编辑

大佬,你这个问题解决了吗?
地图越大,事件越多,就感觉有点卡顿了,特别是切换场景的时候,要等很久,性能差点的设备会直接闪退吧
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
485
在线时间
86 小时
注册时间
2023-10-26
帖子
26
5
发表于 2024-4-28 13:18:21 | 只看该作者
现在2024年,astc压缩纹理格式在移动端支持率95%以上,建议优先考虑astc,压缩率和质量相比其他几个格式也好不少。

麻烦的点主要在于pixijs原生的压缩纹理文件解析库很落后(mv/mz版本),mv/mz版本使用的pixijs均不支持压缩纹理格式的加载,较新版本v7.4.1版本仅支持astc 4×4规格的压缩纹理(一般6×6或者8×8级别的压缩规格文件大小更小)。

最新版本pixijs v8,虽然支持了各种规格的astc压缩纹理加载,但是底层架构大改,和rm生态兼容性很差。

如果这块解决了,那么推荐使用texture packer把图片整合并压缩,再在代码层面做一些架构,就能愉快的使用低开销高性能的压缩纹理,免去冗长的加载和高额的内存占用了。

rm上这块落实得太少,个人正在研究中,看下后面能不能出什么好用的插件
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
668
在线时间
326 小时
注册时间
2012-4-8
帖子
213
6
发表于 2024-4-28 14:04:34 | 只看该作者
建议放弃这么边缘的优化
重写底层支持,重写图形渲染逻辑,重写图形管理
这样的话,其实可以放弃兼容,直接做引擎的
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
485
在线时间
86 小时
注册时间
2023-10-26
帖子
26
7
发表于 2024-4-28 16:24:20 | 只看该作者
本帖最后由 泼墨漓江 于 2024-4-28 16:31 编辑

这个不算边缘的,图集+压缩纹理是移动端很常用的优化方式,texture packer也是一键式的图集打包软件,pixi自己也有良好的图集支持,压缩纹理的上传在webgl上其实也是一键式的,只是需要读下文件头补充下信息,这块pixi没做,离能用目测只有“接入自定义ktx后解析器”这一步了。如果这步能搞定,整个流程就基本通畅了。不过rm喜欢用blt拷图片到自己的canvas上,手动绘图,这点可能压缩纹理会不支持。

也观望下有没有其他同好的分享吧。

纹理压缩真的很香,在画质损失不大的情况下,图片大小能压缩到原来的1/10,加载时间也只有原来的1/8,在手机这个内存吃紧、性能有限的环境下,纹理压缩技术对游戏体验提升非常高,这里能做成性价比感觉还是很高的,相比其他优化手段。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5544
在线时间
405 小时
注册时间
2021-12-4
帖子
432
8
发表于 2024-4-28 16:44:37 | 只看该作者
对于素材加载我确实没什么好的想法,隔壁 h5mota.com 的做法是:
1. 背景音乐懒加载,声效、图片、动画在启动时加载
2. tileset根据使用情况在游戏发布时用自动化工具把没用到的块都p成透明的,这样png文件大小就小多了(但是RGBA位图还是一样大?)

RMMV/MZ的话我个人习惯把地图文件在启动时一次加载完,一来第一时间发现地图文件缺失问题,二来省得反复切换地图都要重新加载一遍(连带还要重新处理一遍note和meta)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
668
在线时间
326 小时
注册时间
2012-4-8
帖子
213
9
发表于 2024-4-28 17:30:12 | 只看该作者
本帖最后由 505681468 于 2024-4-28 17:31 编辑
泼墨漓江 发表于 2024-4-28 16:24
这个不算边缘的,图集+压缩纹理是移动端很常用的优化方式,texture packer也是一键式的图集打包软件,pixi ...


是很常见优化,包括选择更小体积的文件格式来减少加载时间、内存占用,预加载、缓存池来减少加载时间

为什么说他边缘,是因为在主流都是8~12G的情况下,1、2g 内存的手机都是安卓5.0了,甚至正常的软件都用不了
一,为了在 1g 内存这部分用户而写图像的加载、管理、渲染,做底层拓展兼容
mv 这部分是缺失的,pixi 支持图集,mv 也支持,但是打包图集的管理流程、UI 的加载使用, mv 是没有的
二,像兄弟说的,bitmap 类就难受了
虽然说把文件格式兼容到 mv texture 里面就能给 gpu 用了,但是那是过 shader 的
当然了,普通开发者也没这个优化需求就是了
三,相比于给 rm 做底层兼容拓展,可能直接用 pixi 自己写个引擎可能会更快

只能说又一个5年了,看看 rm 对 pixi 有没有新一代的支持吧
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4708
在线时间
660 小时
注册时间
2021-3-24
帖子
519
10
发表于 2024-4-28 19:05:16 | 只看该作者
玩家只能看到镜头里的东西,所谓预加载就是把资源放在镜头外面。
预加载主旨就是背地里偷偷加载资源
系统需要时刻监测玩家 下一个周期可能会调用的资源,看看哪些东西没加载粗回来。
比如在一个场景里,玩家以移动速度往前走,转身需要0.5秒
那么作为程序 你是能算出来每个周期玩家通过正常的手段会走到什么地方,然后把可能需要的东西加载,不需要的东西释放掉。

当然以上是3D游戏, 一个2D游戏合理规划资源 游戏本身不到1G的话 游戏启动把全部资源塞内存里都行
全家活光光~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-12 19:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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