ASTC 纹理压缩格式在保持视觉质量的同时将纹理内存占用减少 60% 到 75%:2GB 的贴图资源压缩后只占 500MB 到 800MB。纹理的内存占用是前端性能的大头,ASTC 的引入让低端机的贴图加载不再卡顿。
---纹理的格式选择:按设备能力选择压缩格式
function TextureLoader.pickFormat()
local gpu = deviceInfo.gpu
if gpu.supportsASTC then return ".astc" end
if gpu.supportsETC2 then return ".etc2" end
return ".png"
end
function TextureLoader.load(imagePath)
local fmt = TextureLoader.pickFormat()
local path = imagePath .. fmt
return GUI:Image_Create(nil, path, 0, 0, path)
end
纹理的加载按设备 GPU 的支持能力选择格式:支持 ASTC 的用 ASTC,不支持的选择 ETC2 作为降级,两者都不支持时回退 PNG。格式的选择在纹理加载的入口统一处理,业务层不需要感知格式差异。
---纹理内存的统计对比
function TextureStats.report()
local stats = { astc = 0, png = 0, count = 0 }
for _, tex in ipairs(loadedTextures) do
stats[tex.format] = stats[tex.format] + tex.memoryKB
stats.count = stats.count + 1
end
QF_PushToDash("texture_memory", stats)
end
ASTC 的压缩比在视觉质量可接受的前提下达到 4 比 1 到 8 比 1,纹理的内存从 2GB 压缩到 250MB 到 500MB。压缩的开关按设备内存阈值自动切换:内存低于 2GB 的设备强制 ASTC,高内存设备可用 PNG 保画质。纹理的加载队列按可视距离优先排序,视野内的纹理优先加载,视野外的延迟加载。
纹理的加载耗时与内存占用的日报,ASTC 的解码耗时在低端机上的实测数据指导压缩级别的选择。
ASTC 的压缩质量参数曾经统一用最快模式,视觉质量明显下降后被玩家投诉,压缩级别按贴图的重要性分级设置。ASTC 的兼容性检查遗漏了部分低端 GPU,回退到 ETC2 的降级逻辑补齐后兼容性问题关闭。
ASTC 的压缩在构建流水线自动完成,压缩的参数(块大小、质量级别)按贴图的用途配置。纹理的内存看板按格式分类统计,ASTC 与 PNG 的占比数据是压缩策略调整的依据。纹理的降级策略进设备分级的配置表,设备的能力等级决定加载的格式与质量。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 跨服开放后,各服的世界频道各自为政,热门话题被服务器墙分隔。话题聚合方案:带话题标签的消息汇聚到跨服频道…
实战应用:用在哪里 运营要的是“这周谁打了副本、谁在挂机、谁在交易”,不是每天几万条的原始行为流。周报摘要方案:行为流水按玩…
实战应用:用在哪里 战斗中打字报点来不及,快捷短语轮盘让玩家按住轮盘键滑向常用语松手即发:集合、撤退、求奶、集火左,八条槽位…
实战应用:用在哪里 部分玩家用手柄玩传奇,键位习惯各不相同。按键映射方案:手柄的摇杆、十字键、肩键映射到游戏动作,映射表玩家…
实战应用:用在哪里 模块级的计数器、限流器都面临一个问题:状态存全局容易被别的代码改坏。闭包把状态封在函数的作用域里,外部只…
实战应用:用在哪里 师门任务的日常共同任务做成师徒双人副本:师父带徒弟进入专属关卡,关卡机制要求两人配合——师父扛伤开门、徒…