Houdini 製作程序性剝皮效果

前幾天看了一段 breakdown ,看到影片裡18秒處的效果覺得自己應該做得到,就趁工作閒餘試著做了出來,結果一個專案同事看到很喜歡想套到他的專案裡,問題是他想成形的是一個LOGO,而不是像那段影片只是一個簡單重複的圓形,完全不同邏輯的東西,不過這幾天還是硬著頭皮想出了一套製作方法。

下面簡單說明一下整個節點流程,效果就如上面影片,一切的目標方向是以未來還可以套別的模型,完全程序性來製作。


LOGO模型是同事用 3ds max 做的,因為模型最後上了 symmetry ,所以中間有一段 loop edge ,就直接抽出這段 edge ,來當產生點。


接著要找出每個產生點到末端的位置,末端的資訊很重要,影響之後所有的流程。


找到每個產生點的末端後,開始製作每個產生點沿著模型到末端的路徑,這邊是利用 cookie(crease) 的方式產生切線,以 產生點 -> 末端 的向量來旋轉 cookie 的平面,得到切線後,再去判斷切線要留著的段落,讓最後只剩餘產生點到末端的curve。


從上面步驟取得每條導引線後,每條導引線會再複製一份,並取隔壁條導引線的 attribute 覆蓋,這是為了之後要拿兩兩一組導引線 skin 包面。

在這之前要先做導引線的動態,旋轉的方式是以每個點為基準來判斷,每個點的 normal 跟 up 加上總變數 時間點 的影響,依照從屬跟 ramp 的調節,設定出最後旋轉完的位置。


最後是包面,以兩兩一組的導引線做處理,由於導引線的 point 數不一定會一樣,要一樣的 point 數才能用 rails 包面,所以做了一個在不影響外觀的情況下讓兩條導引線補成相同 point 數的運算式。

包面完成後,最後的外觀樣子由於以上流程的種種因素,跟原本的模型一定會有非常細微的差距,這邊再以其中流程產生的豐富資訊,去判斷漸進貼齊原本模型的表面。

最後將其每個點的動態資訊寫在 UV 上,到時匯給 max 可以在模型上套一個 gradient map 貼圖去取得 UV 資訊,再以其作 matte 給 2D 做更多細節修正。