8位火焰精灵图(火焰重建版)
要求 fire-sprites 技能已渲染出动作:此工具基于 moves/NAME/ 目录中分离的身体和火焰层工作,而非平面视频。$KIT 是工具包的根目录(该文件向上两级);py 是 $KIT/.venv/bin/python;请在项目目录中运行。
py $KIT/tools/retro.py # 所有已渲染动作
py $KIT/tools/retro.py "breath_*" # 或仅部分动作(名称或通配符)
open retro.html
为什么重建火焰而非直接缩小
直接缩小火焰精灵图并映射到调色板会得到扁平的白色团块:在摄像头中,火焰被剪切为白色,因此内部没有颜色可以保留。相反:
- 身体:降采样,硬阿尔法边缘,映射到固定的8色皮肤和皮革调色板(按亮度加权以保留阴影),并带有1像素深色轮廓。
- 火焰:逐帧保留真实火焰形状,但重新绘制其颜色。像素在火焰中的深度决定了它在7色热力渐变上的位置:边缘暗红,经过橙色和黄色,到白色核心,并在步进间使用4x4有序抖动。深度根据该火焰的厚度相对测量,因此细剑火焰仍能获得炽热核心,而巨大的喷火云雾则呈现宽广渐变。一个小型开口处理可移除泄漏到火焰层中的薄壁线条。
retro.html 以四种方式显示每个动作:重建火焰和直接量化,身体高度分别为64像素和40像素。直接版本供表演者对比差异;重建火焰是最终使用的版本。动画以“双帧”运行(主帧率的一半),营造复古感并将精灵图表大小减半。
输出:retro/NAME_B64.png、NAME_B40.png(重建版)、NAME_A64.png、NAME_A40.png(直接版),以及包含帧网格、fps和脚部锚点的 retro/atlas.json。请使用最近邻缩放并仅以整数倍绘制(CSS中设置 image-rendering: pixelated)。
如何向表演者描述
在描述结果之前先查看实际输出。典型发现:
- 喷火云雾效果极佳;重新绘制赋予了它们在素材中缺乏的结构。
- 触及帧边缘、窗户或过曝墙壁的云雾在此比例下显得块状。
- 身体在喷火峰值时闪烁到近白色,并在剪影帧中映射为深海军蓝,因为调色板跟随素材的光照。如果表演者对此不满意,可以提供保持肤色稳定的选项(尚未实现)。
更改外观
编辑 tools/retro.py 顶部的常量:BODY_PAL(身体调色板,从最深色开始)、FIRE_RAMP(边缘到核心)、for B in (64, 40) 中的尺寸以及 heat = 行的深度曲线。请为同一表演者的所有动作保持调色板固定,以使各动画相互匹配。