如何在 Blender 5.0 中做散佈(甜甜圈第 7 集)(第 2/3 段)


🏦 台灣Pay 銀行轉帳 💙 PayPal
用 Weight Paint 限定糖粒範圍、用 Poisson Disk 減少穿插,並帶出上色問題
- 12:14 散佈功能現在直接內建在 Blender,由 Blender Institute 做好,大家免費使用。創作者不必為了撒糖粒去碰數學。
- 18:42 Poisson Disk 有一個 minimum distance 設定:每個點周圍加一個圓,數值越大圓越大。兩個圓碰撞時,其中一個點會被移除。
- 24:28 另一個缺點是很難控制顏色,例如沒辦法控制藍色的有多少顆。
💡 你可以怎麼用:想把東西只撒在模型某一區時,可以照這個順序做:先把權重全部歸零,勾 Front Faces Only 只塗要的區域,再接到 distribution mask(不是 density)。遇到穿插,就把 Poisson Disk 的 minimum distance 設小(約 0.005)、調高 density maximum,再多換幾個 Seed,挑穿插最少的那組。
看全部 49 條重點
🧑🏫 這段接著甜甜圈教學,教你控制糖粒只撒在甜甜圈上方,並盡量減少糖粒互相插在一起。作者也解釋每個設定背後的道理,以及怎麼在「不穿插」和「看起來自然」之間取捨。最後點出直接上色會遇到的問題,接到下一段。
- 12:14 散佈功能現在直接內建在 Blender,由 Blender Institute 做好,大家免費使用。創作者不必為了撒糖粒去碰數學。↳ 「散佈」(scatter)是把大量小東西自動撒在物體表面。這功能現在由 Blender 官方開發單位 Blender Institute 內建,免費使用。你只要調設定,不必自己處理數學。
- 12:14 前三版甜甜圈教學都得自己處理散佈的數學,結果被抱怨太技術。↳ 作者前三版甜甜圈教學沒有現成工具,只能帶觀眾自己組散佈的計算,結果被抱怨太技術。這次內建之後,門檻低很多。
- 12:45 目前糖粒撒滿整個 icing,底部也有。選 icing 後按 forward slash(/)進入隔離檢視就看得到。目標是只撒在甜甜圈上方。↳ 現在糖粒連甜甜圈底部都有,真實的甜甜圈不會這樣。icing 是糖霜那層物件。選它按「/」進入隔離檢視,畫面只顯示這個物件,方便檢查背面。
- 12:45 做法是在散佈設定裡引用一個屬性,這裡要用的是 Weight Painting。↳ 屬性(attribute)是附在模型上的一組數值。做法是讓散佈設定讀這個屬性,決定哪裡可以長糖粒。這裡用 Weight Painting(用筆刷在模型上塗數值)來產生這個屬性。
- 13:15 在畫面上方把 Object Mode 改成 Weight Paint Mode。可以先關掉 sprinkles,只看 icing。↳ Blender 有不同的工作模式,Object Mode 是平常移動物件用的。改成 Weight Paint Mode 才能用筆刷塗數值。先把糖粒(sprinkles)隱藏,畫面比較乾淨。
- 13:15 在 mesh 上拖曳塗抹會出現類似熱圖的顏色:紅色處會有糖粒,黑色處沒有糖粒。↳ mesh 是模型表面的網格,由點、線、面組成。在上面拖筆刷,會出現像熱圖(heat map,用顏色表示數值高低)的顏色:紅色處之後會有糖粒,黑色處不會。
- 13:15 Weight Paint 其實是在 mesh 上加一個屬性:紅色值為 1,黑色值為 0,中間是介於兩者的值。Blender 其他部分可以引用這些值。↳ 顏色只是讓你看得見數值:紅是 1,黑是 0,中間的漸層介於 0 和 1 之間。這些數字存在模型裡,其他功能可以拿來用,散佈就是靠它決定哪裡有糖粒。
- 13:47 在這個模式下塗抹,可能會不小心穿透 mesh 塗到背面。用 / 隔離檢視就能發現。↳ 塗的時候筆刷可能穿過模型,連背面也塗到,從正面看不出來。塗完用「/」隔離檢視,把模型轉一圈檢查,才抓得到這種錯。
- 14:20 筆刷要勾選 Front Faces Only,否則甜甜圈底下還是會有糖粒。作者說預設沒開,是因為做 rigging 的人常需要這個行為。↳ Front Faces Only 是筆刷選項,勾了只會塗到面向你的那一面。不勾就會塗穿,底部還是有糖粒。預設沒開,是因為做 rigging(幫角色裝骨架讓它能動)時常需要塗穿。
- 14:20 更快的做法:到 Data 分頁,進 Edit Mode(全選),把 weight 設為 0 再按 Assign。回到 Weight Paint Mode 後整個會變黑。↳ 不想慢慢塗的話:到 Data 分頁(放模型資料的設定頁),進 Edit Mode(編輯點線面的模式)全選,weight 填 0 再按 Assign(套用)。整個模型就歸零變黑。
- 14:52 這個 vertex group 就是 weight paint。可以全選後整個設成 1,也可以整個設成 0。↳ Data 分頁裡的 vertex group(頂點群組,替每個點記一個數值)就是你塗的 weight paint。用上一步的方法,可以一次把全部設成 1,或全部設成 0。
- 14:52 接著在想放糖粒的地方塗上去。也可以調低筆刷的 weight,讓邊緣的糖粒少一些。↳ 全部歸零之後,只在甜甜圈上方想要有糖粒的地方塗。筆刷的 weight 調低一點,塗出來的值比較小,邊緣糖粒就比較稀,過渡較自然。
- 15:26 另一種方式是 weight 設 1、把 strength 調低,塗的時候效果會逐漸累積。↳ 另一種塗法:weight 維持 1,把 strength(筆刷力道)調低。同一處要多刷幾次數值才會慢慢升上去,比較好控制輕重。
- 15:26 分布不必完美。沒人會稱讚糖粒分布得好,但看起來假的話會被注意到。↳ 分布不用追求完美。觀眾不會特別稱讚糖粒撒得好,但只要看起來不自然就會察覺。目標是「不出戲」,不是「驚豔」。
- 15:26 作者舉例:他在 SIGGRAPH 看了 Wētā 講 Planet of the Apes 最新一集幕後的演講。↳ SIGGRAPH 是電腦圖學領域的大型年度研討會,Wētā 是做電影視覺特效的公司。作者在會上聽了他們分享《猩球崛起》最新一集的製作幕後。
- 16:00 那部片裡有急流中的猴子,水和植物被風吹動的程度都要剛好,藝術家為每個細節拼命。↳ 片中有猿猴在急流裡的畫面。水怎麼流、植物被風吹動多少,都要剛剛好。特效藝術家在這些觀眾不會特別注意的細節上下了很大功夫。
- 16:00 觀眾不會知道你具體做了什麼,但會知道畫面看起來假不假。↳ 觀眾說不出你調了哪些參數,但會直覺感到「怪怪的」。細節做對,是為了讓人不覺得假。撒糖粒也是同一個道理。
- 16:31 讓糖粒只出現在塗過的地方:在 distribution mask 點那個像 spreadsheet 的小圖示,下拉選單選 Group。↳ distribution mask(分布遮罩)是散佈設定裡決定「哪裡可以長」的欄位。點它旁邊像試算表的小圖示,下拉選 Group,就能接上剛剛塗好的範圍。
- 16:31 Group 就是 Data 分頁裡那個 vertex group 的名稱,可以改名,例如 sprinkle distribution。↳ 這裡的 Group 指的就是 Data 分頁裡那個 vertex group 的名稱。建議改成好懂的名字,例如 sprinkle distribution,之後物件多了也找得到。
- 17:03 注意不要接到 density,它也有同樣的圖示。接到 density 會把原本 900 的密度值覆蓋成 0–1,畫面上幾乎看不到糖粒。↳ density(密度)欄位旁有一模一樣的圖示,別點錯。接到 density 會把原本 900 的密度直接換成 0 到 1,密度變得極低,畫面幾乎看不到糖粒。
- 17:03 distribution mask 則會保留 900 的密度,再乘上 0–1 的值。所以要用 distribution mask,不是 density。↳ distribution mask 是用「乘」的:保留 900 的密度,再乘上你塗的 0 到 1。紅色處維持 900,黑色處變成 0。所以要接遮罩,不是接 density。
- 17:34 常見問題是怎麼讓糖粒不互相穿插。沒有簡單答案,這件事本身就不容易做到。↳ 很多人問怎麼讓糖粒不互相插在一起。作者直說沒有簡單解法,因為要讓大量隨機物件完全不碰到,本來就是很難的問題。
- 17:34 最接近的概念是 circle packing:用演算法把不同半徑的圓盡量排在一起。但它很複雜,像模擬一樣,這裡沒辦法輕鬆做到。↳ circle packing(圓形堆疊)是用演算法,把大小不同的圓盡量緊密排好又不重疊。它很複雜,運算起來像在跑模擬,這裡沒辦法輕鬆做到。
- 18:07 目前最接近的工具是 distribution method 裡的 Poisson Disk。↳ 目前最接近的工具,是 distribution method(分布方式)裡的 Poisson Disk。它會讓點與點之間保持距離,減少糖粒穿插。
- 18:07 這個選項只有用 density method 才看得到,用 amount 時看不到。amount 可以指定確切的糖粒數量。↳ 數量方式要選 density method,才會出現 Poisson Disk。另一種 amount 是直接指定要撒幾顆,選它就看不到這個選項。
- 18:07 density 則是依物體相對於場景的尺度來決定。↳ density 不是指定固定顆數,而是依物體在場景中的尺寸比例,來決定要撒多少。
- 18:42 Poisson Disk 有一個 minimum distance 設定:每個點周圍加一個圓,數值越大圓越大。兩個圓碰撞時,其中一個點會被移除。↳ minimum distance(最小距離)決定每個點周圍那個看不見的圓有多大。數值越大圓越大。兩個圓一碰到就刪掉其中一點,所以點會變少、變分散。
- 19:12 Poisson Disk 是以點為基準,不看實際幾何形狀。它不知道糖粒是長條形,只當成圓,所以仍會穿插,只是會少一些。↳ Poisson Disk 只看「點」,不看形狀。糖粒是長條形,它卻當成圓來算,長條的兩端還是可能插到別顆。所以穿插會變少,但不會消失。
- 19:12 把 minimum distance 調到 .01 左右,糖粒會突然少很多。↳ minimum distance 調到大約 0.01 時,糖粒會突然少很多。原因是每個圓變大,互相碰撞被刪掉的點也變多了。
- 19:12 這時要提高 density maximum,但數量會封頂,因為那個空間塞不下更多圓。↳ 這時會想調高 density maximum(密度上限)來補數量,但加到某個程度就不再增加。因為圓這麼大,表面只塞得下這麼多個。
- 19:12 要一起調整 density maximum 和 minimum distance 這兩個值,才能得到好看的結果。↳ 所以兩個值要一起調:距離決定間隔,密度上限決定想撒多少。只調其中一個,不是太稀就是太擠。
- 19:46 作者把 minimum distance 設得很小,大約 .005,再提高 density maximum 直到填滿。調整數值時他按住 Shift。↳ 作者的設定是 minimum distance 很小,大約 0.005,再把 density maximum 加到糖粒填滿為止。他拖數值時按住 Shift,讓數字變化更細,方便微調。
- 20:19 把距離一直調大雖然能消除穿插,但圓太大會互相刪除,看起來像用鑷子精心擺放,失去隨機感。↳ 距離一直加大,穿插確實會消失,但糖粒會被刪得很稀、間距又太平均,看起來像有人用鑷子一顆顆排好,不像隨手撒的。
- 20:50 作者的做法是把 minimum distance 盡量調低,低到剛好還不會顯得太刻意(manicured)的程度。↳ 作者的取捨是:minimum distance 盡量小,小到剛好還不會顯得太刻意整齊(manicured)。留一點穿插,換來自然感。
- 20:50 接著改 Seed 值。Seed 名稱取得不太好,其實就是隨機數,在程序化工作流中很常見。↳ Seed(種子值)其實就是隨機數的起點,換數字就換一種隨機排法。在 procedural workflow(用參數和規則自動生成內容的做法)裡很常見。
- 21:21 Seed 的數字沒有好壞之分,1 不會比 1,000 或 10,000 好,只是產生不同變化。可以多試幾次,找穿插最少的分布。↳ Seed 的數字大小沒有意義,1 不會比 10000 好,只是排法不同。可以多換幾個數字,挑一個穿插最少、看起來最順眼的。
- 21:21 糖粒在甜甜圈上不一定平躺,稍微傾斜也有助減少穿插。↳ 真的糖粒撒在甜甜圈上,不會每顆都平貼表面,有點斜才像真的。讓糖粒稍微傾斜,長條之間也比較容易錯開,減少穿插。
- 21:52 在 randomize 把 x 稍微調高。不要太多,否則看起來會怪。↳ randomize(隨機化)讓每顆糖粒有些差異。把 x 那欄稍微調高,糖粒會各自斜一點。調太多就會東倒西歪,看起來很怪。
- 22:24 糖粒生成在 icing 上的位置取決於 mesh 的 origin point,可以想成物體的質心(雖然這裡沒用物理),一般應該在物體中心。↳ origin point(原點)是物體的基準點,決定糖粒「種」在表面的哪個位置。可以想成物體的重心(這裡沒用到物理),正常應該在糖粒正中間。
- 22:24 如果 origin 偏在一邊,整顆糖粒會落在一側,Poisson Disk 的圓就可能造成不該有的穿插。↳ 如果原點偏在糖粒一端,整顆糖粒會往一側長出去。Poisson Disk 的圓對不上糖粒本體,就可能出現本來不該有的穿插。
- 22:24 修正方式:全選糖粒,右鍵選 Set Origin → Origin to Geometry,讓 origin 回到糖粒正中心,穿插會稍微減少。↳ 修正方式:全選糖粒,按右鍵選 Set Origin → Origin to Geometry(把原點移到形狀中心)。原點回到糖粒正中間後,穿插會再少一些。
- 22:57 另一個替代做法是物理引擎。Blender 有 rigid body 物理引擎,但不太好也很慢,是官方想用更多資金重新改寫的部分。↳ 另一條路是用物理模擬,讓電腦計算碰撞。Blender 有 rigid body(剛體,碰撞時不會變形的物體)物理引擎,但作者說它不太好又慢,官方想用更多資金重寫。
- 22:57 作者說如果更多人捐款,Blender 就能有好的物理引擎。↳ 作者順帶呼籲:Blender 是免費軟體,開發經費很大部分靠捐款。捐的人多,官方才有資源做出好用的物理引擎。
- 23:28 還有一種做法:先 realize instances 讓糖粒變成實際物件,再 apply,然後手動移動每一顆。↳ 還有一招:先 realize instances(把散佈出來的複本轉成真正獨立的物件),再 apply(套用、定案),就能手動一顆顆挪開重疊的糖粒。
- 23:28 作者不推薦這種做法,覺得 overkill、沒必要,而且對下一步的隨機顏色沒幫助。↳ 作者不推薦這招,覺得是殺雞用牛刀(overkill)、沒必要。而且糖粒變成固定物件後,對下一步的隨機上色沒有幫助。
- 23:28 下一步是上色,讓糖粒看起來不要像 Tic Tacs。↳ 下一步是上色。現在糖粒顏色單調,看起來像 Tic Tac 那種薄荷糖,要讓它們變成繽紛的彩色糖粒。
- 23:58 簡單做法是直接給各糖粒材質,挑顏色,例如紫色、黃色。這樣可行也很快。↳ 最簡單的方法是幫每顆糖粒模型直接設材質,挑顏色,例如紫色、黃色。這樣做得出來,而且很快。
- 23:58 缺點是顏色會永遠綁在同一個形狀上,例如綠色的永遠是那個彎曲的,眼睛會察覺這種規律。↳ 缺點是顏色和形狀綁死,例如綠色的永遠是那顆彎的。撒了幾百顆之後,眼睛會察覺這種固定搭配,看起來就假。
- 24:28 另一個缺點是很難控制顏色,例如沒辦法控制藍色的有多少顆。↳ 另一個缺點是比例難控制。例如想讓藍色少一點,沒辦法直接調「藍色有幾顆」。這就是需要更好上色方法的原因。
📘 術語
Weight Paint Mode / Weight Painting(權重繪製模式):在 mesh 上塗出類似熱圖的值:紅為 1、黑為 0,存在 mesh 裡供其他功能引用
attribute(屬性):Weight Paint 會在 mesh 加上一個屬性,Blender 其他部分可以引用
heat map(熱圖):塗抹時出現的顏色分布,紅色處有糖粒,黑色處沒有
Front Faces Only(僅正面):筆刷選項,不勾的話會塗穿 mesh,底部仍會有糖粒
vertex group(頂點群組):在 Data 分頁中,就是 weight paint 本身,可以改名
Edit Mode(編輯模式):可在這個模式全選後設定 weight 並按 Assign,一次把整體設成 0 或 1
Assign(指定):把目前設定的 weight 值套用到選取的部分
distribution mask(分布遮罩):保留原本的密度(900),再乘上 0–1 的值,用來限定糖粒範圍
density(密度):若在這裡接上 weight paint,會把 900 覆蓋成 0–1,幾乎看不到糖粒
circle packing(圓形堆疊):用演算法讓不同半徑的圓盡量排在一起,很複雜,像模擬
Poisson Disk(Poisson Disk 分布法):每個點周圍加一個圓,圓相撞就移除其中一點,能減少穿插
density method / amount(密度模式/數量模式):amount 指定確切數量;density 依物體相對場景的尺度決定。只有 density 會出現 Poisson Disk
minimum distance(最小距離):Poisson Disk 中每點周圍圓的大小,數值越大,被移除的點越多
density maximum(最大密度):要和 minimum distance 一起調整。數量會封頂,因為塞不下更多圓
Seed(種子值):就是隨機數,用來產生不同變化,數字大小沒有好壞
procedural workflow(程序化工作流):Seed 這類設定在這種工作流中很常見
randomize(隨機化):稍微調高 x,讓糖粒略微傾斜,有助減少穿插
origin point(原點):糖粒生成的位置。可想成物體的質心,一般應在物體中心
Set Origin → Origin to Geometry(設定原點至幾何中心):右鍵選單功能,把 origin 移到糖粒正中心,讓穿插稍微減少
rigid body physics engine(剛體物理引擎):Blender 內建的物理引擎,作者說不太好、很慢,官方想用更多資金改寫
realize instances(實體化實例):先把散佈的實例變成實際物件,才能 apply 並手動移動
attribute(屬性):Weight Paint 會在 mesh 加上一個屬性,Blender 其他部分可以引用
heat map(熱圖):塗抹時出現的顏色分布,紅色處有糖粒,黑色處沒有
Front Faces Only(僅正面):筆刷選項,不勾的話會塗穿 mesh,底部仍會有糖粒
vertex group(頂點群組):在 Data 分頁中,就是 weight paint 本身,可以改名
Edit Mode(編輯模式):可在這個模式全選後設定 weight 並按 Assign,一次把整體設成 0 或 1
Assign(指定):把目前設定的 weight 值套用到選取的部分
distribution mask(分布遮罩):保留原本的密度(900),再乘上 0–1 的值,用來限定糖粒範圍
density(密度):若在這裡接上 weight paint,會把 900 覆蓋成 0–1,幾乎看不到糖粒
circle packing(圓形堆疊):用演算法讓不同半徑的圓盡量排在一起,很複雜,像模擬
Poisson Disk(Poisson Disk 分布法):每個點周圍加一個圓,圓相撞就移除其中一點,能減少穿插
density method / amount(密度模式/數量模式):amount 指定確切數量;density 依物體相對場景的尺度決定。只有 density 會出現 Poisson Disk
minimum distance(最小距離):Poisson Disk 中每點周圍圓的大小,數值越大,被移除的點越多
density maximum(最大密度):要和 minimum distance 一起調整。數量會封頂,因為塞不下更多圓
Seed(種子值):就是隨機數,用來產生不同變化,數字大小沒有好壞
procedural workflow(程序化工作流):Seed 這類設定在這種工作流中很常見
randomize(隨機化):稍微調高 x,讓糖粒略微傾斜,有助減少穿插
origin point(原點):糖粒生成的位置。可想成物體的質心,一般應在物體中心
Set Origin → Origin to Geometry(設定原點至幾何中心):右鍵選單功能,把 origin 移到糖粒正中心,讓穿插稍微減少
rigid body physics engine(剛體物理引擎):Blender 內建的物理引擎,作者說不太好、很慢,官方想用更多資金改寫
realize instances(實體化實例):先把散佈的實例變成實際物件,才能 apply 並手動移動
✏️ 小考一題
把 weight paint 的 vertex group 接到 density,而不是 distribution mask,會發生什麼事?
A. 密度維持 900,只在紅色區域出現糖粒,效果和 distribution mask 一樣B. 原本 900 的密度被覆蓋成 0–1 的值,畫面上幾乎看不到糖粒C. 糖粒數量變成原本的兩倍,而且會出現在甜甜圈底部D. Poisson Disk 選項會消失,只能改用 amount 模式看答案
答案:B。[17:03] 字幕說:接到 density 會把原本 900 的密度值覆蓋成 0–1,所以幾乎看不到糖粒;distribution mask 則保留 900 再乘上 0–1。
💛 覺得有幫助?支持一下


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