今年大部分閒餘時間都在學網頁前後端,本想說因此會疏忽了特效這塊,但卻在做案子時發現,整體流程規劃清晰了不少,遇到修改也因為架購完整而不讓人煩躁。
這樣的情況有文章說到,有興趣的人可以看看這篇。
回歸正題,在 Houdini 有 foreach block
之後大大加強了控制流程的方便性,其實就取代了 copy stamp
大部分的功能,foreach block
有很多優於 copy stamp
的地方,在大部分的情況應先考慮使用。
兩者最大的差別莫過於效能的部分,下面來建立一個簡單的實例。
範例
在球上 scatter
出100000個點,並要讓他們去隨機 instance 圖左三種物件。
隨機的屬性簡單設在 attribute wrangle
中:
i@type = (int)rint(rand(i@ptnum) * 2);
接下來就是 copy stamp
跟 foreach
針對這個架構去 instance 的方法。
copy stamp
這是典型的 stamp 設置,在 copy stamp
節點上開啟 Stamp Inputs
,加入方才新增的 type 屬性。
然後在 switch
上加上:
stamp('../copy1', 'type', 0)
來切換不同模型的替代。
foreach
這是我現在常用的方法,foreach
的 Piece Attribute
填上 type,迭代三個不同的 type 數值 0~2
。
switch 的部分則是用:
point('../foreach_begin1/', 0, 'type', 0)
去取得 type 的資訊,這是比較偷懶的方法,比較正確的方式是生成 metadata
節點來取得資訊。
最後用 copy to points
來複製。
比較與結論
可以看到兩者運算時間的差別。
主要在於 foreach
的方式只需要輪替三次去計算,而不是每顆都要去尋找stamp資訊。
現在還是比較單純的結構,在複雜的情況更顯得兩者之間效能的差距。
除了效能之外,整體的可維護性也是後者較為方便。
stamp有太多需要去照顧的欄位散落在各處,尤其 copy stamp
節點本身下面的 Variable
跟 Value
的欄位千萬別去碰,務必在 template points 階段就把數值先設定好。
如果是跟位移旋轉有關的更應該直接設在相關屬性上,詳見這篇。
下一篇會再針對 foreach
做延伸的範例。