畫圖即函數:把一個完整字形編譯成一個函數的可擴充符號語言
副標:一份技術白皮書——記前人的施法模擬器、標不可擴充的缺口、給可擴充字形 IR 的設計
EveMissLab 工作稿 · EML-GFL-2026-v0.1 · 2026 年 6 月
作者:Neo K.(許筌崴) · 一言諾科技有限公司(EveMissLab)
立場聲明:本文記錄一個構想,以及它周圍別人已經做出來的東西。「畫符施法」這個概念一點都不新鮮——它和占星、煉金一樣古老——我不主張優先,也無意把一個老概念說成新發明。如果別人先做了相關的東西,我尊重他們、感謝他們,並如實引用。本文真正想說的,不是「畫圖能施法」,而是「能不能讓畫出來的那個完整字形,成為一個可擴充的函數」。文中關於 VR/AR/可程式化物質(奈米浮塵)的段落,明確標為未來與不保真:那是很遠的科幻,術語與原理都還不夠精準,需要另文展開,本文只負責標出方向,不虛構細節。引用為 2026 年 6 月檢索所得,連結與年份待日後再核。
命名說明:本文術語採描述性命名,不以任何人名命名;本文亦不複製任何受著作權保護的字形設計,只取「畫圖即函數」這個原理。
摘要
本文圍繞一個構想:畫圖即函數——讓一個畫完的、完整的字形,被編譯成一個函數;讓一組這樣的字形,構成一個可擴充的符號語言。
要誠實地分三件事說。其一,前人已做的:有一個世界觀——《尖帽子的魔法工坊》(Witch Hat Atelier)——把魔法設計成「畫符即施法」,字形由中心的 sigil、周圍的 signs、外圈的 ring 三件組成,規則化、可學、可組合;而網路上已經有人把它做成真實的 MVP:fan-made 的施法模擬器,你在畫布上畫符,它解析成抽象語法樹(GlyphAST)、編成中間表示(SpellIR)、再渲染出效果。換句話說,「畫一個完整字形 → 解析成 AST → 編成 IR → 執行」這條鏈,別人已經在玩具尺度上跑通了。
其二,缺口:那個世界觀的符是固定的設定,那些 MVP 的字典是固定的小子集——兩者都不可擴充。它們是查表,不是語言。本文要標的缺口,正是這個:沒有人把它做成一個能新增基元、組合擴展的符號語言。
其三,設計:本文給出一個可擴充字形 IR 的草案——把字形拆成「畫 / 解析 / 語義」三層,把 sigil 對應到函數的運算子、signs 對應到參數、ring 對應到啟動的邊界;把字典從封閉的列舉,改成一個開放的基元登錄;把疊加形式化成函數組合。並指出它與作者既有的 VIML、可視即意圖屬於同一族:「一個完整的視覺物件 → 可編譯的 IR → 執行」。最後,把 VR/AR/可程式化物質列為未來方向,明確標示不保真。
本文不主張新穎優先,主張一張地圖、一份設計、一個立場:記錄、歸功、交棒。
0. 立場與閱讀須知
這篇白皮書橫跨「別人做的」「還沒人做的」「很遠的未來」三種保真度,所以先把每一層該怎麼讀講清楚。
第一層,前人已做的(§1、§2),是可查證的事實:那個世界觀的魔法系統長什麼樣、誰做了哪些施法模擬器、它們做到哪、誠實地標了哪些限制。這層用引用標出處。
第二層,缺口與設計(§3、§4、§5),是判斷與構想:不可擴充是缺口(我會說清楚依據),可擴充字形 IR 是設計(讀者應以「草案」待之,不是既成系統)。
第三層,未來應用(§6),關於 VR/AR/可程式化物質,明確標為未來與不保真。這是作者本人特別交代的:那段非常未來,術語與原理可能不夠精準,需要另文展開;本文只標方向,不在此虛構可行性。讀到那節,請當「值得標記的遠端前沿」,而非「可實作的方案」。
還有一層立場貫穿全文:這概念不新鮮,我不爭優先。畫符施法是古老的東西,把它做成會動的 MVP 也已有人為之。本文添的,只有「可擴充」這個角度,與「把它接回 VIML/可視即意圖那條線」這件事。若這些別人也做了而我沒查到,那這份文件就退化成一份記錄——而那也完全沒關係,記下來、放上去,是為了讓接手的人省一段路。
一句話的閱讀守則:前人已做的當事實,缺口與設計當草案,未來應用當標記。
1. 一個老概念,一個新角度
先把話說在前頭,免得這篇被誤讀成「我發現了畫符施法」。
畫一個符號、產生一個效果——這是人類最古老的念頭之一。占星的星盤、煉金的符記、各文化的護符與咒印,都是「畫一個記號以求一個結果」。在虛構作品裡,魔法陣更是隨處可見;在電玩裡,「畫手勢/符文來施法」也早被做過(用滑鼠描出符文來放魔法的遊戲,是上個世代就有的機制)。所以,把「畫圖」和「施法/效果」綁在一起,一點都不新鮮。這一點,本文開門見山地承認。
那麼新角度在哪?不在「畫圖能施法」,而在三個被前人放著沒做滿的字:完整、函數、可擴充。
「完整」——不是畫個手勢觸發一個預設動作,而是畫一個結構完整的字形(有運算子、有參數、有邊界),讓這個字形本身攜帶它要做什麼的全部資訊。「函數」——讓這個完整字形被編譯成一個函數:可解析、可組合、可帶參數、可被呼叫,而不只是一張對應到固定效果的查表鍵。「可擴充」——讓這套字形不是一本背死的咒語書,而是一個能新增基元、組合出新函數的語言,像一個能造新詞的語言,而不是一份封閉的清單。
把這三個字合起來,問題就清楚了:能不能讓畫出來的完整字形,成為一個可擴充符號語言裡的函數? 這才是本文要談的。下一節先看,前人在這個問題上,已經走到哪裡——而他們走得比「老概念」這三個字會讓你以為的,要遠。
2. 前人已做的:畫符即施法,與它的模擬器
這個問題上的前人之工,集中在一個設計得特別好的世界觀,和幾個把它做成真實 MVP 的人身上。逐一記錄、引用、致謝。
2.1 世界觀:一套規則化、可組合的畫符魔法
《尖帽子的魔法工坊》(Witch Hat Atelier,白浜鴎/講談社)把魔法設計成「畫符即施法」,而且設計得異常嚴謹[5][7]。一個法術的字形由三件組成:中心的 sigil(印記)決定元素——火、水、風、土、光;周圍的 signs(符號/keystone)是修飾子,決定這個元素怎麼表現——方向、強度、大小、旋轉、範圍等;外圈的 ring(環)把前兩者圈起來,只有環閉合,法術才啟動[5]。它用一種會對物理刻痕反應的特製墨水來畫,筆即是杖;整套系統規則化、可學、可組合——sigil 有可被組合與修改的基礎元件,疊加字形產生複合效果,連「在一個環裡再套一個環」來組合效果都有[7]。
這個設計最關鍵的一點,常被忽略:它把魔法從「天賦/法力多寡」改成「畫得準不準、組得巧不巧」——一個初學者的法術常失敗或效果微弱,不是因為法力低,是因為畫 sigil 與 sign 不夠精確[5]。換句話說,這個世界觀已經隱隱把「字形」當成一種有語法、有語義、會因書寫誤差而出錯的東西——這非常接近「字形即程式」。本文取的,是這個原理,而不是它任何具體的、受著作權保護的符號設計。
2.2 真實的 MVP:幾個施法模擬器
更值得記的是:已經有人把這套畫符魔法,做成了真實可跑的 MVP,而且做的正是「畫圖即函數」的核心鏈。
最直接的是 ytnrvdf/wha-spell-simulator,一個 fan-made 的瀏覽器版施法模擬器[1];它在 YouTube 上有展示影片〈I Built a Witch Hat Atelier Spell Simulator〉[2]。它的管線是:你在類紙的畫布上畫符,它偵測那個外圈、辨識五元素的主 sigil、辨識會修改方向/漂浮/聚斂/力道/擴散/聚焦/範圍/持續/穩定的 signs,然後產出 GlyphAST 與 SpellIR 供檢視,再從編譯出來的法術行為渲染動畫效果[1]。它自己說得很清楚:那個 AST 就是解析後的字形結構,類似程式語言的 AST——外圈、候選符、主 sigil、signs、未知記號、解析警告[1]。一個完整字形,被解析成語法樹、編成中間表示、再執行——這字面上就是「畫圖即函數」,只是做在玩具尺度上。
它還有姊妹版 cosykid/wha-spell-simulator[3]:改成從調色盤放置 ring/sigil/sign 形狀(可移動、縮放、拉長、旋轉)而非逐筆手畫,用 $P 點雲、chamfer 距離與 kNN 的混合比對器來辨識,同樣產出 GlyphAST 與 SpellIR、渲染動效[3]。另外有 Davi A.M. Silva 做的 Witch Hat Atelier Spell Maker[4],偏向一個讓你自己設計法術的設計器(多重環、中心 sigil、內外環放不同 signs 這類組合),法術以 JSON 表示、可編輯。
要記下這些 MVP 的兩面。一面是:它們證明了「畫符 → AST → IR → 執行」這條鏈不只是構想,是已經能跑的東西。另一面是它們自己誠實標的限制:辨識器不完美、字典只涵蓋一個小的 fan-made 子集、視覺效果是詮釋性的動畫而非忠實還原、無法從圖片回推真正的筆順、一次只支援一個環與一個主 sigil、是瀏覽器原型而非生產級的繪圖引擎或通用符號辨識器[1][3]。這兩面合起來,正好指出下一節的缺口在哪。
2.3 更古老的近親
把鏡頭拉遠,「畫一個記號去觸發一個效果」還有更古老的近親。虛構作品裡,這套畫符魔法常被拿來和煉金術的轉換陣並列——同樣是把記號畫在媒材上以達成效果[7]。電玩裡,「描出符文/手勢來施法」是上個世代就有的機制(用游標畫符放魔法的動作角色扮演遊戲)。而把範圍再拉到本文作者既有的線上,「視覺物件 → 可執行語義」這件事,在「圖即程式碼」(把圖用文字描述、再渲染/執行)那類工具裡也早有雛形。所以「畫圖觸發函數」的原理,是一片被走過很多次的地;真正還空著的,不是這個原理,是它的可擴充版本——下一節講。
3. 缺口:不可擴充
把 §2 的前人之工擺好,缺口就清楚了:它們都不可擴充。
那個世界觀的 sigil 與 sign 是固定的設定(canon)——作者畫定了哪些符對應哪些效果,讀者不能在這個系統裡定義一個全新的元素或一個全新的修飾子。那些 MVP 的字典是固定的小子集——它們自己說字典只涵蓋一個 fan-made 的小範圍[1][3],而且一次只認一個環、一個主 sigil。你能畫的,是它們已經認得的那些;你畫一個它字典裡沒有的符,它只會報「未知記號」。
把這件事講白:它們是查表,不是語言。 一張查表,鍵是固定的、值是固定的、你只能在既有的鍵裡選;一個語言,有基元、有組合規則、能造出規則允許但從未被列舉過的新句子。前人做到了「畫一個已知的符,執行它對應的效果」;沒人做到「定義一個新的符當作新的函數,再讓它和既有的符組合」。
缺口因此是一句話:沒有人把畫符這件事,做成一個可擴充的符號語言。 而「可擴充」不是錦上添花,它是「查表」和「語言」的分水嶺。它要求兩件前人沒做的事。第一,開放的基元:能新增一個 sigil 或 sign,給它一個辨識模板(怎麼認出它)加一個語義(它denote什麼函數),讓它從此成為這個語言的一個詞。第二,一等的組合:能把字形像函數一樣組合——疊加、嵌套、帶參數地呼叫——而組合出來的複合效果,是規則允許但沒人預先列舉的。那個世界觀其實已經暗示了組合(環中套環、疊加字形),MVP 也部分支援;但沒有人把它形式化成一個可擴充語言的組合規則。
值得補一句分寸:把它做成可擴充語言,難點不在「讓動畫更漂亮」,在「讓那本固定的咒語書,變成一個能長出新詞、且新詞之間能正確組合的語言」。這是一個關於 IR 設計與語義紀律的問題,不是一個關於美術的問題。下一節給這個 IR 的草案。
4. 設計:可擴充的字形 IR
這一節給出設計草案。請帶著 §0 的提醒讀:這是草案,不是既成系統。它的價值在於把「可擴充字形語言」畫成可以動手的樣子。
4.1 字形作為函數:三層
第一個設計決定:把一個字形看成三層。畫的層——你實際畫下的筆畫。解析層——把筆畫解析成的抽象語法樹(GlyphAST):環、主 sigil、周圍的 signs、它們的相對位置與組合。語義層——這個語法樹denote的那個函數。前人的 MVP 已經有前兩層(畫布加 GlyphAST/SpellIR)[1][3];本設計要把第三層講成「函數」,並讓三層之間的映射是開放、可擴充的。
把字形映成函數,有一個出乎意料地乾淨的對應,而且它就藏在那個世界觀的三件結構裡。sigil = 運算子:它決定這個函數做什麼(火/水/風/土/光,或任何新定義的元素,就是不同的運算子)。signs = 參數:它們是修飾子,決定怎麼做(方向、強度、範圍、持續……就是函數的參數)。ring = 邊界與啟動:環把運算子與參數圈成一個閉包,環閉合才啟動——這對應一個函數的作用域邊界與「呼叫」這個動作本身。於是一個字形,讀成一個函數呼叫:f_sigil(來自 signs 的參數),在 ring 界定的作用域內被啟動。這個對應不是比喻湊出來的,是那套魔法的三件結構本來就長得像函數的三件:運算子、參數、作用域。
4.2 可擴充性:怎麼加一個新基元
這是本設計的核心、也是它和前人 MVP 的分水嶺。把字典從一個封閉的列舉,改成一個開放的基元登錄。
加一個新 sigil(新運算子),你提供兩樣東西:一個辨識模板(這個符長什麼樣、怎麼把它從畫布上認出來——可沿用 MVP 那種 $P 點雲/chamfer/kNN 的比對器[3]),加一個語義綁定(這個符denote哪個函數——它做什麼)。加一個新 sign(新參數/修飾子),同理:一個辨識模板加一個語義(它修改運算子的哪個維度、怎麼修改)。一旦登錄,這個新符就成為語言的一個詞,能和既有的符一起被畫、被解析、被組合。字典不再是寫死的 enum,而是一個可以往裡加詞的登錄表——這就是「可擴充」的全部技術內容。
4.3 組合:疊加即函數組合
可擴充語言的力量,在組合。把那個世界觀暗示的「環中套環、疊加字形」[7],形式化成函數組合。嵌套的環 = 嵌套的作用域;疊加的字形 = 組合的函數;一個複合法術 = 由基元函數依組合規則組起來的複合函數。組合是一等公民:不是預先列舉所有複合效果,而是定義基元加組合規則,讓複合效果從規則裡長出來——這正是「語言」相對於「查表」多出來的那層生成能力。形式化它,需要定義組合運算子(疊加、嵌套、串接各對應什麼樣的函數組合),以及組合的合法性條件(哪些符能疊、疊起來的語義怎麼算)。
4.4 辨識與書寫的容差
這裡有一個和作者「可視即意圖」白皮書同一條的核心張力:字形要鬆到人願意畫,又要結構到機器能解析。畫得太隨意,辨識器認不出;要求畫得像工程製圖一樣精確,又沒人想畫。前人的 MVP 已經在和這條張力搏鬥——它們用混合比對器、環偵測、容差來認一個畫得不那麼完美的符,也誠實承認辨識器不完美、有些畫得對的會認不出、有些畫得糙的要重畫[1][3]。本設計繼承這個張力,並把它當成第一等的工程問題:IR 必須對書寫誤差容差,但又不能容差到語義變模糊。那個世界觀甚至把書寫誤差寫進了設定——畫歪一點,效果就跑偏[5];本設計則要在「容許人手的不精確」與「保持語義不歧義」之間,找那條可用的線。
4.5 開放、可版控的 IR
最後一條設計守則,和 VIML/可視即意圖一致:字形要有一份開放、可版控的文字 IR。GlyphAST/SpellIR 不應鎖在某個專有格式裡,而應是可序列化、可 diff、可進版本控制的文字(前人 MVP 的 GlyphAST/SpellIR 已經是可檢視的輸出[1][3],把它做成開放標準是自然的下一步)。這條守則的用意是反鎖定:讓人能把自己定義的符、自己組的複合函數,帶著走、存進倉庫、和別人交換,而不是被關在一個 app 裡。一個可擴充語言若不可版控,擴充出來的東西就留不住、傳不開。
5. 與 VIML / 可視即意圖的關係
這一節把「畫圖即函數」接回作者既有的線,因為它不是一個孤立的新念頭,而是同一條線換了個載體。
作者的「可視即意圖」是一張思維導圖編譯成一個專案;VIML(視覺意圖標記語言)是把視覺意圖編譯成生成;而「畫圖即函數」是一個字形編譯成一個函數。三者是同一族:一個完整的視覺物件 → 一份可編譯的 IR → 執行。差別只在視覺物件是什麼——一張導圖、一段視覺意圖、一個字形——以及它編譯成什麼——一個專案、一次生成、一個函數。
對應得很整齊:前人 MVP 裡那個 GlyphAST/SpellIR,和「可視即意圖」白皮書裡「導圖的文字 IR → mssp.config」是同一個動作——把一個視覺物件解析成語法樹、編成中間表示、再執行。所以這篇不是另起爐灶,是把作者那條「視覺物件即可編譯 IR」的線,延伸到「字形」這個載體上。VIML 是這條線的標記語言層,可視即意圖是它的架構編譯實例,畫圖即函數是它的符號語言實例——它們合起來,是一族「可視即可編譯」的東西。
而貫穿三者的那個價值,正是本文 §3 標的那個缺口:可擴充、開放、可版控的 IR。可視即意圖要導圖的 IR 開放可版控,VIML 要視覺意圖可擴充,畫圖即函數要字形字典可擴充——同一個價值,套在三個載體上。把它們放在一起看,會發現作者真正在追的,不是某一個工具,而是一件更一般的事:讓人畫出來、看得見的東西,直接就是可被機器編譯與執行的、且能擴充的語義。
連回更深的線,也只點一筆:畫一個字形,是把局部的記號(signs)沿著一個邊界(ring)縫成一個整體的、會啟動的意義——這是作者「切口」那條線裡「縫」的一個微型實例(把局部縫成全域,縫合完成即啟動)。這裡只記一筆,留待那條線的正式論文展開。
6. 一個具體的例子:從字形到函數
把抽象落成一個具體的走法。以下的符名、函數名、參數都是示意性的假設,只為說明流程,不是定稿的規格。
先看一個最簡單的字形:一個外圈,中心畫一個火的 sigil,旁邊畫一個朝前的箭頭 sign。解析層把它讀成一個 GlyphAST:大致是「環:閉合;主 sigil:火;signs:[箭頭:朝前]」。語義層把這個語法樹denote成一個函數呼叫——示意地寫,像是 fire(direction = forward):運算子是火(sigil),參數是方向朝前(sign),作用域是那個閉合的環。環一閉合,呼叫就啟動,渲染出一道朝前的火。這一段,前人的 MVP 已經能跑[1][3];本文只是把最後那一步明確讀成「一個函數呼叫」。
現在看可擴充怎麼進來。假設你想要一個原系統沒有的元素,比方「聲」。在封閉的查表裡,你做不到——字典沒有「聲」,畫了只會得到「未知記號」。在本文的開放登錄裡,你做兩件事:給「聲」一個辨識模板(它長什麼樣、怎麼從畫布認出來),給它一個語義綁定(它denote一個產生聲響的函數,比如 sound(...))。登錄完成,「聲」就成了這個語言的一個新詞;你現在能畫「聲」的 sigil,配上既有的箭頭 sign,得到 sound(direction = forward)——一個你剛剛定義出來、而非系統預設的函數。這就是查表變語言的那一步:新基元能被加進來,並立刻和既有的基元一起運作。
再看組合。假設你在這個火的字形外面,再套一個環,中心放一個漂浮的 sign。嵌套的環 = 嵌套的作用域;於是這個複合字形denote的,是一個複合函數——示意地寫,像是 levitate(fire(direction = forward)):讓那道朝前的火浮起來。這個「會飛的火」沒有被任何字典預先列舉,它是從「火」「箭頭」「漂浮」三個基元,依「嵌套即組合」的規則長出來的。那個世界觀本來就暗示了環中套環能組合效果[7];本文把它說成函數組合,並讓它對新登錄的基元一樣成立——你新定義的「聲」,也能被套進另一個環裡組合。
這個例子要傳達的,不是這些函數名有多準(它們是示意),而是三件事如何咬合:sigil/signs/ring 讀成運算子/參數/作用域;新基元能被登錄進來;基元依組合規則長出複合函數。這三件咬合起來,就是一個可擴充字形語言的最小運轉樣貌。
7. 應用域(未來、不保真)
本節整節標為未來與不保真。 這是作者特別交代的:以下非常未來,術語與原理可能不夠精準,每一條都需要另文展開;本節只負責標出方向,不主張可行性,不虛構細節。讀者請當「值得標記的遠端前沿」。
一條共同的演化線是:2D 畫布上的字形 → 3D 空間中的字形 → 物理上被實例化的字形。「畫圖即函數」這個原理可以沿這條線一路往上抬,但每往上一階,難的都不是『畫』,是『執行的基底』——誰來執行那個被編譯出來的函數,變了。
7.1 VR 與視覺設計(較近的未來)。 在 VR 或一般視覺設計裡,字形可以是一個可組合的視覺效果函數:畫一個字形,生出一個帶參數的效果(粒子、光、流體……);新登錄一個 sigil,就多一個效果運算子;嵌套組合,就得到複合效果。這裡的「執行基底」是渲染引擎——相對好接,因為渲染本來就在執行函數。對視覺設計師而言,這是一套可擴充的「畫一個符就調用一個視覺函數」的語言,而不是在選單裡翻效果。
7.2 AR(更遠一點)。 在 AR 裡,字形可以被錨定在空間中,對環境調用函數——畫一個符,讓它附著在某個真實物件或位置上,持續地做某件事。這裡的執行基底,是 AR 系統對空間與物件的理解與操作能力;比 VR 難,因為它要和真實世界的感知與狀態耦合。原理仍是「完整字形即函數」,但綁定的對象從虛擬場景變成混合的真實場景。
7.3 可程式化物質 / 奈米浮塵(非常遠的未來)。 這是這條線的最遠端,也是術語最不精準的一段。設想一個被畫出來、或被實例化的字形,讓物質本身依它denote的函數重構——一團可程式化的微粒(常被科幻稱為奈米浮塵、utility fog 一類)按字形組成的指令改變形態或行為。這裡的「執行基底」是物理本身,而這正是整條線最硬、最未解的地方:在 VR 裡執行的是引擎,在物質裡執行的是物質的物理與控制;一個字形 IR 怎麼綁定到一個物理執行器,本文完全沒有答案,也不假裝有。它需要的不是一節白皮書,是一整條另外的研究線。本文把它標在這裡,只是為了誠實地畫出這條線的盡頭,而不是聲稱我們能走到。
把三階合起來的一句話:原理(畫一個完整字形即調用一個可擴充的函數)在抽象上是同一個;但越往物理走,「執行的基底」越難,而那層難,本文明確留白,標為不保真、待另文展開。
8. 風險與邊界
把這個構想會撞牆的地方標出來,分六處。
辨識是硬問題。 把人手畫的、不完美的字形穩定地認出來,本身就難——前人的 MVP 已經誠實承認辨識器不完美:有些畫得對的會被認不出,有些畫得糙的要重畫,還無法從一張圖回推真正的筆順[1][3]。可擴充讓這更難:字典一開放,要認的符就可能無限增多,辨識的歧義與衝突也跟著漲。
精度的兩難。 這和作者「可視即意圖」白皮書同一條:字形要鬆到人願意畫、又要結構到機器能解析。偏鬆,語義模糊;偏緊,沒人想畫。那個世界觀甚至把書寫誤差寫進設定——畫歪一點效果就跑偏[5];本構想得在「容許人手的不精確」與「保持語義不歧義」之間,找那條可用的線,而它沒有現成答案。
語義綁定的紀律。 可擴充的代價,是每個新基元都要被賦予一個清楚的語義(它denote哪個函數)。沒有紀律地亂加符,這個語言會很快變得不自洽——兩個符語義重疊、組合規則互相矛盾。一個可擴充語言,需要一套「怎麼負責任地定義新基元」的規範,否則它從一個語言退化成一團噪音。
組合的爆炸與安全。 組合是力量,也是風險。基元一多、嵌套一深,複合函數的行為可能變得難以預測——那個世界觀裡「sign 畫長一點,本來溫和的水就把人沖濕了」的警告,正是小誤差被組合放大的寫照[5]。一個可擴充語言需要護欄:組合的合法性檢查、效果的範圍限制,否則「會飛的火」很容易變成「燒到自己的火」。
著作權的邊界。 那個世界觀的具體符號設計受著作權保護(Witch Hat Atelier © 白浜鴎/講談社,動畫另有其權利人)。本文取的是「畫圖即函數」這個原理,不是任何 canon 符號;一個真正的實作,必須用自己的一套符號集,不能照搬漫畫的字形設計。這是法律邊界,也是設計上的誠實:原理可借鑒,符號要自創。
未來應用的基底難題。 §7 已標明:VR/AR/物質那條線,越往物理走,「誰來執行」越難,而到了可程式化物質那一端,執行基底是物理本身,本文完全留白。這不是一個風險,是一整片未解的領域;把它當風險記在這,是要提醒:這條線的遠端,目前是科幻,不是工程。
標出這六處,定位就清楚了:近端(2D 字形語言、VR 視覺函數)是可做、但難做對的工程;遠端(AR、可程式化物質)是值得標記、但目前是科幻的方向。知道哪段是工程、哪段是科幻,才不會把這份白皮書讀成一張不該兌現的支票。
9. 與既有工作的關係與致謝
按本文開頭的立場,把歸功講清楚。
那套「畫符即施法」的世界觀,來自白浜鴎的《尖帽子的魔法工坊》(© 白浜鴎/講談社,動畫另有其權利人);它把魔法設計成規則化、可學、可組合的字形系統,是這整個構想的靈感來源[5][7]。把它做成真實 MVP 的人,各自感謝:ytnrvdf 的 wha-spell-simulator[1] 與它的 YouTube 展示[2]、cosykid 的姊妹版[3]、以及 Davi A.M. Silva 的 Spell Maker[4]——是他們證明了「畫符 → AST → IR → 執行」這條鏈能跑,並誠實標出了它在玩具尺度上的限制。更古老的近親——煉金轉換陣那樣的虛構畫符、描符文施法的電玩——則提醒我們:這個原理是一片被走過很多次的地。
那麼,在這些之上,這份白皮書添了什麼?三件事。其一,把缺口指出來:前人的字典是封閉的查表,沒有人把它做成可擴充的語言。其二,給可擴充字形 IR 一個草案:字形拆三層、sigil/signs/ring 讀成運算子/參數/作用域、字典從列舉改成開放登錄、疊加形式化成函數組合。其三,把它接回作者的線:指出畫圖即函數與 VIML、可視即意圖屬於同一族「視覺物件即可編譯 IR」,共享「可擴充、開放、可版控」這個價值。
按慣常的立場收這一節:這概念不新鮮,我不爭優先。如果這三件事別人也做了而我沒查到,這份文件就退化成一份記錄——而記下來、放上去,本就是為了讓接手的人省一段路,不是為了爭一個名分。
10. 路線圖
把它落成可以一步步做的階段。誠實地說,這是設計與記錄,不是進行中的工程進度;階段是給接手的人的順序建議,且越後面越遠、越不保真。
第零階段,撿現成的鏈。 研究或 fork 一個既有的施法模擬器(ytnrvdf 或 cosykid 的)[1][3],把「畫布 → 辨識 → GlyphAST → SpellIR → 渲染」這條鏈跑起來。這是今天就能動手、且站在別人肩膀上的一步——別重造這條鏈,別人做好了。
第一階段,把字典打開。 這是把查表變語言的關鍵一步:做一個開放的基元登錄,讓人能新增一個 sigil 或 sign(辨識模板 + 語義綁定),並讓新符立刻能和既有符一起被解析。這一階段交付的,是「可擴充」這三個字的最小實現。
第二階段,把組合形式化。 定義組合運算子(疊加、嵌套、串接對應什麼函數組合)與組合的合法性條件,讓複合函數能從基元加規則裡長出來,而非預先列舉。這一階段交付「語言」相對於「查表」多出來的生成能力。
第三階段,把 IR 開放、可版控。 把 GlyphAST/SpellIR 做成可序列化、可 diff、可進版本控制的開放格式,讓人能把自定義的符與複合函數帶走、存倉庫、交換。這一階段對齊作者 VIML/可視即意圖的「開放可版控 IR」守則,並讓擴充出來的東西留得住、傳得開。
第四階段(未來、不保真),抬進三維。 把字形從 2D 畫布抬進 3D 空間(VR/AR 裡用手在空中畫),執行基底從畫布換成渲染引擎與空間理解。這一階段起,進入 §7 標的未來區,不保真。
第五階段(非常遠的未來、不保真),物質。 可程式化物質/奈米浮塵那一端——執行基底是物理本身。本文對這階段完全留白,只標位置,不給方案;它需要的是一整條另外的研究線,不是這份路線圖的延長。
每一階段(至少前三階段)都能獨立交付、獨立有用;不必等到最後才見價值。這也是這份路線圖的用意:讓接手的人,從任何一個近端階段都能開始。
11. 為什麼是字形語言,而不是直接寫程式碼
有人會問:既然字形最後編成函數,為什麼不直接寫程式碼?三個理由,而且它們不是美學偏好,是適用域的差別。
其一,給不寫程式的人一個介面。對設計師、創作者、不寫程式的人,畫一個符比寫一行函數呼叫更近、更直覺——這正是那個世界觀的核心隱喻:把魔法從「天賦」改成「畫得準不準」,等於把能力從「會寫程式的人」開放給「會畫的人」[5]。字形語言的第一個價值,是把「調用一個函數」這件事,從鍵盤的門檻後面,搬到一張畫布上。
其二,空間與組合的直覺。函數的組合,在文字裡是層層嵌套的括號,讀起來費力;在字形裡是環中套環、符疊著符,組合關係空間化地擺在眼前。對「哪個效果包著哪個效果」這種本質上空間性的意圖,一張圖比一串括號更貼合人的直覺——這和作者「可視即意圖」裡「思維導圖把層次空間化」是同一個理由,也是 §5 那條「視覺物件即可編譯 IR」的線之所以選視覺、而非文字的根據。
其三,為不能打字的場景準備。這條接 §7:在 VR/AR 裡,你沒有鍵盤;在更遠的、用手或某種介面在空間裡「畫」的場景裡,字形可能是唯一自然的輸入。當執行的場景離開了螢幕與鍵盤,「畫一個符」就不只是一個選項,而可能是那個場景裡唯一可行的「寫程式」方式。字形語言因此不只是現在的一個介面選擇,也是為一個沒有鍵盤的未來預留的入口。
所以字形語言不是要取代寫程式,是要覆蓋寫程式覆蓋不到的人與場景:不寫程式的創作者、空間性的組合意圖、以及沒有鍵盤的未來。它和直接寫程式,是兩個適用域,不是兩個競品。也正因如此,它和規格驅動開發那種「用文字當單一真理」的做法,不是對立,而是互補——文字適合可被打字、線性表達的意圖,字形適合可被畫出、空間組合的意圖;選哪個,看你的意圖長什麼樣、你在什麼場景裡表達它。
12. 結論
畫一個符號、得到一個效果,是人類最古老的念頭之一;把它做成會跑的 MVP,也已經有人為之。本文沒有重新發明這件事,而是把它推進三個字:完整、函數、可擴充——讓畫出來的那個完整字形,成為一個可被解析、可組合、可被擴充的函數,讓一組這樣的字形,從一本背死的咒語書,變成一個能長出新詞的語言。
誠實的地貌是:前人給了一個設計精良的世界觀,和幾個證明「畫符即可編譯執行」的玩具;缺的不是這個原理,是它的可擴充版本。本文給的,是那個可擴充字形 IR 的草案,以及它與作者「可視即意圖」「VIML」同屬一族的定位——它們追的,其實是同一件事:讓人畫出來、看得見的東西,直接就是可被機器編譯、執行、且能擴充的語義。至於 VR、AR、可程式化物質那條線,本文明確標為未來與不保真,只畫了它的盡頭,沒假裝能走到。
退一步說,這份文件最實在的價值,或許不在那個可擴充字形語言最終會不會被造出來,而在它把「前人做到哪、缺口在哪、可以怎麼接、哪一段是工程哪一段是科幻」記成了一張清楚的地圖。有意思的是,那個世界觀裡,witch 社會把魔法的原理藏起來,以維持 witch 與非 witch 的隔閡——因為一旦人人都懂魔法怎麼運作,那道隔閡就會在一夜之間崩掉[5]。本文的立場恰恰相反:把原理、缺口、設計都攤開、放上網,讓任何看到的人、或任何 AI,都能接手。藏起來的知識維持壁壘,攤開的知識才會生長——這也是把它寫成一份公開白皮書,而不是鎖進抽屜的理由。
最深的一句,留給那個世界觀教我們的事:在那裡,魔法不靠天賦,靠你把符畫得準不準、組得巧不巧——也就是說,力量不在你天生擁有什麼,在你能不能把意圖,精確而可組合地畫出來。把這句話從魔法搬到技術,就是這份白皮書的全部信念:當畫出來的完整符號,就是一個可擴充的函數,那麼「會畫」這件事,本身就是一種可被擴充、可被傳承的力量。剩下的,交給接手的人——無論那是人,還是 AI。
引用
引用為 2026 年 6 月檢索所得;開源專案與網路內容演化快,連結、作者與年份請於採用前再核。本文僅取「畫圖即函數」之原理,不複製任何受著作權保護之字形設計。
[1] ytnrvdf,wha-spell-simulator(fan-made 瀏覽器版施法模擬器:畫符 → 偵測環 → 辨識 sigil/sign → GlyphAST + SpellIR → 渲染效果). https://github.com/ytnrvdf/wha-spell-simulator ; https://ytnrvdf.github.io/wha-spell-simulator/ [2] 〈I Built a Witch Hat Atelier Spell Simulator〉(上述 MVP 之展示影片). https://www.youtube.com/watch?v=zVWYW0K3ikg [3] cosykid,wha-spell-simulator(姊妹版:調色盤放置 + $P/chamfer/kNN 混合辨識,GlyphAST + SpellIR). https://github.com/cosykid/wha-spell-simulator ; https://wha-spell-simulator.vercel.app/ [4] Davi A.M. Silva,Witch Hat Atelier Spell Maker(法術設計器,JSON 可編). https://wha-spell-maker.daviamsilva.dev/ [5] Witch Hat Atelier Wiki — Magic / Spells(魔法系統:sigil/signs/ring,環閉合才啟動,可組合). https://witch-hat-atelier.fandom.com/wiki/Magic [6] Witch Hat Atelier 魔法系統解說(三件結構、書寫精度決定成敗;含與煉金轉換陣之並列),參 GameRant / FandomWire / CBR 等解說文。 https://gamerant.com/witch-hat-atelier-magic-system-explained/ [7] 《尖帽子的魔法工坊》(Witch Hat Atelier),白浜鴎著,© 白浜鴎/講談社;動畫 © BUG FILMS(世界觀與符號設計之著作權人)。 [8] 描符文/手勢施法之電玩機制(上個世代之動作角色扮演遊戲一脈),為「畫記號觸發效果」之更早近親(通用參考)。 [9] Neo K.(許筌崴),VIML(視覺意圖標記語言),一言諾科技有限公司(EveMissLab)。(作者既有工作) [10] Neo K.(許筌崴),〈可視即意圖:把思維導圖變成人與 AI 共讀的意圖介面〉,EML-VIC-2026,一言諾科技有限公司(EveMissLab),2026 年 6 月。(作者既有工作,同族:視覺物件即可編譯 IR) [11] 可程式化物質 / utility fog / claytronics(§7.3 之遠未來方向,通用參考;本文對其執行基底完全留白)。
本文為 EveMissLab 技術白皮書工作稿。保真度分層已於 §0、§7 標明:前人已做的當事實,缺口與設計當草案,VR/AR/可程式化物質當標記;立場為記錄、歸功、交棒。