MOOSSin
選單

全部文章 · 開源工具

Blender 的背景模式與 Effekseer:不靠生成模型也能多兩種畫風

Blender 以背景模式加 Grease Pencil 可以用程式算出一座剪紙劇場;Effekseer 是 MIT 授權的粒子特效工具,特效可以先烘焙成圖片序列再合成。兩個工具都有可攜版,授權清楚。這篇講它們各自的角色和授權上要看清楚的細節,還有一段關於「剪紙」為什麼比 AI 生圖讓我安心的心得。

我小時候很喜歡剪紙。不是那種很厲害的窗花,就是把色紙對摺剪幾刀,打開來變成一排手牽手的小人。長大之後發現這個技能在做動畫的時候意外有用,只是剪刀換成了 Blender。

用程式產生動畫的時候,想要動態漫畫以外的畫風,又不想碰授權範圍不清的生成模型,有兩個很老派的工具可以用:Blender 和 Effekseer。前者畫剪紙劇場,後者做粒子特效。兩個都是官方可攜版,下載時以發行方公布的 SHA-256 驗證,解壓到專案目錄,不改系統。

為什麼不用 AI 生圖

先回答這個一定會被問的問題。生成模型畫得很漂亮,這沒有疑問。問題在兩件事:授權,和可解釋性。授權那件事我另外寫了一整篇,很多模型的權重不能商用,或者預設的相依鏈裡藏著不能商用的東西,查起來很累。可解釋性是另一回事:生成模型畫出來的火焰,你沒辦法回答「為什麼火舌往左」,它就是往左了。剪紙的火舌往左是因為我寫了往左,改一個數字它就往右。做一條要反覆修改的流程,能回答「為什麼」比畫得漂亮重要。

Blender 以背景模式跑

blender -b 進入背景模式,不開介面,執行一支 Python 腳本後結束。腳本用 bpy 建場景、擺紙偶、逐幀算繪。你不需要會用 Blender 的介面,我到現在還是不太會,那些快捷鍵對我來說像另一種語言。但 bpy 是 Python,Python 我會。

2D 的部分靠 Grease Pencil,它讓你在 3D 空間裡畫向量筆觸,算繪器用 EEVEE 就夠。火焰、火星、氣旋都可以是 Grease Pencil 的剪紙形狀,火舌每三幀換一次形狀就有定格動畫的感覺。那個「每三幀換一次」是有講究的,每一幀都換會太滑順、看起來像電腦畫的;每五幀換一次又太卡。三是我試出來的數字,沒有理論依據,純粹是看起來最像小時候摺的那排小人在動。

確定性是重點。所有動作都依「序列幀」計算,不用亂數,也不用關鍵影格插值,同一段算兩次逐幀相同。第一次算繪時把舞台存成 .blend 模板,之後同一個舞台配方直接載入。

Blender 的授權

Blender 的二進位是 GPL-3.0-or-later,這三個字母讓很多人緊張,覺得用了它做出來的東西就要開源。官方授權頁把話說得很清楚:可以用於商業製作,算繪出來的作品不自動受 GPL 約束。原樣使用可攜版、不修改它、不交付 bpy 外掛給別人,就沒有對應的義務。哪天要交付修改過的 Blender 或以外掛形式散布程式,才有 GPL 的原始碼義務。「用了 GPL 工具」和「散布 GPL 衍生作品」是兩件事,就像用 GIMP 修的照片不會變成 GPL 授權的照片。

Effekseer 只用命令列

Effekseer 是日本社群維護的粒子特效工具,核心和 Godot 外掛都是 MIT。它有一個很漂亮的編輯器,可以拖拉出各種爆炸和魔法陣,但我只用它的命令列把自製的特效定義轉成它的檔案格式,不開編輯器。理由跟前面一樣:特效要能用程式產生、能重現、能解釋。

烘焙流程是:轉檔,在 Godot 的相容模式算繪器裡播放一次逐幀讀回,各段依起始幀取圖以加法合成到畫面上。亂數種子固定時,三次烘焙逐幀相同。

自製特效可以很簡單:所有粒子都是加法混色的環形光點,不用貼圖,依時間表產生,只做時間表寫到的階段。生火就是先有幾顆火星、再有小火、再有大火,每個階段幾秒寫在表裡。這樣每一個效果都可以解釋,改一個參數就知道畫面會怎麼變。它不會有生成模型那種「哇好美」的瞬間,但也不會有「這是什麼」的瞬間。

Effekseer 的授權細節

核心 MIT、外掛 MIT,但工具包另有一份 LICENSE_TOOL,列了 Ms-PL、BSD、zlib、OFL 等第三方項目。「外掛是 MIT」不表示整個工具包只有 MIT。範例特效庫也不能整包當成 CC0,要用外部效果得逐包核對。我的做法是範例一個都不用,只用自製的,第三方聲明照樣收進證據目錄。工具需要 .NET 桌面執行環境。

小劇場:這樣做出來的東西會好看嗎

「剪紙風聽起來很陽春,不會很醜嗎?」

「會有一種手工感。你可以說它樸素,也可以說它有溫度,取決於你想不想喜歡它。」

「聽起來像在替自己找藉口。」

「有一點。但你看過那些定格動畫電影吧?黏土的、紙偶的,那些也很陽春,然後大家哭得稀里嘩啦。」

「所以重點不在精緻。」

「重點在每一格都是有人決定的。觀眾看得出來。」

兩種畫風的取捨

剪紙的好處是完全不依賴生成模型,每一個形狀都是可以解釋的;代價是每一種舞台都要有人先設計配方,第一座紙劇場搭起來花的時間遠比想像中多。烘焙特效相反,一個模板可以套在很多段落上,但它只能表現時間表寫到的東西,不會自己發明,你沒寫「火星飛出來」它就不會有火星。

兩條路加起來,在不碰任何授權範圍不清的模型的前提下,就多了兩種畫面。而且每次算繪的時候,我都會想起小時候那排手牽手的小人,只是這次它們會動。

Blender 為什麼是開源的

這個故事值得知道。Blender 本來是一間荷蘭動畫工作室的內部工具,作者 Ton Roosendaal 後來成立公司想把它商業化,2002 年公司倒了,軟體的原始碼被債權人握在手裡。Ton 跟債權人談了一個條件:湊到十萬歐元,原始碼就以 GPL 釋出。他發起募款,社群在七個星期內湊到了。從那天起 Blender 屬於所有人,二十幾年後它成了最重要的 3D 軟體之一,好萊塢都在用。

這段歷史解釋了 Blender 社群的性格:他們對「自由」這件事非常認真,因為那是花錢買回來的。也解釋了為什麼 Blender 基金會這麼多年一直在做「開放電影」,用 Blender 做的短片連原始檔一起公開,Big Buck Bunny 那隻兔子你大概看過。

Grease Pencil 原本只是在 3D 視窗裡畫註記用的工具,後來社群發現可以拿它做 2D 動畫,越做越完整,現在是一個成熟的 2D 系統,很多動畫短片完全用它做。一個註記工具長成一套動畫系統,這種事只會在開源專案裡發生。

常見的三個誤會

第一個誤會是「Blender 一定要學介面」。要做互動式的東西是要,但用它當算繪器的話,bpy 就是全部,你可以完全不開介面。我到現在還是不太會用它的介面,但我的腳本跑得好好的。

第二個誤會是「粒子特效一定要即時算」。遊戲需要即時,影片不需要。先烘焙成圖片序列再合成,每一幀都可以慢慢算,算完的結果可以重用、可以檢查、可以版本控制。烘焙是影片製作和遊戲製作最大的分岔點之一。

第三個誤會是「MIT 的工具附的素材也是 MIT」。前面講過了,範例特效、示範圖片、字型,各有各的授權。工具的授權涵蓋工具,不涵蓋跟工具一起下載的那個資料夾裡的所有東西。這件事在每個工具上都一樣,只是 Effekseer 的範例庫特別誘人。

一個週末可以試的小練習

下載 Blender 的可攜版。寫一個十行的 Python 腳本:import bpy,建一個 Grease Pencil 物件,在上面畫一條線(幾個點的座標),設相機,算一幀輸出 PNG。用 blender -b -P 腳本.py 跑它。你會在完全沒有開介面的情況下得到一張圖。

然後把那條線的座標改成依「幀數」計算,例如 x 座標等於幀數乘以某個數字,用迴圈算十幀。把十張 PNG 用 FFmpeg 串起來,你就有了一個用程式碼畫的、確定性的、可以 diff 的動畫。這一個下午會讓你對「Blender 當算繪器」這件事從概念變成手感。順便觀察一下 EEVEE 算一幀要多久,你大概會驚訝於它有多快。

後記

小時候那排手牽手的小人,我記得是紅色的色紙。剪的時候很緊張,怕剪斷了小人的手,打開來的那一刻如果全部連著,會有一種很單純的快樂。現在算繪剪紙劇場的時候,看到火舌每三幀換一次形狀,那種快樂居然回來了。技術換了,快樂的形狀沒變。這大概是我選這條路而不是生成模型的另一個理由,只是這個理由寫不進任何技術文件裡。

官方網站:blender.org、effekseer.github.io

閱讀偏好

返回全部文章作者與內容更正

留言(0)

還沒有留言。讀完有想法,歡迎留下第一則。

留言經站長審核後才會顯示。暱稱和留言會公開,請不要寫下電話、地址等個人資料;資料怎麼處理,請見隱私權政策。