Appearance
卡牌渲染
核心结论
游戏内显示的卡牌不是一张“做好的完整卡图”直接贴到界面上,而是一个运行时组合系统:
- 插画来自卡牌图集切片
- 卡框、标题横幅、插画边框来自独立 UI 图层
- 费用图标与数字单独绘制
- 标题、描述、类型文本由界面组件排版
- 稀有度、高亮、锁定、特殊古代卡样式通过额外层和材质叠加
所以可以把它理解成“原始插画 + 多层模板 + 文本 + 特效”的拼装式卡牌系统,而不是“每张卡只有一张最终成品图”。
卡牌资源现在能看出多少
当前卡牌导出结果已经覆盖多个职业与卡类,而不是少量示例。按现有统计,至少包括:
regent:159necrobinder:140defect:114colorless:113silent:109ironclad:100event:36curse:23token:21status:18quest:5root:2
这说明当前可见的卡面资源,已经足够支撑职业分类、卡类对比和图集结构研究。
先区分两种“卡牌图片”
卡面插画
导出的单张 PNG 主要代表的是卡面插画层,也就是玩家最容易一眼认出的那部分美术内容。
完整卡牌 UI
玩家在游戏里真正看到的卡牌,通常还会叠加:
- 外框
- 标题横幅
- 插画边框
- 能量图标与费用数字
- 标题、描述、类型文本
- 稀有度高亮与交互态效果
- 特殊样式层,例如古代卡外观
因此,导出的单张卡图更接近“插画素材”,而不是最终屏幕成品。
为什么能判断它来自图集切片
目前的证据链非常明确:卡面并不是一张张独立原图直接拿来显示,而是先被打进总图,再由引擎按坐标取局部区域。
这意味着:
- 同一套卡牌资源更容易统一管理
- 新增或替换卡图时更可能围绕图集系统进行
- 导出的单卡图本质上是图集局部区域的可视化结果
为什么能判断完整卡牌是运行时拼装
恢复出来的卡牌主场景显示,卡牌至少分成多层结构:
- 插画层
- 卡框层
- 标题横幅层
- 插画边框层
- 描述文本层
- 标题与类型文本层
- 费用图标与费用数字层
- 高亮、锁定与特殊样式层
只要一个界面对象里同时存在这么多互相独立的层,就已经足够说明:完整卡牌是运行时拼出来的,而不是一张最终合成好的大图。
职业颜色和稀有度是如何做出来的
职业主色
当前研究结果显示,不同职业至少对应多套框体材质。也就是说,职业之间的视觉差异不是只换一张插画,而是整张卡的框体语义、主色和材质参数都会变化。
稀有度与卡类
标题横幅和部分外观层存在多套材质分支,说明 common、uncommon、rare,以及事件牌、诅咒牌、状态牌、任务牌等,不只是换字,而是整块 UI 样式都会变化。
shader 调色
当前还能看到用于调色的 shader 痕迹,这进一步说明卡牌样式不是纯靠大量位图硬编码出来的,而是存在一定参数化调色能力。
为什么会有古代卡、锁定态、不可打出态
从卡牌场景可见的节点结构看,这个系统原生支持多种附加表现层:
- 高亮
- 锁定
- 不可打出
- 古代卡相关边框、背景、强调层
这说明卡牌系统在设计上已经考虑了大量运行时状态切换,因此它天然更适合用“分层 + 叠加”的方式,而不是每种状态都提前导出一张完整成品图。
这套设计为什么重要
对开发者来说
- 减少资源重复
- 降低统一改版成本
- 更适合处理动态交互状态
- 更适合职业和稀有度组合扩展
对研究者来说
- 更容易区分“插画问题”和“UI 模板问题”
- 更容易判断一个显示异常到底出在图集、材质、文本还是状态层
对 Mod 制作者来说
- 想换插画,不一定要重做整张卡
- 想改职业主色,可以优先看卡框材质体系
- 想改 rare/ancient 等表现,可以优先看横幅和附加层
- 想做整套视觉重制,则需要同时处理插画、模板、边框、文字和特效
学习这部分最好的方式
建议读者把“卡牌系统”拆成三个问题去理解:
- 插画素材是怎么组织的
- 最终卡牌 UI 是由哪些层组合出来的
- 哪些视觉差异来自职业、稀有度和运行时状态
一旦这三件事想清楚,你再看职业分类、图集导出和 Mod 替换思路,就会顺很多。
研究依据
这部分结论主要来自卡牌导出结果、图集索引、Godot 卡牌场景结构、卡框与横幅材质,以及调色 shader 的交叉观察。
一句话总结
完整卡牌是“插画切片 + 卡框 + 横幅 + 边框 + 文本 + 费用 + 状态特效”的运行时拼装结果;导出的单张卡图主要只是其中的插画层。