Singularity 的製作經驗:Blender Studio 的繪畫風短片(BCON26)(第 3/4 段)


🏦 台灣Pay 銀行轉帳 💙 PayPal
Singularity 的程序化動畫與特效做法,以及 Critter 大眼皮與四肢的 rigging 技巧
- 26:21 程序化是反覆嘗試的過程,要先想清楚哪些東西適合用程序化做、哪些不適合
- 32:49 核心觀念:用一條平滑曲線去變形另一條平滑曲線,並不保證結果仍是平滑曲線
- 39:20 動畫師也想控制觸手,他們喜歡 spline IK 這種設定
💡 你可以怎麼用:做自己的 Blender 專案時,先把「要重複做很多次」的東西列出來(例如一堆眼睛、一群背景生物),考慮改用參數或 geometry nodes 產生。綁骨時如果閉眼或彎曲出現折角,先檢查基本姿勢下網格和骨頭有沒有對齊,修正用的 shape key 再用 driver 設定成只在需要時生效。
看全部 45 條重點
🧑🏫 這段是 Blender Studio 分享短片《Singularity》的製作經驗。前半講他們怎麼用程序化方式處理大量眼睛、觸手、背景生物和特效,後半由 rigger 講 Critter 的大眼皮和軟 Q 四肢怎麼綁骨。重點不在炫技,而在怎麼省下重複的手工,又不讓藝術家失去控制。
- 26:21 程序化是反覆嘗試的過程,要先想清楚哪些東西適合用程序化做、哪些不適合↳ 程序化(procedural,用規則和參數讓電腦自動產生內容)要邊做邊試。動手前先判斷哪些交給規則跑划算,哪些還是手做比較好。
- 26:21 角色身上會飄動的部位本來就是程序化建模,所以直接對組成它的參數做動畫就好。如果是手工建模,就很難再改回基本形狀、修改動畫↳ 這些飄動部位本來就是用參數產生的,想讓它動,直接改參數做動畫就好。手工捏的模型沒有這些參數,想改形狀或動作就很難回頭。
- 26:55 角色有很多眼睛,逐顆手動做動畫太麻煩。做法是用 geometry nodes 快取單一顆眼睛,在角色周圍大量 instancing,並錯開時間↳ 眼睛太多,不可能逐顆做。先用 geometry nodes(用節點組合來產生、改動模型的工具)存好一顆會動的眼睛,再用 instancing(大量複製同一份資料)擺滿角色周圍,並錯開時間。
- 26:55 觸手用程序化方式加一點次要動態(secondary motion),疊在動畫師原本要表現的動作上↳ 動畫師先做好觸手的主要動作,程序化再自動加上 secondary motion(次要動態,也就是主動作帶出的跟隨晃動),疊在原本的動作上。
- 27:28 這類觸手共有六條,每個鏡頭都手動處理很繁瑣,程序化讓它可以做出「禮貌揮手」這類動作↳ 這種觸手有六條,每個鏡頭都手調會非常累。交給程序化之後,連「禮貌揮手」這種細膩的小動作也做得出來。
- 27:28 背景生物依重要程度分層。第一層是主要角色,由動畫師手動製作動畫↳ 背景生物依重要性分層,花的力氣不同。最重要的第一層是主要角色,照傳統方式由動畫師親手做動畫。
- 27:28 第二層是「沿曲線移動的生物」,動畫師只要操作曲線、讓生物沿曲線動,比手動做游泳循環(swim cycle)容易許多↳ 第二層生物只要沿一條曲線走。動畫師拉曲線決定路徑就好,比起替每隻做 swim cycle(可重複循環播放的游泳動作)省事很多。
- 28:02 第三層是遠景的群體(swarms),群體之間在視覺上也必須彼此協調↳ 最遠的第三層是成群的生物(swarms)。雖然只是背景,群與群之間的樣子和動向也要搭得起來,畫面才協調。
- 28:02 這種做法模糊了動畫、特效、shading 的界線,但這些分類最後不重要,能用就好。程序化工作流程可以用在 pipeline 的任何環節↳ 這樣做下來,很難分清楚是動畫、特效還是 shading(設定表面材質與光感)。講者認為分類不重要,有用就好。程序化可以放進 pipeline(整條製作流程)的任何一站。
- 28:02 為了在視覺上表達不同細節層級的生物是同一種東西,在牠們身後加上能量拖尾(trails)↳ 近處精細、遠處簡化的生物長得不太一樣,觀眾可能以為是不同東西。在牠們身後都加上同樣的能量拖尾,一看就知道是同一種生物。
- 28:36 拖尾是很晚才加入的,當時大部分動畫已經完成。做法是建立一個全域的程序化設定,自動套用到所有鏡頭,只要跑模擬就會生效↳ 拖尾是動畫大多做完之後才決定加的。他們做了一套全域通用的程序化設定,所有鏡頭自動套用,只要重跑模擬就會出現。
- 28:36 觸手能量效果的做法是一直疊不同的圖層,直到好看為止↳ 觸手的能量效果沒有固定公式,就是一層一層往上疊,邊看邊加,直到畫面好看為止。
- 29:11 疊加的圖層包括氣體層、條紋(streaks)、一點仙塵(fairy dust)、閃電(講者說閃電也許少一點),最後再做修飾↳ 疊上去的有:氣體層、條紋(streaks)、一點閃亮的仙塵、閃電(講者說閃電或許該少一點),最後再整體修飾。
- 29:11 星星被黑洞吸入的鏡頭:星星原本就是程序化散佈的,所以只要把筆觸往黑洞方向拉長即可,相對簡單↳ 星星本來就是用程序化撒上去的,所以要做被黑洞吸入的效果,只要把每顆星的筆觸往黑洞方向拉長,相對簡單。
- 29:43 可以把 Python script 掛在任何 data block 上,只要檔案裡有這個 data block 並啟用 register,程式碼就會自動執行↳ Blender 裡物件、材質、文字等資料單位叫 data block。Python 程式可以掛在上面,只要檔案裡有它、又啟用 register(註冊),程式就會自動執行。
- 29:43 他們用這招替拖尾做使用者介面,任何用到拖尾的鏡頭都會自動出現這個介面,不必另外寫 add-on↳ 他們用這招替拖尾做操作介面。哪個鏡頭用到拖尾,介面就自動出現,不必另外寫 add-on(要各自安裝的外掛)。
- 30:14 程序化可以用在任何地方,但有它適合的位置,不該到處都用,因為有時候不合理↳ 程序化什麼都能做,不代表什麼都該用它。有些地方硬用規則反而不合理,要挑適合的位置。
- 30:14 程序化最好的用法不是奪走藝術家的控制權,而是強化藝術家的能力↳ 好的程序化不是讓電腦搶走藝術家的決定權,而是幫藝術家做到原本做不到或做起來太累的事。
- 30:44 Rigger Demeter 接著上台,負責角色 rigging。他的內容比較技術性↳ 接著換負責 rigging(替角色裝骨架和控制器,讓動畫師能擺動作)的 Demeter 上台,他的內容比較技術性。
- 31:18 Critter 像軟糖熊,身體會 squishy。團隊曾討論他的 resting pose 脖子該是直的還是往前看↳ Critter 像軟糖熊,身體軟軟的會擠壓。團隊討論過牠的 resting pose(沒擺動作時的基本姿勢)裡,脖子該是直的還是往前看。
- 31:18 Critter 沒有 IK 四肢,而是直的四肢。聽起來應該比較簡單,講者說其實不見得↳ Critter 的四肢沒有 IK(拉動手腳末端、關節就自動跟著彎的設定),而是直直一段。聽起來比較好做,講者說其實不一定。
- 31:49 這段主要談 Critter 的大眼皮,講者認為這麼大的眼皮在角色上很少見。拓撲與 mesh 的選擇已由 Julien 講過↳ 這段重點是 Critter 超大的眼皮,大到在角色身上很少見。眼皮 mesh(點線面組成的模型表面)為何這樣布線(topology),前面 Julien 已經講過。
- 32:19 眼皮的 mesh 是乾淨平滑的曲線,骨骼也排成平滑曲線,但閉眼後隱藏骨骼,眼皮卻出現明顯的折角(kink)↳ 眼皮的網格是平滑弧線,控制它的骨頭也排成平滑弧線。但眼睛閉起來、把骨頭藏起來看時,眼皮上卻出現一個明顯的折角(kink)。
- 32:49 核心觀念:用一條平滑曲線去變形另一條平滑曲線,並不保證結果仍是平滑曲線↳ 核心觀念:用一條順的曲線去帶動另一條順的曲線,結果不一定還是順的。兩條各自都漂亮,組合起來仍可能出問題。
- 33:21 問題根源:在 resting pose 中,mesh 曲線和骨骼曲線沒有完全對齊,所以把骨骼拉直時,mesh 不會跟著變直↳ 問題出在基本姿勢:網格弧線和骨頭弧線本來就沒完全重合。所以骨頭被拉直時,網格不會跟著一起變直。
- 33:21 解法是讓頂點與骨骼完全對齊。骨骼只有三根,無法精確控制,但 mesh 可以精確控制↳ 解法是讓網格頂點和骨頭完全對齊。骨頭只有三根,能調的地方很少;網格上每個點卻都能精確移動,所以改網格去配合骨頭。
- 33:54 用目測對齊已經足夠用於製作,但仍不完美↳ 用肉眼大致對齊,其實已經夠拿去做成品,只是仔細看還不算完美。
- 34:24 要完美對齊,就把頂點精確 snap 到骨骼曲率上:建立骨骼、用 cursor snapping、大量按 Shift+S,對整條曲線逐一處理(縮時影片約 40 秒)↳ 要完美對齊,就把每個頂點精準貼(snap)到骨頭弧線上:搭配 3D 游標反覆按 Shift+S 貼齊,整條弧線逐點處理,縮時影片也要約 40 秒。
- 34:56 這樣做出的 shape key 能讓 mesh 與骨骼完美對齊,結果看起來乾淨、專業↳ 做好後存成 shape key(事先存好的一組變形形狀,可調強弱套用),網格就和骨頭完美貼合,閉眼效果乾淨又專業。
- 35:29 這個 shape key 會改動 mesh 幾何,不應該出現在 rest pose,所以用 drivers 控制,只在眼皮真的閉上時才生效↳ 這個 shape key 改了網格形狀,不該在基本姿勢出現。所以用 driver(讓一個數值自動帶動另一個數值)綁住它,眼皮真的閉上時才生效。
- 35:29 另外用 shrinkwrap constraint 讓骨骼保持在眼球表面上,講者認為對這麼大的眼球是好主意↳ 再加上 shrinkwrap constraint(讓物件吸附在另一物件表面的限制),讓眼皮骨頭始終貼著眼球表面走。眼球這麼大,講者覺得這招很合適。
- 35:29 shrinkwrap constraint 的缺點是會緊黏在 mesh 上,某些情況會受限,但在他們的案例中可以接受↳ 缺點是它會死黏著網格表面,有些情況會綁手綁腳。不過在他們的案例裡,這點限制可以接受。
- 36:01 建議沒試過用 geometry nodes 做變形的 rigger,先搞懂 Raycast node,用它自製類似 shrinkwrap 的 modifier↳ 講者建議還沒用 geometry nodes 做過變形的人,先學 Raycast 節點(從點射出直線,看打到哪裡),用它自製類似 shrinkwrap 的 modifier(疊加在物件上的處理效果)。
- 36:01 他們的實際用法:骨骼只能線性移動眼皮,但眼睛是球形,所以用 Raycast 把眼皮重新推回眼球表面↳ 骨頭只能把眼皮直直地推,眼球卻是圓的,兩者容易不貼合。他們用 Raycast 把眼皮重新推回球面上。
- 36:32 Raycast 效果同樣用 driver 控制。講者身為 rigger 的原則是:除非刻意為之,否則不該影響 rest pose↳ Raycast 效果同樣用 driver 控制。講者身為 rigger 的原則是:除非刻意為之,任何設定都不該改動角色的基本姿勢。
- 36:32 Critter 的四肢設定讓動畫師能控制末端並隨意拖動,同時帶有擠壓變形↳ Critter 的四肢讓動畫師抓住末端就能隨意拖動,同時會跟著產生擠壓變形,保有軟糖般的彈性。
- 37:04 四肢結構:兩根 bendy bone 實際變形 mesh,另有一根較長、不參與變形的 bendy bone,作為兩根變形骨之間中段控制器的 parent↳ 每條四肢有兩根 bendy bone(能沿長度彎成弧形的骨頭)帶動網格。另有一根較長、不帶網格的 bendy bone,當中段控制器的 parent(上層,下層會跟著它動)。
- 37:04 長 bendy bone 彎曲時會給中段控制器一個初始弧度,動畫師仍可再操作中段控制器,替四肢中央加上額外動畫↳ 長骨一彎,中段控制器就先被帶出一個弧度。動畫師還能再抓中段控制器,替四肢中間加上額外的動作。
- 37:39 實作方式是用 Armature constraint,它能讓骨骼跟隨其他骨骼的 bendy bone 曲率↳ 這是靠 Armature constraint 做到的,它能讓一根骨頭跟著另一根 bendy bone 的彎曲弧度走。
- 37:39 CloudRig 是講者自己的 rigging 工具,這種「兩層 bendy bones」功能已實作在 CloudRig 裡↳ CloudRig 是講者自己開發的 rigging 工具,上面這種「兩層 bendy bones」的做法已經內建在裡面。
- 38:15 CloudRig 是 component-based 的 rig 生成系統。流程:擠出一串骨骼、在啟用 add-on 的狀態下勾選 CloudRig 核取方塊、指定元件類型 chain layered↳ CloudRig 用「元件」組裝 rig:拉出一串骨頭,在啟用這個 add-on 的狀態下勾選 CloudRig,元件類型選 chain layered,就能自動生成。
- 38:15 chain layered 的內容:一條負責變形的 bendy bone 鏈,加上一根橫跨整條鏈的 bendy bone 作為這些控制器的 parent↳ chain layered 會產生一串負責帶動網格的 bendy bone,再加上一根從頭橫跨到尾的 bendy bone,當作這串控制器的上層。
- 38:50 有了 CloudRig,只需很有限的 rigging 知識就能輕鬆建出這種設定,適合像 Critter 這樣擁有軟糖般四肢的角色↳ 有了 CloudRig,不太懂 rigging 也能輕鬆做出這套設定,很適合 Critter 這種四肢軟 Q 像軟糖的角色。
- 38:50 接著介紹巨型水母角色,牠有各種不同類型的觸手。較小的觸手用 curves 來變形,另外還搭配其他手法↳ 接著談巨型水母,牠有好幾種不同的觸手。比較小的觸手用 curves(曲線物件)帶動變形,另外還搭配了其他做法。
- 39:20 動畫師也想控制觸手,他們喜歡 spline IK 這種設定↳ 動畫師也想親手控制觸手,他們喜歡 spline IK(讓一串骨頭沿著曲線排列)這種設定,拉動曲線就能帶動整條觸手。
📘 術語
procedural animation(程序化動畫):不逐格手動做,而是對組成物件的參數做動畫,或自動產生動態,例如觸手的次要動態
proceduralism(程序化):字幕說可用在任何地方但有其適用處,最好的用法是強化而非奪走藝術家的控制權
geometry nodes(幾何節點):字幕中用來快取單顆眼睛並大量 instancing,也可用來做變形(例如 Raycast)
instancing(實例化):把快取好的單一顆眼睛複製大量擺放在角色周圍,並錯開時間
secondary motion(次要動態):疊加在動畫師想表現的主要動作之上的額外動態,例如觸手的程序化擺動
swim cycle(游泳循環動畫):字幕說手動做 swim cycle 比讓生物沿曲線移動費工
pipeline(製作流程):字幕說程序化工作流程可用在 pipeline 的任何環節
data block(資料區塊):可掛上 Python script 的單位;檔案中有該 data block 且啟用 register,程式碼就會執行
register(註冊(選項)):啟用後,掛在 data block 上的 Python script 會自動執行
add-on(附加元件):字幕說用 data block 掛 script 的做法不必另外做 add-on
rigging(綁定):講者 Demeter 的工作,即替角色建立骨骼與控制器(字幕:I rigged the things)
resting pose / rest pose(靜止姿勢):角色的基本姿勢;講者原則是除非刻意,否則不應改動 rest pose
IK(反向運動學):字幕只提到 Critter 沒有 IK 四肢,而是直的四肢,未進一步解釋
topology(拓撲):字幕只說 Julien 已解釋眼皮為何採用這種拓撲與 mesh
kink(折角):眼皮閉合後,平滑曲線上出現的明顯不自然折點
shape key(形態鍵):把頂點精確貼齊骨骼曲率後得到的結果,能讓 mesh 與骨骼完美對齊
cursor snapping (Shift+S)(游標吸附):用來把頂點精確 snap 到骨骼曲率上的方法,需要大量按 Shift+S
driver(驅動器):用來讓 shape key 或 Raycast 效果只在眼皮閉上時才生效,避免影響 rest pose
shrinkwrap constraint(收縮包裹約束):讓骨骼保持在表面上;缺點是會緊黏 mesh,某些情況下受限
Raycast node(射線投射節點):geometry nodes 中的節點,可自製類似 shrinkwrap 的效果,把眼皮推回球形眼睛表面
bendy bone(可彎曲骨骼):字幕中四肢用兩根 bendy bone 變形 mesh,另一根長 bendy bone 只當控制器的 parent
parent(父物件):長 bendy bone 是中段控制器的 parent,因此能給它初始弧度
Armature constraint(骨架約束):能讓骨骼跟隨其他骨骼的 bendy bone 曲率
CloudRig(CloudRig(講者的 rigging 工具)):講者自己的 component-based rig 生成系統,內建兩層 bendy bones 功能
chain layered(分層鏈元件):CloudRig 的元件類型:一條變形用 bendy bone 鏈,加上一根橫跨全鏈、作為控制器 parent 的 bendy bone
spline IK(樣條 IK):動畫師喜歡用來控制水母觸手的設定,字幕未進一步解釋
proceduralism(程序化):字幕說可用在任何地方但有其適用處,最好的用法是強化而非奪走藝術家的控制權
geometry nodes(幾何節點):字幕中用來快取單顆眼睛並大量 instancing,也可用來做變形(例如 Raycast)
instancing(實例化):把快取好的單一顆眼睛複製大量擺放在角色周圍,並錯開時間
secondary motion(次要動態):疊加在動畫師想表現的主要動作之上的額外動態,例如觸手的程序化擺動
swim cycle(游泳循環動畫):字幕說手動做 swim cycle 比讓生物沿曲線移動費工
pipeline(製作流程):字幕說程序化工作流程可用在 pipeline 的任何環節
data block(資料區塊):可掛上 Python script 的單位;檔案中有該 data block 且啟用 register,程式碼就會執行
register(註冊(選項)):啟用後,掛在 data block 上的 Python script 會自動執行
add-on(附加元件):字幕說用 data block 掛 script 的做法不必另外做 add-on
rigging(綁定):講者 Demeter 的工作,即替角色建立骨骼與控制器(字幕:I rigged the things)
resting pose / rest pose(靜止姿勢):角色的基本姿勢;講者原則是除非刻意,否則不應改動 rest pose
IK(反向運動學):字幕只提到 Critter 沒有 IK 四肢,而是直的四肢,未進一步解釋
topology(拓撲):字幕只說 Julien 已解釋眼皮為何採用這種拓撲與 mesh
kink(折角):眼皮閉合後,平滑曲線上出現的明顯不自然折點
shape key(形態鍵):把頂點精確貼齊骨骼曲率後得到的結果,能讓 mesh 與骨骼完美對齊
cursor snapping (Shift+S)(游標吸附):用來把頂點精確 snap 到骨骼曲率上的方法,需要大量按 Shift+S
driver(驅動器):用來讓 shape key 或 Raycast 效果只在眼皮閉上時才生效,避免影響 rest pose
shrinkwrap constraint(收縮包裹約束):讓骨骼保持在表面上;缺點是會緊黏 mesh,某些情況下受限
Raycast node(射線投射節點):geometry nodes 中的節點,可自製類似 shrinkwrap 的效果,把眼皮推回球形眼睛表面
bendy bone(可彎曲骨骼):字幕中四肢用兩根 bendy bone 變形 mesh,另一根長 bendy bone 只當控制器的 parent
parent(父物件):長 bendy bone 是中段控制器的 parent,因此能給它初始弧度
Armature constraint(骨架約束):能讓骨骼跟隨其他骨骼的 bendy bone 曲率
CloudRig(CloudRig(講者的 rigging 工具)):講者自己的 component-based rig 生成系統,內建兩層 bendy bones 功能
chain layered(分層鏈元件):CloudRig 的元件類型:一條變形用 bendy bone 鏈,加上一根橫跨全鏈、作為控制器 parent 的 bendy bone
spline IK(樣條 IK):動畫師喜歡用來控制水母觸手的設定,字幕未進一步解釋
✏️ 小考一題
Demeter 要讓 Critter 眼皮的頂點「完美」貼齊骨骼曲率時,用的是哪種方法?
A. 直接套用 shrinkwrap modifier,讓頂點自動吸附到骨骼上B. 寫一個掛在 data block 上的 Python script 自動對齊頂點C. 建立骨骼、使用 cursor snapping 並大量按 Shift+S,把頂點逐一 snap 到骨骼曲率,做成 shape keyD. 把眼皮骨骼增加到三十根,讓骨骼曲線更精細看答案
答案:C。[34:24] 講者說唯一的方法是建立骨骼、用 cursor snapping、大量按 Shift+S,對整條曲線逐一處理;[34:56] 最後得到能完美對齊的 shape key
💛 覺得有幫助?支持一下


課本免費、沒有廣告,支持與否都能照常讀 🐰