將 Particle Instance Object 轉換成 Cloth Object

這邊要做的是,先產生承繼smoke動態的particle,再將particle取代成紙片,然後在紙片既有動態基礎上加上cloth模擬。

所遇到的困難是,particle不是第一格就全部出現,而是陸續出現,怎麼在Cloth DOP模擬裡取得所有紙片以及其target動態。

目前研究出的方法還有幾個限制:Particle不能被刪掉、一個frame只能有一個Particle產生。


創建一個DOP,製作advect by volume的Particle讓之後的紙片可以Copy其動態。

記得Particle不能中途刪掉,要保存到最後。


創建一個SOP,製作紙片並 Copy Particle的資訊,Copy節點的”Use Template Point Attributes”要勾起來去繼承Particle的屬性。

接下來要分成兩支線製作,分別要餵給衣物模擬的Initial Geometry跟Target Geometry

Initial Geometry:這是要讓Cloth產生物件的節點,所以只要Particle產生的那格有物件就好,加一個delete,內容是當”has pprevious”大於0的時候就刪掉。

Target Geometry:這是要讓Cloth讀取物件動態的節點,這邊要先把每個物件分開,等等才能讓每個紙片各別取得自己的動態。方法是在copy節點的Attribute tab裡的”To Primitive”加上id,並用Partition以Primitives的$ID來分group,接著要Extract出每個group的SOP,這裡有網友寫好的Shelf可以快速做到這件事情。


創建一個DOP模擬衣物,在Cloth Object需要一些設定去讓剛剛製作的SOP可以正常模擬。

先是設定Creation tab,”Creation Frame”要改成$F,讓模擬每格都會偵測SOP的物件。

這樣會造成的問題是,就算某格沒有物件,他依然會創建一個空白的DynamicOBJ,打亂等等要用來讀取Target的$OBJID。

所以在下面的”Number of Objects”中去做調整,當這格SOP的Initial Object裡沒有東西時,就設成0,不要產生物件。這邊簡單的使用npoints判別。

接下來在Geometry tab裡的”Initial Geometry”指定剛剛用好的SOP,而”Target Geometry”指定為剛剛用shelf產生的group,而各自object辨別方式就是在group的最後數字編號改成$OBJID,即完成。

整個方法就是圍繞在$OBJID和group編號要一致的基礎上,但因此沒辦法同一格產生兩個Particle,因為對Particle DOP來說是產生兩個PID,對Cloth DOP來說是產生同一個OBJID,就無法對應。Particle不能刪掉也是如此。這方面還要再繼續研究解決。

目前的方向是不使用OBJID,而是取自己geometry層裡的attribute去調整看看。