8-bit 火焰精靈(重新繪製火焰)
需要已由 fire-sprites 技能渲染的動作:此工具從 moves/NAME/ 中的獨立 身體 和 火焰 圖層,而非平面影片。$KIT 是工具包的根目錄(此檔案上兩層);py 是 $KIT/.venv/bin/python;請從專案目錄執行。
py $KIT/tools/retro.py # 每個已渲染的動作
py $KIT/tools/retro.py "breath_*" # 或僅部分(名稱或 glob)
open retro.html
為什麼要重新繪製火焰,而不是直接縮小
直接縮小火焰精靈並強制套用色盤會產生平坦的白色塊狀物:在鏡頭中,火焰會爆成白色,因此內部沒有可保留的顏色。取而代之的是:
- 身體:降採樣、硬邊 Alpha、映射到固定的 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 = 行上的深度曲線。保持同一表演者所有動作的色盤固定,以使動畫彼此匹配。