為一部毛茸茸風格的長片打造完整動畫 pipeline — BCON26(第 4/4 段)


🏦 台灣Pay 銀行轉帳 💙 PayPal
用 Ray Portal 做繪畫感毛髮與雲、自訂打光覆寫系統,以及對 Blender 的功能願望
- 39:24 Ray Portal 節點聽名字會想到傳送門,但它給了講者原本工作流缺少的能力;邊緣與輪廓都是破碎的,打光卻很好
- 45:32 在 key shot 打光時,只要在 scene 放幾個 custom attributes,整個 sequence 的每個 shot 都會讀到這些值
- 50:57 過去他們用了很多技巧:盡量保持 procedural,某些情況甚至大量使用 simplify 到 1K
💡 你可以怎麼用:想做繪畫感的毛或雲,可以試著把 Ray Portal 的 direction 設成「指回每根毛或每片平面的起點」,再加一點旋轉或 noise 做出漸層。如果常要一次改很多物件的材質,也可以學他們在 node group 裡讀 scene 和物件的 custom attribute,自己做出三層覆寫。
看全部 40 條重點
🧑🏫 這段是 b-water 工作室在 BCON26 分享整條動畫製作 pipeline(從建模、打光到算圖的整套流程)的最後一段。前半示範怎麼用 Ray Portal 做出像手繪的毛和雲,後半談他們自己做的打光覆寫系統,以及希望 Blender 補上的功能。如果你想用 Blender 做風格化畫面,或想知道小團隊怎麼繞過軟體限制,這段很實用。
- 39:24 Ray Portal 節點聽名字會想到傳送門,但它給了講者原本工作流缺少的能力;邊緣與輪廓都是破碎的,打光卻很好↳ Ray Portal 是 Blender 的一種材質節點,名字聽起來像「傳送門」,實際作用是改變光線從哪裡、往哪個方向取樣。它剛好補上講者缺的能力:邊緣可以碎碎的,打光卻依然好看。
- 40:00 這是最漂亮的繪畫感毛髮做法之一,但不是為了寫實↳ 講者認為這是做繪畫感毛髮最漂亮的方法之一,做出來很有手繪味。不過它的目標本來就是風格化的畫面,不是追求照片般真實的毛。
- 40:00 講者原本想用 game engine 的做法,直接取底下表面的 normal;遇到 Ray Portal 後改用它↳ normal(法線)是表面朝向的方向,會影響受光。講者原本想學遊戲引擎的做法,讓毛直接借用底下皮膚的 normal,碰到 Ray Portal 之後就改用它。
- 40:32 Ray Portal 只有兩個輸入:position 和 direction;光線從視角射出,由你告訴它要從哪裡看、往哪裡看↳ Ray Portal 只要填兩個值:position(位置)和 direction(方向)。可以想成告訴它「站在哪裡、往哪裡看」,它就從那個角度去看場景的光。
- 41:04 做法:取毛髮開始生長的原始位置,與像素的世界位置(pixel world position)相減,得到指向原始點的方向↳ 每根毛都有長出來的起點。把起點位置和這個像素在 3D 世界裡的位置相減,就得到一個指回起點的方向,再把它交給 Ray Portal 當 direction。
- 41:04 結果是風格化、超扁平的毛髮,整根維持同一顏色,並從原始位置取光;這同時是優點也是缺點↳ 結果是很扁平、像色塊的毛:整根毛都拿起點那裡的光,所以從頭到尾同一個顏色。好處是乾淨、像畫出來的;壞處是少了明暗層次。
- 41:37 可再疊加向量運算:旋轉、加一點 noise,就能得到漂亮漸層與破碎感;乾淨版本不是講者最愛,但通常是最先能用的↳ 在方向上可以再做點數學,例如稍微旋轉,或加 noise(隨機起伏的雜訊圖樣),顏色就會出現漸層、邊緣也更碎。乾淨版不是講者最愛,但通常最先能拿來用。
- 42:07 前作 Knor 2 的雲不是 matte painting(原本一般會這樣做),而是用帶 noise 的球體加上大量平面和少量貼圖↳ matte painting 是一張畫好的背景圖,雲一般會用它來做。前作 Knor 2 卻改用 3D:加了 noise 的球體,搭配大量小平面和少量貼圖。
- 42:07 把 Ray Portal 指向每個平面的原始位置,就能得到平滑、邊緣破碎的雲↳ 每個小平面都有自己的起點,把 Ray Portal 指向那裡,每一片的受光就會平滑一致,邊緣又保留破碎感,組起來就是一朵很有畫感的雲。
- 42:39 Pikkuli 除了 lookdev,還要做一些小型 3D 特效;平常用 2D 特效(Tenerife 有團隊),但特寫需要做得更多↳ lookdev 是決定東西外觀和質感的製作環節。Pikkuli 除了 lookdev,還得做些小型 3D 特效;平常特效由 Tenerife 團隊用 2D 做,但特寫鏡頭需要更多細節。
- 42:39 範例:背景只是一張圖,沒有真正的地面,全是假的,特效疊在上面↳ 範例畫面的背景只是一張平面圖,根本沒有真的 3D 地面,整個場景都是假的,3D 特效就直接疊在這張圖上面。
- 43:12 特效用 geometry nodes 做,很簡單;靠材質、透明度和 holdout 做整合,開發一次之後就能通用↳ geometry nodes 是用節點拼出形狀和動態的工具,用它做特效很簡單。整合靠材質、透明度和 holdout(把某區挖空、露出後面的背景),開發一次就能到處套用。
- 43:44 打光的痛點:目前沒有 dynamic overrides,只能 hack;需要改數值、搬材質,又不想用對美術太複雜的階層式 override↳ 打光時常要改數值、換材質,又不想動到原始資產。Blender 沒有 dynamic overrides(可隨時靈活覆寫設定的機制),只好硬湊;一層套一層的覆寫對美術又太複雜。
- 43:44 解法:在 shader 裡用 custom attributes 做自訂系統,共有三層資訊↳ custom attribute 是自己加在物件或場景上的自訂欄位。他們在 shader(決定材質外觀的節點設定)裡讀取這些欄位,做出自己的覆寫系統,資訊分成三層。
- 44:14 第一層:shader node group 的預設輸入值,是場景最先讀到的值↳ node group 是把一堆節點打包成可重複使用的積木。第一層就是這個積木自己的預設輸入值,沒有人改的時候,場景讀到的就是它。
- 45:00 第二層:在 scene 層級加 custom attribute,一個地方就能覆寫所有資產的值↳ 第二層是在整個 scene(場景)上加 custom attribute。只要改這一個地方,場景裡所有用到這組材質的資產都會跟著變,不必一個一個改。
- 45:00 第三層:在單一物件加 custom attribute,再覆寫 scene 層級的覆寫↳ 第三層是在單一物件上加 custom attribute,它可以蓋過 scene 層的設定,專門處理「這個東西要特別不一樣」的情況。
- 45:32 在 key shot 打光時,只要在 scene 放幾個 custom attributes,整個 sequence 的每個 shot 都會讀到這些值↳ key shot 是一段戲裡最具代表性的關鍵鏡頭。在它的 scene 放幾個 custom attribute,同一個 sequence(一串連續鏡頭)裡每個 shot(單一鏡頭)都會讀到這些值。
- 45:32 這可用來改很多東西,甚至改一天中的時段;簡單範例是把 self-emission 調高一點↳ 這套系統能調的東西很多,甚至可以改一天中的時段感。最簡單的例子,是把 self-emission(材質自己發光的強度)稍微調高。
- 46:03 打光階段可藉此改所有需要物件的顏色,或改 collection 等物件群組;這是分組,不是 linking↳ 打光時可以一次改所有相關物件的顏色,或整個 collection(Blender 裡的物件分組)一起改。講者強調這只是分組,不是 linking(把東西彼此綁在一起的連結關係)。
- 46:03 講者寧願不要這套系統,直接有 dynamic overrides↳ 講者也說得很直接:這套系統是逼不得已才做的。如果 Blender 本身就有 dynamic overrides,他寧可不要自己維護這一套。
- 46:34 從其他軟體來的美術需要熟悉感,因此團隊開發了標準的 lighting node groups↳ 從其他 3D 軟體轉過來的打光美術,習慣某些現成工具。為了讓他們上手時有熟悉感,團隊先做了一組標準的打光用 node group。
- 46:34 講者希望這類東西成為 Blender assets;他們正在推動打光階段有更多 asset 思維,認為 pipeline 普遍缺這塊↳ Blender assets 是存進資產庫、拖進來就能重複用的現成素材。講者希望這類打光工具也變成 asset;他們正在推動打光階段多用 asset 的思維,認為 pipeline 普遍缺這塊。
- 47:07 範例節點之一是 light bouncing 的乘數;手動做要加 light path node 相乘再相減,所以需要預先做好的 asset↳ 例如一個調整光線反彈強度的乘數。手動做要加 light path node(能判斷光線走哪種路徑的節點),再相乘、相減,步驟很繁瑣,所以最好有做好的 asset 直接用。
- 47:39 decay(定義光照範圍)也是缺的;基本元件都有,但美術通常不會自己做,希望整合進 Blender↳ decay 是光的衰減,決定光能照多遠、範圍多大。Blender 裡做它的零件其實都有,但美術通常不會自己拼,講者希望官方直接內建。
- 48:12 願望一:light and shadow linking 能用名稱/路徑選取;現在是指向 data block 的 pointer,把燈搬到別的 shot 很痛苦↳ light and shadow linking 能指定燈只影響哪些物件。現在它用 pointer 直接指到某個 data block(Blender 內部的資料單位),燈搬到別的 shot 很痛苦;希望改用名稱或路徑選。
- 48:12 為了避開這個問題,團隊必須寫大量 Python↳ 為了繞過這個限制,團隊只好寫一大堆 Python(Blender 能用的程式腳本語言)來處理,等於花工程力氣去補軟體的缺口。
- 48:12 願望二:Alembic 和 USD 能交換 attributes↳ Alembic 和 USD 都是在不同軟體、不同工作室之間交換模型和動畫的通用檔案格式。講者希望它們也能順便帶上 attributes(附在模型上的自訂資料)。
- 48:44 現在和其他工作室合作時,得分開要多個 Alembic,例如一個放 custom color、一個放 velocity,很麻煩↳ 現在跟其他工作室合作,同一份資料得拆成好幾個 Alembic 檔,例如一個放自訂顏色、一個放 velocity(物體的速度資訊),管理起來很麻煩。
- 48:44 願望三:dynamic overrides,這樣就能刪掉自己寫的解法↳ 如果 Blender 有了 dynamic overrides,他們就能把自己寫的那套 custom attribute 覆寫系統整個刪掉,少維護一套東西。
- 48:44 Blender 已提供 sequence 層級打光(lighting at sequence level),團隊正在下一部片測試↳ Blender 已經提供 sequence 層級的打光,也就是以一整串鏡頭為單位來打光,團隊正在下一部片測試這個功能。
- 49:14 團隊正在 pipeline 開發新工作流:載入整個 sequence,但以 shot 群組為單位工作↳ 他們正在 pipeline 裡開發新的工作方式:一次載入整個 sequence,但實際工作時以一小群 shot 為單位處理。
- 49:14 畫面中很多媒體還缺,因為正在製作中:已有 layout,還沒做動畫↳ 示範畫面裡很多東西還空著,因為片子正在製作中:layout(鏡頭位置和構圖安排)已經排好,角色動畫還沒做。
- 49:53 打光時,例如 Antonio 可以拿一群 shot(叫做 "Family"),用類似方式一起打光、一起產出↳ 例如 Antonio 在打光時,可以把一群鏡頭(取名叫 "Family")拿來用類似的方式一起打光,最後也一起輸出成品。
- 49:53 以前這做得到,但需要每個 shot 一個 compositor;在 Pikkuli 使用的 4.2 版只能每個 scene 一個 compositor,很痛苦↳ compositor 是算圖後做合成、調色的工具。一起處理多個 shot 以前就辦得到,但要每個 shot 各有一個 compositor;Pikkuli 用的 4.2 版一個 scene 只能一個,很痛苦。
- 50:25 感謝 texture cache:講者認為它為買不起 $5,000 GPU 的中小團隊打開大門↳ texture cache 是按需要載入貼圖、節省顯示卡記憶體的機制。講者特別感謝它,認為它替買不起 $5,000 顯示卡(GPU)的中小團隊打開了大門。
- 50:25 對大型團隊也有幫助;他們全部用 GPU 算圖↳ 不只小團隊受惠,大型團隊也用得到。他們自己就是全部用 GPU 算圖,所以這個功能對他們很實際。
- 50:57 過去他們用了很多技巧:盡量保持 procedural,某些情況甚至大量使用 simplify 到 1K↳ 以前為了省資源用了很多招:盡量保持 procedural(用節點規則即時產生紋理,而不是用大張貼圖),有時甚至大量用 simplify 把貼圖限制到 1K 解析度。
- 50:57 講者表示 texture cache 讓他安心不少↳ 講者說有了 texture cache 之後安心很多,不必再靠那些犧牲畫質的招數硬撐。
- 50:57 b-water 持續招募優秀 Blender 美術,最近幾週特別在找 riggers,可透過 LinkedIn 聯絡↳ b-water 這間工作室一直在找厲害的 Blender 美術,最近幾週特別缺 rigger(幫角色裝骨架和控制器、讓它能動的人),有興趣可以透過 LinkedIn 聯絡。
📘 術語
Ray Portal(光線傳送門節點):只有 position 和 direction 兩個輸入,告訴光線從哪裡看、往哪看
normal(法線):字幕提到 game engine 做法是取底下表面的 normal
noise(雜訊):加到方向向量或球體上,用來產生破碎感與漸層
matte painting(數位繪景):字幕說雲原本一般會用它做,但他們改用 3D 做法
lookdev(外觀開發):字幕把它和 3D 特效並列,是片中的製作環節
geometry nodes(幾何節點):用來做片中的小型 3D 特效,講者說很簡單
holdout(遮擋):和材質、透明度一起,用來讓特效與 2D 背景整合
dynamic overrides(動態覆寫):Blender 目前沒有,講者只好 hack,自己做覆寫系統
custom attribute(自訂屬性):加在 scene 或物件上,覆寫 shader 的數值
node group(節點群組):shader 的預設輸入值是場景最先讀到的值
self-emission(自發光):範例中用 custom attribute 把它調高
linking(連結):字幕強調他們的系統是分組,不是 linking
light path node(光路徑節點):手動做 light bouncing 乘數時要加它,再相乘、相減
decay(衰減):用來定義光照範圍,Blender 內建缺這個
light and shadow linking(燈光與陰影連結):目前是指向 data block 的 pointer,搬到別的 shot 很麻煩
data block(資料區塊):light and shadow linking 目前指向的對象
Alembic(Alembic 格式):和其他工作室交換用;現在屬性要分成多個檔案
USD(USD 格式):講者希望能在 USD 中交換 attributes
compositor(合成器):4.2 版只能每個 scene 一個,他們需要每個 shot 一個
texture cache(貼圖快取):講者認為能讓買不起 $5,000 GPU 的團隊受惠
simplify(簡化):他們曾在某些情況大量使用到 1K
procedural(程序化):他們盡量保持許多東西 procedural,作為省資源的技巧
rigger(綁定師):b-water 最近特別在招募的職位
normal(法線):字幕提到 game engine 做法是取底下表面的 normal
noise(雜訊):加到方向向量或球體上,用來產生破碎感與漸層
matte painting(數位繪景):字幕說雲原本一般會用它做,但他們改用 3D 做法
lookdev(外觀開發):字幕把它和 3D 特效並列,是片中的製作環節
geometry nodes(幾何節點):用來做片中的小型 3D 特效,講者說很簡單
holdout(遮擋):和材質、透明度一起,用來讓特效與 2D 背景整合
dynamic overrides(動態覆寫):Blender 目前沒有,講者只好 hack,自己做覆寫系統
custom attribute(自訂屬性):加在 scene 或物件上,覆寫 shader 的數值
node group(節點群組):shader 的預設輸入值是場景最先讀到的值
self-emission(自發光):範例中用 custom attribute 把它調高
linking(連結):字幕強調他們的系統是分組,不是 linking
light path node(光路徑節點):手動做 light bouncing 乘數時要加它,再相乘、相減
decay(衰減):用來定義光照範圍,Blender 內建缺這個
light and shadow linking(燈光與陰影連結):目前是指向 data block 的 pointer,搬到別的 shot 很麻煩
data block(資料區塊):light and shadow linking 目前指向的對象
Alembic(Alembic 格式):和其他工作室交換用;現在屬性要分成多個檔案
USD(USD 格式):講者希望能在 USD 中交換 attributes
compositor(合成器):4.2 版只能每個 scene 一個,他們需要每個 shot 一個
texture cache(貼圖快取):講者認為能讓買不起 $5,000 GPU 的團隊受惠
simplify(簡化):他們曾在某些情況大量使用到 1K
procedural(程序化):他們盡量保持許多東西 procedural,作為省資源的技巧
rigger(綁定師):b-water 最近特別在招募的職位
✏️ 小考一題
講者說 Ray Portal 節點有哪兩個輸入?
A. normal 和 depthB. color 和 strengthC. position 和 normalD. position 和 direction看答案
答案:D。[40:32] 字幕說 "You just have like two inputs: position and direction."
💛 覺得有幫助?支持一下


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