Houdini Grain 學習筆記

2022-07-24 17:00:28 字數 1616 閱讀 8840

// grain 使用pbd演算法,說白了就是先更新位置,再更新速度,houddini masterclass grain

中的案例有一些簡單的實現(最基本的原理)

比如跟新位置(這裡為了簡化jeff 把粒子的pscale大小都看成一樣),如果粒子有重合, 直接更改位置

int n = pcfind(0, '

p', @p, @pscale*2, 100

);vector change = 0

;float weight = 0

;foreach (int

npt; n)

}@p += change / weight;

如果考慮質量的話,大概的演算法:

int n = pcfind(0, '

p', @p, @pscale*2, 100

);vector change = 0

;float weight = 0

;foreach (int

npt; n)

}@p += change / weight;

然後再根據位置的變化更新速度

if

(i@has_pprevious)

@v = (@p - v@pprevious) / @timeinc;

注意pop grain 節點會在粒子上新增乙個屬性 ispbd 值為1 , 這樣pop  solver 就 不會更新p (位置) ,只在pop grain 節點中更新//  grain 中mass為0時的 特殊意義如果粒子的屬性mass值為0(特殊值),代表的意義是粒子質量無窮大,這樣根據上面的算式

float ratio = omass / (@mass +omass);

change += normalize(@p-op) * (@pscale*2-d) * ratio;

omass 是搜到的附近的粒子的質量,@mass 是粒子自身的質量,@mass無窮大, ratio無窮接近0在試驗中,在grainsource節點後選中上面的粒子,建組zero_mass然後在popnet 中,popwrangle,

第一句 float @mass = 1 必不可少啊(bug ), 他的作用是為所有的粒子宣告建立乙個屬性,初始值為1,看起來只給zero_mass組裡面的操作,實際不是:(

下面一句才是只是對zero_mass組裡的粒子操作,mass值為0

這樣,上面的粒子靜止,下面的粒子由於重力散開, 圖為結算第一幀和第14幀對比

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...

BroadcastReceiver學習筆記

需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...

CDISC SDTM SE domain 學習筆記

整理翻譯自 sdtm ig 3.2 www.cdisc.org sdtm se subject elements 鞏固每個subject的epochs和elements的起止時間點.se對於有多個 時期的試驗有著重要的用處 如crossover試驗 se包含乙個subject從乙個element進入...