fix(jacket): 打包自制封面时限制尺寸,避免超大纹理导致选歌卡顿

Merged
HU
17h ago
+53-11

问题

导入自制曲目时,MCM 会把原图尺寸直接写进大封面 AB(jacket),并且纹理格式固定为未压缩的 RGBA32、无 mipmap。官方封面是 400×400 的 BC7。

实测某游戏数据(A5xx 包,329 首自制曲):

官方自制
尺寸400×400(老歌 256×256)原图尺寸,最大 3000×3000
格式BC7 / DXT1RGBA32 未压缩
单文件130~180 KB最大 18.6 MB
显存0.16 MB最大 34.3 MB

共 69 个封面 ≥400 KB,合计 158 MB 文件、347 MB 显存(同样数量的官方封面只需约 11 MB)。游戏的 AssetBundleDB.load() 是同步 LoadFromFile + LoadAsset,换成这种超大纹理时会出现明显掉帧。

改动

  • AssetBundleCreator 新增 MaxJacketDimension = 400,并给 CreateTextureAssetBundle / RepackTextureAssetBundle 增加 maxDimension 参数:超过上限时按长边等比缩放(ResizeMode.Max,Lanczos3,只缩不放,不裁剪、不改变宽高比)
  • 四处写封面大图的路径统一走该上限:导入封面(CreateMusicJacketAssetBundles)、改 ID 重打包(MusicTransferController)、图片转 AB 工具(ImageToAbToolController)、mcm makeab
  • jacket_s 仍然是 200×200,不受影响

验证

  • dotnet build MaiChartManager.CLI -c Crack 通过
  • 用 mcm makeab 处理 3000×3000 与 1736×1604 的测试图,产物为 400×400 与 400×370
  • 重打包后的 bundle 结构与现有 MCM 产物一致(Texture2D pathID / AssetBundle container / preload 均不变)

注意

只影响新写入的封面。已经导入的曲目需要重新导入封面,或者用一次性脚本把现有的大封面重打包(我可以另外提供,未包含在本 PR 内)。

Sourcery 摘要

在创建资源包时限制大型夹克纹理的尺寸,以降低内存使用量并提升加载性能。

错误修复:

  • 将新打包的大型夹克纹理的最大尺寸限制为 400 像素,以缩小过大的资源包,并防止选择界面出现卡顿。

功能增强:

  • 在夹克导入、重新打包、图像转换和 CLI 资源包创建过程中,统一按比例缩小纹理尺寸,同时保持小型夹克不变。
Original summary in English

Sourcery 总结

将新生成的封面纹理最长边限制为 400 像素,以减少加载开销并防止游戏界面卡顿。

错误修复:

  • 将新打包的大尺寸封面纹理的最大尺寸限制为 400 像素,减少可能导致歌曲选择界面卡顿的过量资源包和内存占用。

增强功能:

  • 在封面导入、重新打包、图像转换和命令行资源包创建过程中统一应用保持宽高比的缩放处理,同时保持小尺寸封面不变。
Original summary in English

Sourcery 总结

将生成的封面纹理最长边限制为 400 像素,以减小资源体积并提升加载性能。

错误修复:

  • 将新打包的大尺寸封面纹理的最大尺寸限制为 400 像素,以减少内存使用,并避免过大的纹理导致歌曲选择界面卡顿。

功能增强:

  • 在音乐导入、纹理重新打包、图像转换和 makeab CLI 中统一按比例缩放封面,同时保持小尺寸封面不变。
Original summary in English

Summary by Sourcery

Limit generated jacket textures to a maximum 400-pixel edge to reduce asset size and improve loading performance.

Bug Fixes:

  • Limit newly packaged large jacket textures to a 400-pixel maximum dimension to reduce memory usage and prevent song-selection stuttering from oversized textures.

Enhancements:

  • Apply proportional jacket resizing consistently across music imports, texture repacking, image conversion, and the makeab CLI while leaving small jackets unchanged.