Files
gplan-2/reports/评估-美术资产清单与性能预算-2026-10-30.md

17 KiB
Raw Permalink Blame History

评估:Dungeon Sweeper 美术资产清单与性能预算

版本 v1 | 2026-10-30 | 目标引擎 Godot 4.7.2-stable(gl_compatibility / 纯 2D)| 平台 PC Windows 先行 | 设计分辨率 1280×800 基座 + 1920×1080(全局 1.35× 等比) 性质:评估过程件,对应美术师交付物「美术资产清单」+「美术规格与预算」两章合并(一次问三事,不拆两份重复)。未改任何权威文档与 game/ 文件;结论若要进 design/ 走 doc-design 登记 + 用户发令。 事实源:design/art/art-assets-checklist.md(需求)· art-status-checklist.md(现状)· art-bible.md §8(尺寸定值单点)· asset-path-map.md(路径)· game/assets/ 实扫 · game/project.godot 与 117 份 .import(引擎现状)· design/gdd/ux/battle.md 板形表 · game/data/tables/enemy.tres。 显存口径:art-engine-handoff/scripts/asset_budget.py 实算;格式按项目真实导入(compress/mode=0 Lossless → 运行时解码为 RGBA8 = 4 B/px,关 mipmap)。Draw Call 与峰值显存未真机实测,只给内控线与估算口径。

0. 结论先行

  1. 纹理显存不是瓶颈:现状 126 张 PNG 解码后合计 0.82 MB,占项目内控线 96 MB 的 0.85%。
  2. 满配试算 39.95 MB,占内控线 41.6%,余量 56.05 MB(≥20% 达标);前三项占 96.9%,压显存只需盯营地场景图。(营地由 9 张拆为 10 张:新增 scene_camp_wall 围墙层,按细条 (0,240,1280,70)=0.34 MB 计,不做全幅;较原口径净增 0.34 MB。)
  3. 真瓶颈在 Draw Call 与包体结构:196 格棋盘 + 碎图各自独立纹理,最重一屏粗估 400–600 次;磁盘 6.87 MB 中字体独占 6.68 MB(97%)。
  4. 导入设置现状正确,无需改:117 张全 Lossless + mipmap 全关 + 全局 Nearest,与像素风四纪律一致;非 2 幂尺寸在当前 PC Lossless 下不产生补齐,脚本 warn 可忽略。
  5. 1920×1080 档不新增纹理:全局等比缩放复用同一份资源,显存与档位无关。

1. 目标引擎与导入基线

1.1 工程侧已核事实(实测,非文档推断)

项 值 来源
引擎 4.7.2-stable,config/features=PackedStringArray("4.7") project.godot
渲染方法 gl_compatibility(PC OpenGL Compatibility) project.godot
Stretch canvas_items,1280×800 视口;1920 档 aspect keep §8.1/§8.2
默认过滤 default_texture_filter=0(Nearest) §8.2,全局像素风基线
导入类型 CompressedTexture2D,vram_texture: false,117/117 .import 全量
压缩 compress/mode=0(Lossless),117/117 .import 全量
Mipmap mipmaps/generate=false,117/117 .import 全量
3D 检测 detect_3d/compress_to=1(2D 项目不触发) .import 全量
透明边 process/fix_alpha_border=true,117/117 .import 全量
字体 theme/custom_font = Fusion Pixel 单套 TTF §3.6 清单已定稿

Lossless 的显存真相:compress/mode=0 只压缩磁盘上的 .ctex,运行时仍解码成 RGBA8 上传显存(vram_texture: false 佐证),故显存一律按 4 B/px 计,不按 PNG 文件大小计。这是本次全部试算的口径。

非 2 幂 warn 的边界:实扫 126 张中大量 20×20 / 46×48 / 66×94 等非 2 幂尺寸。在当前 PC + Lossless 下不补齐、不影响压缩,脚本提示可忽略;若日后转 VRAM 压缩或上移动端/小游戏,该项即变为硬约束(无法压缩或图集补齐),属「待实测项」。

1.2 Godot 4.7 导入设置对照表

按 engine-import.md 逐项填,只列目标引擎列与项目现状;3D 相关项因纯 2D 标不适用。

项 通用要求 Godot 4.7 项目现状 判定
纹理类型 2D 项目用 Sprite2D / TextureRect CompressedTexture2D ✅
压缩 像素风 = 关闭压缩或无损 Lossless(117/117) ✅ 正确;插画级大图是否转 VRAM 压缩待裁
sRGB 颜色图勾 sRGB 走 PNG 色彩空间默认,hdr_as_srgb=false ⚠ 建议显式逐张标注色彩空间(待核,无风险)
Mipmap UI / 精灵 / 特效关闭 全关 ✅
过滤 Point(像素风) 全局 Nearest;显式 LINEAR 豁免仅 vignette / gradient_base / beams 三件,已入册 ✅
九宫格 StyleBoxTexture 设边距 scene_stage_plaza 48×12 横向拉伸、顶缘 2px 不随拉伸变形;UI 面板走主题样式盒 ✅ 边距需随件填,不靠记忆
图集 同屏资产归同组 现无图集,126 张独立纹理 ⚠ Draw Call 处置方向,待工程评估
字体 动态字体优先,授权干净 Fusion Pixel 单套,SIL OFL 1.1 在册 ✅
序列帧 播放器关插值、行列写进规格 帧级素材未产;帧数已冻结(待机 4 / 攻击 6 / 受击 2,§8.4) ⏸ 待产
3D 模型 / 法线 / PBR / LOD 单位轴向、OpenGL 法线 不适用(纯 2D,mdl / tex 类为空) —

2. 资产清单(运行时资源,十类逐一过)

2.1 十类现状总表

优先级沿用 art-assets-checklist.md 的 P0–P3 口径(玩法依赖,非排期);状态取自 art-status-checklist.md。前缀为美术师通用分类,项目文件命名以 §8.3 为准(见 2.3)。

类 前缀 项目对应资产 在盘件数 状态 优先级
角色 char 主角 B 区三态立绘 + 棋盘小人 32×32 四向 13(art/character) ✅ 三态已接 P1
怪物 mon 八敌站桩立绘(36–94 逐键定档) 13(同上,含敌) ✅ 已服役 P1
场景 env 砖面/地形 terrain_* 三关换皮、封印印记、舞台地台 64(art/board)+1(art/scene) ◐ 砖面程序化观感待升级 P2
UI ui 面板/按钮/进度条/节点图容器 33(art/ui) ◐ 面板与节点图占位 P2
图标 icon 状态九枚、格面徽章 19、护甲三枚、柜台四枚、节点四类 12(assets/ui/icons)+19 待产 ◐ 部分在役 P2
特效 fx 挥铲三帧、打击火花、烟尘碎屑、封印特效 3(art/fx) ◐ 程序化在役 P3
动画 anim 意图准备三档、死亡灰化碎裂、弹道密度 0(帧级未产) ◐ 占位符号在役 P1/P3
3D 资产 mdl — 0 不适用 —
字体 font Fusion Pixel 单套单字重 1 TTF(6.68 MB) ✅ 已定稿 P2
插画 img 营地场景图 10 张(9 全幅+1 围墙细条)、B 区舞台背景 1280×270 0(全占位) ⬜ 未开始 P2/P3

在盘合计:PNG 126 张(art/ 114 + ui/icons/ 12)+ TTF 1 件;磁盘 6.87 MB。纯 2D,零 3D 资产,无法线/PBR/LOD 需求。

2.2 缺口清单(未 ✅ 项,P0 写清阻塞什么)

# 资产 类 规格(§8.2 定值) 用途 优先级 状态 阻塞什么
1 战斗一屏样张 插画/样张 1280×800 双舞台整屏 锁剪影/动画/战斗空间/敌人层 P0 ⬜ 角色终稿、意图动画、演出类全部不得开工(清单 §1.2 硬前置)
2 意图准备动画三档 动画 待机 4 / 攻击 6 / 受击 2 帧,灰度剪影可辨 敌方下一拍预告 P1 ◐ 预告从占位符号退场;文字/技能名退出徽标后的唯一承载
3 格面资源徽章 19 枚 图标 32×32 级,极性=金满框/红缺框 九家族正负 + 清图槽 P2 ◐ 无(占位够试玩,观感不达标)
4 雷/封印/数字砖面全套 场景 32×32 瓦片随格边长整格铺满 扫雷核心读盘 P2 ◐ 前置格子样张已 ✅,无硬阻塞;观感升级
5 关卡节点图图标组 图标 四类节点 + 行进器 节点图 UI P2 ◐ 正式节点图 UI 设计未成文
6 营地场景图 10 张(9 全幅+1 围墙细条) 插画 2× 源出图 → 降采样 1280×800 营地交互重做 P2 ◐ 营地交互重做美术自立批(不占迭代位)
7 护甲类型图标三枚 图标 24×24,显示 1× 站桩名字行 P2 ⬜ 名字行 ◇/◆ 字形占位退役
8 B 区舞台背景 插画 1280×270,远景+中景两带 战斗舞台 P3 ⬜ 临时光柱氛围层由背景吸收
9 受击/死亡/顺位、连锁坍塌、封印特效、弹道密度 特效/动画 灰化+碎裂退场(禁瞬消) 战斗打磨 P3 ◐/⬜ 无硬阻塞,样张后排期
10 状态九枚 / 字体 / 主角三态 / 八敌立绘 / 地台 — — — — ✅ 已交付,不列为缺口

格子样张 ✅ v3 冻结(2026-09-30 机检 17/17);收益/秘宝图标、封面宣传图、地形变异专属纹理按清单 §5 明确不在本清单,不计入预算。

2.3 命名口径冲突(呈报)

美术师通用规范为四段式 <类别>_<对象>_<状态>_v<N>.png(旧版改名 _deprecated 不删);项目 §8.3 已定案为域键式 <域>_<对象键>_<状态|变体>[_<序号>].png,对象键 = 数据表主键(effect_id/reward_id/cell_type/enemy_id),文件名键全局恒定禁运行时换图,且素材不入 git、候选与终稿分目录、版本号走归档纪律。

处置:以项目 §8.3 为准,通用四段式不覆盖。依据:项目规范已定稿且有代码闸(standee_asset_check、图标键契约)依赖该命名;本条仅呈报差异,不擅自改。

2.4 产出批次

沿用清单 §6 依赖链,不重排:格子样张(✅)→ 砖面全套;战斗一屏样张(⬜)→ 角色终稿(✅)→ 意图动画 → 演出类;徽章/节点图/效果图标/复用件为独立线可插队;营地场景图归营地美术自立批。第 1 批基准图未定稿前不排后续批次规格。

3. 性能预算(六项,先预算后规格)

3.1 倒推起点:同屏对象数(已核)

对象 上限 来源
棋盘格 14×14 = 196 格(格边长 30px) battle.md 板形表 N=14
B 区单位 主角 1 + 敌最多 3 enemy.tres unit_count_max 全表最大 = 3
HUD / C 区 数据框、状态槽、按钮组约 60 件 现役 UI 结构
营地 背景 1 + 可点物件 7 + 承载件 1 = 9 清单 §3.5

3.2 六项预算表

内控线 = 本项目自定(通用 PC 档为起步值,需实测校准);均留 ≥20% 余量;实测日期栏为「未实测」的项不得当验收结论。

维度 PC 档参考 项目内控线 现状/试算 判定 备注
纹理内存 ≤ 1.5 GB 96 MB 现状 0.82 / 满配 39.95 MB ✅ 余量 56.05 MB;可用线(20% 余量)76.8 MB
Draw Call ≤ 800 600 估 400–600,未实测 ⚠ 留 25% 余量;真机跑最重一屏取峰值
同屏三角面 ≤ 100 万 不构成约束 约 0.14 万(2D quad 2 三角) ✅ 远低于档位,仅记录
同屏粒子 ≤ 1000 450 程序化火花/碎屑,未实测 ⚠ 建议单次特效峰值 ≤150、同屏 ≤3
单角色骨骼 ≤ 150 不适用 0(无骨骼,序列帧+程序化) — 纯 2D
包体(磁盘) PC 首包不适用 记录值 6.87 MB(PNG 0.19 + 字体 6.68) ✅ 字体占 97%,压包体先做字体子集化而非压图

内控线 96 MB 的依据:通用 PC 档 1.5 GB 面向 3D/4K,本项目 2D 单场景全驻留最坏试算 39.95 MB;取 ~2.4× 作内控线,给三关场景、秘宝图标与后续插画留扩展空间,并满足 ≥20% 余量。

3.3 纹理内存试算(脚本实算,非估)

版本 项数 合计 占内控线 余量 前三名占比
现状版 20 种尺寸 / 126 张 0.82 MB 0.85% 95.18 MB 75.3%(32×32×78 = 0.30 MB、256×256×1 = 0.25 MB、64×64×4 = 0.06 MB)
满配版 26 项 / 189 件 39.95 MB 41.6% 56.05 MB 96.9%

满配增量清单口径(全部 RGBA32、mipmap 关):

增量项 规格 件数 MB 占满配
营地场景图 1280×800 ×9 + 围墙细条 1280×70 ×1 10 35.50 88.9%
敌人动画图集 sheet:64×64 帧、12 帧、6 列、pad 2 → 408×136 9 套 1.91 4.8%
B 区舞台背景 1280×270 1 1.32 3.3%
徽章/节点/护甲等图标 32×32 36 0.14 0.4%
特效帧/粒子贴图 64×64 6 0.09 0.2%
主角动画图集 sheet:48×72 帧、12 帧、6 列、pad 2 → 312×152 1 套 0.18 0.5%
现状存量 实扫聚合 126 0.82 2.1%

按格式聚合:RGBA32 100%(项目全 Lossless)。现状与满配差 39.13 MB,其中营地 10 张独占 90.7% 的增量。(围墙层落盘按细条 (0,240,1280,70)=0.34 MB,不占 1280×800 全幅大图名额。)

3.4 由预算倒推单件规格(≥20% 余量)

  1. 大图是唯一约束面:可用线 76.8 MB 减去非大图 4.45 MB = 72.35 MB;1280×800 @ RGBA32 单价 3.906 MB → 同档大图总量 ≤ 18 张(18 张 = 70.31 MB,合计 74.76 MB ✅;19 张即 78.67 MB ❌)。营地首批 9 张全幅大图(另加 1 张围墙细条 0.34 MB,不占大图名额)安全,但「三关各 9 张全幅大图 = 27 张」必然触发超线。
  2. 触发后的处置优先级:① 大图换 VRAM 压缩(BC3 = 1 B/px,单价降至 0.977 MB,27 张仅 26.4 MB);② 或降入包分辨率至 960×600。像素小图不动——BC 块状伪影会毁像素边缘,且它们只占 0.82 MB。
  3. 动画图集省的是 Draw Call,不是显存:9 套图集 1.91 MB,同帧数逐帧独立 PNG 反而只需 1.69 MB(图集 padding 与补齐多出 0.2 MB)。进图集的收益在合批,别拿它当省显存的理由。
  4. 小图/图标无需限规格:32×32 级 78 张仅 0.30 MB,继续按 §8.2 甲类整数倍纪律产出即可。
  5. 1920×1080 档零增量:全局 1.35× 等比缩放复用同一份资源,不产生第二套纹理,显存与档位无关(§8.2 已裁)。

3.5 Draw Call 控制(美术能做的部分)

现状 126 张独立纹理、零图集,是 Draw Call 的结构性来源。最重一屏估算口径(非实测):196 格 ×(瓦片纹理 + 程序化覆盖层)≈ 390,B 区 4 单位 × 4 件 ≈ 16,HUD/C 区 ≈ 60 → 400–600 区间,逼近内控线 600。

风险 处置方向 归属
三关瓦片 64 张交替绘制打断合批 同关同族瓦片合并为 AtlasTexture 工程面改动,待裁/工程评估
UI 切图过碎、每图标一材质 战斗页 / 营地页 / 节点图分页分图集 同上
特效贴图各自独立 特效帧进同一图集,粒子用同材质染色 同上
程序化 _draw 覆盖层 与纹理绘制混排会断批,排绘制顺序时可收敛 同上
动态字体 Fusion Pixel 单套已合批,保持 ✅ 无需动

本报告只列处置方向,不新增需求、不改工程面;任何一条落地须由用户发令走对应通道。

3.6 待实测项(未跑,发起权归用户)

项 方法 输出 状态
最重一屏峰值 Draw Call 真机跑 14×14 满敌战斗场景 峰值次数 vs 内控 600 未实测
峰值显存 真机含营地切场景往返 vs 96 MB 内控线 未实测
粒子峰值 同屏 3 特效叠加 vs 450 内控线 未实测
VRAM 压缩可用性 GL Compatibility 下试导 BC3 大图 画质目检 + 显存实测 未实测
1920 档观感 1.35× 非整数缩放目检 甲类件宽窄不均是否可感 未目检

禁止用编辑器或模拟器数据当验收结论(实测差 2–3 倍);上表机型与实测日期留空待填。

4. 假设与待确认

  1. 假设:目标平台 = PC Windows 先行(AGENTS.md),暂不上移动端/小游戏 → 无首包硬限、压缩不走 ASTC/ETC2。
  2. 假设:满配 = 营地 10 张(9 全幅+1 围墙细条) + 舞台背景 1 + 9 敌动画 12 帧/套 + 主角 1 套 + 图标 36 + 特效 6;秘宝图标/封面宣传图按清单 §5 排除。
  3. 假设:同屏敌人上限 3(enemy.tres unit_count_max 全表最大=3,已核)、棋盘 N=14(battle.md 板形表,已核)。
  4. 假设:动画帧尺寸按 64×64 源档均值估(实际立绘逐键 36–94),帧数按 §8.4(4+6+2=12/套);量级不受影响。
  5. 待确认:营地 10 张是否同屏常驻(Godot 引用计数不自动卸载,本报告按最坏全驻留计);动画是否走 SpriteFrames 图集(影响 Draw Call 估算,不影响显存量级)。

5. 不改动声明

未改 design/art/ 任何权威清单与圣经、未改 game/ 任何文件;未生成图、未跑测试、未跑 MC(无数值改动)。本报告为过程件,按 reports/README.md「吸收即死」:结论若被权威文档吸收即可删,若需落设计文档则走 doc-design 登记 + 用户发令。