在嘗試做一個泡泡的shader,現在已經初步做好alpha,下一步做shading,泡泡的形态全部以一種procedure的方式實作,給一個粒子或者點雲,就可以渲染出一堆泡泡,泡泡的半徑用pscale指定。這樣粒子用flip什麼的動起來的時候,就能看到一堆泡泡在流動了。
目前的實作是純節點連出來的,不得不說節點雖然連的快但是實在蛋疼…… 稍微複雜點的不但要注意怎麼連,還特娘的要注意在2D空間怎麼擺放,而代碼堆放的複雜度基本是1D的,一塊一塊順着寫就行了。
原理還算簡單,把泡泡的膜分為兩部分,一種是泡泡和泡泡之間的隔膜,是平面,一種是泡泡和外界之間的薄膜,是球形的。
平面的中間隔膜,可以根據ray的目前sample P和下一step之後的P判斷兩個位置最近的點(點雲或者粒子)是不是同一個,如果是同一個就處在同一個泡泡的空間中,就沒有隔膜。如果是兩個不同的點,就說明這step之間穿過了這兩個點之間的隔膜,通過求兩點之間的中間平分的平面得到隔膜的shading。法線也好求,Normalize(近點-遠點)。
和外界之間的薄膜,可以對ray目前和sample P和下一step之後的P和最近的點<這個點的pscale做個xor,結果為true則穿過了薄膜,位置就近似在pscale*normalize(p-p0)+p0,法線normalize(p-p0)。
目前用fresnel做的alpha。shading可以用各種specular model來做了。
等看看能不能用這方法做個啤酒泡沫。