OmniSprite 🎮✨ — 指令 /sprite
像素藝術的精密工作流程,運行於 Aseprite 的 pixel-mcp 伺服器上(工具目錄:references/mcp-tools.md)。請以使用者的語言回覆。
指令 /sprite
用法:/sprite [描述] [標記]。若無引數,則詢問使用者想建立什麼。
| 標記 | 效果 |
|---|---|
--tamanho S|M|L|XL|cena | 大小等級(預設 L,128×128) |
--estilo <預設> | 12 種風格之一,詳見 references/styles.md(預設 hd-pixel) |
--vista lateral|3-4|frontal|iso | 鎖定視角(預設側面,面向右方) |
--anim idle,walk,attack,... | 要動畫化的循環(食譜詳見 references/animation.md) |
--paleta <lospec-slug|#hex,#hex|ref:路徑> | 指定的調色板,來自 Lospec 或從圖片衍生 |
--doctor | 僅診斷:Aseprite 是否找到?MCP 是否註冊?(步驟 0) |
--compilar | 強制執行從原始碼編譯 Aseprite 的流程(步驟 0.4a) |
指定的標記會省去對應的簡報問題;其餘問題會進入 grill-me 回合。例如:/sprite 黑暗奇幻騎士 --tamanho L --anim idle,walk,attack。
0. 前置條件(即插即用;檢查一次並修正缺失)
- MCP 工具是否可見?(
create_canvas、draw_pixels、export_sprite…)。如果是,請前往步驟 1。 - 如果沒有,找到 Aseprite: 執行
scripts/find-aseprite.ps1(Windows)或scripts/find-aseprite.sh。回傳值 0 會印出路徑;回傳值 2 表示未找到。 - 找到 Aseprite → 執行
scripts/install-mcp.ps1/.sh(自動偵測,下載固定版本的pixel-mcp,檢查 SHA-256 並註冊)。請使用者重新啟動用戶端並繼續。 - 找不到 Aseprite → 詢問使用者(一個問題,附選項);不要自行假設:
- "Aseprite 未安裝。您要我從 GitHub 下載其原始碼、編譯並設定嗎?(需要 git、CMake、Ninja 和 C++ 編譯器;約需 10–40 分鐘;Aseprite 授權允許為了個人使用而編譯,但不可重新分發二進位檔。)"
- 選項:(a) 是,請幫我編譯(建議)· (b) 我自己安裝(Steam / aseprite.org / itch.io;付費,支援開發者)· (c) 跳過 Aseprite 並使用 Python/Pillow 的 B 計畫(不產生
.aseprite檔案,但風格規則相同)。 - 選 (a):執行
scripts/build-aseprite.ps1(Windows)或scripts/build-aseprite.sh。如果缺少前置條件,請告知並提議在詢問後使用平台套件管理員(winget / brew / apt)安裝。若失敗,請參閱references/build-aseprite.md。完成後,執行步驟 3。
- 在關閉簡報(第 1 節)之前,絕不繪製。缺少回覆 → 詢問,或使用預設值並告知使用者。
1. 簡報(如果已安裝 grill-me,請使用它)
將以下問題作為 grill-me 的簡短回合提出(所有獨立問題一起提出,每個問題附建議答案,以便「是」接受);如果該技能不存在,則正常提問。只問缺失的項目。
| 問題 | 無回覆時的預設值 |
|---|---|
| 這是什麼?一句話 + 氛圍? | – |
| 將用於何處(遊戲類型、UI、印刷)?攝影機:側面 / 3/4 俯視 / 等角 / 正面 | 側面視角 |
風格(請參閱 references/styles.md) | hd-pixel |
| 大小等級(下表) | L |
| 動畫?哪些循環? | 無 |
| 調色板:指定 / 從 Lospec 選擇 / 從參考圖片衍生 | 使用 color 技能(/color)衍生(如果存在),否則使用 Lospec |
2. 大小等級(超越「圖示大小」;保持像素藝術)
| 等級 | 畫布 | 典型用途 | 顏色 |
|---|---|---|---|
| S | 32×32 | 物品、圖示 | 8–16 |
| M | 64×64 | 小型角色、道具 | 16–24 |
| L | 128×128 | 主要角色、精細道具 | 24–40 |
| XL | 192×192 / 256×256 | 英雄肖像、頭目 | 32–64 |
| 場景 | 320×180 或 480×270 | 背景、關鍵藝術 | 32–64 |
規則:像素是正方形,絕不以非整數倍縮放。細節來自更多像素,而非模糊。如果使用者要求「更多細節」,請先升級一個等級,而非添加雜訊。
3. 調色板優先
- 選擇/衍生調色板(
references/palette-workflow.md;Lospec 的十六進位:https://lospec.com/palette-list/<slug>.hex)。 - 以索引顏色模式
create_canvas,然後set_palette。在每個色階中將調色板從暗到亮排序(必要時使用色相及亮度進行sort_palette)。 - 建立色階,而非散亂的顏色:每個材質 3–5 階(陰影、中間色、亮部、高光),並帶有色相偏移(陰影 → 較冷/飽和,亮部 → 較暖)。使用
analyze_palette_harmonies檢查。 - 在繪圖呼叫中傳遞
use_palette: true,使每個像素都調整到調色板。
3b. 方向與姿勢(繪製前鎖定;請參閱 references/orientation-and-pose.md)
宣告 view(側面 / 3/4 / 正面 / 等角)、facing(側面視角繪製時面向右方)、光線方向、哪隻手持哪個道具,以及斗篷/頭髮垂落方向。規則:靠近攝影機一側的肢體在軀幹前方,另一側在後方;頭部朝向視線方向;斗篷固定在背部並位於最下層;每隻手一個道具,位於身體前方。對於任何動畫化的事物,先建立骨架:關節 + 2 骨 IK,然後是形狀(rig.py 位於 https://github.com/LimaEdu-7x/omni-sprite/tree/main/examples/knight)。初次渲染後進行輪廓/鏡像/重疊測試。
4. 建構順序(圖層,始終依此順序)
使用 add_layer 從下到上建立圖層:bg、shadow-cast、base、shade、light、detail、outline、fx。
- 輪廓 – 在
base中以一種暗色平塗填充整個形狀。以 1 倍大小觀看:若無法辨認為輪廓,則重做。強調不對稱性,清晰分離頭部/軀幹/肢體,可讀的負空間。 - 平塗顏色 – 每個材質使用一個中間色調,使用
fill_area/draw_rectangle/draw_circle/draw_contour。 - 形狀陰影 – 選擇一個光線方向(預設:左上)。使用
apply_shading(銳利風格用於清晰,HD 用於平滑)在shade/light上;在主光源對側添加選擇性邊緣光。 - 紋理與細節 – 僅在風格允許時使用
draw_with_dither(參閱風格);手動使用draw_pixels繪製眼睛、縫線、帶扣、高光。將像素分組;避免孤立像素(雜訊)和「鋸齒」(線條上的不均勻階梯)。 - 輪廓 –
apply_outline然後手動調整:HD 使用選擇性輪廓(較暗的顏色帶有色相偏移,非純黑);8/16-bit 使用完整深色輪廓;「無輪廓」則跳過。 - 抗鋸齒 – 在曲線/對角線上使用
suggest_antialiasing(1-bit/NES 跳過)。 - FX – 在
fx/shadow-cast中繪製光暈、火花、地面陰影。
對於複雜的有機形狀,使用網格方法:將 Sprite 編寫為 ASCII 網格(一個字元 = 調色板索引),使用 scripts/grid_to_pixels.py 轉換為一批 draw_pixels(參閱 references/grid-method.md)。大面積使用形狀工具,細節使用網格。
5. 渲染與審查循環(強制)
每個重要步驟後:export_sprite PNG → 使用 scale_sprite ×4(最近鄰)或放大 PNG 複製 → 檢視圖片(讀取 PNG)。通過 references/quality-checklist.md 的檢查清單。修正最嚴重的缺陷並重新渲染。每個步驟最多 3 個循環;然後報告剩餘項目。
6. 動畫(當要求時)
遵循 references/animation.md:先建立關鍵影格,然後是中間影格,8–12 fps(set_frame_duration 80–125 ms),每個循環一個標籤(create_tag:idle、walk、run、attack、hurt、death),duplicate_frame 加編輯,link_cel 用於靜態部分,樞軸/腳固定在相同的像素行上。使用 export_sprite(GIF 預覽)和 export_spritesheet(+JSON)導出。
7. 交付
儲存 .aseprite(save_as),導出 1x PNG、4x 預覽 PNG,以及對於動畫,GIF + sheet + JSON。告知:畫布大小、調色板名稱/顏色數量、光線方向、風格和檔案路徑。
陷阱(在 pixel-mcp 0.5.0 中驗證)
create_canvas回傳 JSON{"file_path": ...};該路徑是所有其他工具的sprite_path。沒有名稱參數;使用save_as來命名。- 在
output_path中使用正斜線(C:/Users/你/輸出.png)。反斜線會破壞生成的 Lua(\U被解讀為跳脫序列)並因「無效字元 'U'」而失敗。 scale_sprite會就地修改 Sprite:先save_as一份副本,縮放副本並導出。- 影格編號從 1 開始(
export_sprite搭配 frame 0 = 全部)。 draw_pixels接收[{x,y,color}],每次最多約 10000 個;這是grid_to_pixels.py產生的內容。- 透過 stdio 與伺服器通訊時:每行一個 JSON-RPC,使用
\n寫入位元組(CRLF 會因「無效結尾資料」而失敗)。 - 完整範例(骨架 → 陰影部件 → 圖層 → 導出)位於 https://github.com/LimaEdu-7x/omni-sprite/tree/main/examples/knight。
額外參考資料(按需載入)
references/build-aseprite.md– 從原始碼編譯 Aseprite 並解決失敗。references/orientation-and-pose.md– 視角/視線方向、遠近圖層、骨架、方向組合。references/styles.md– 12 種風格及確切規則。references/palette-workflow.md– 色階、色相偏移、Lospec 調色板、顏色預算。references/animation.md– 循環、影格、時間、緩動。references/quality-checklist.md– 通過/失敗審查清單。references/resources.md– 12 個以上網站和 20 個以上社群技能/伺服器供學習與整合。references/mcp-tools.md– 工具目錄。- 可選的輔助技能:
color//color(調色板選擇與鏡像),以及如果 Sprite 用於 Web UI 的前端設計技能。
誠實的限制
透過工具呼叫逐像素繪製很慢,且模型在沒有導出的情況下無法「看見」畫布。優先使用形狀 + 網格方法 + 審查循環;當使用者提供參考圖片時,使用 analyze_reference / downsample_image。