天天看點

海洋泡沫結點圖完整分析 海洋泡沫結點圖完整分析

海洋泡沫結點圖完整分析

  1. 需要資源:

1*WhiteCap貼圖

此貼圖制作方法參考前面檔案….

可以直接從RealFlow下載下傳,也可以使用下面這圖(右擊另存)

  1. 場景設定:

主要思路:建立一個RealWave然後還有兩個Container發射器,一個是用來存儲生成的泡沫粒子,另一個用來暫時存儲粒子。體積場是為了防止粒子飛的很遠。年齡場關聯到最終的需要的泡沫發射器,這是為了可以讓泡沫粒子更真實一點,不需要一直存在。這個場現在設定是(Life 20,Variation 10)可以根據自己情況調整。

  1. 需要建立:

2*Container(發射器)

1*RealWave

1*K_Age(年齡輔助器)

1*K_Volume(殺死場)

1*Plane(平面,可以不要)

詳細參考下圖:

  1. RelationShip視窗:

    隻要把K_Volume關聯到兩個發射器,然後把K_age關聯到Container01發射器

  1. Simulation Flow視窗

    生成泡沫粒子主要就是使用這個視窗中的Graph結點圖。了解這裡是本效果的關鍵。

簡單知識回顧:

SimulationFlow視窗是把一個模拟過程分成幾塊。對于模拟視窗了解詳細參考幫助文檔的(Simulation Flow (SF))。

目前有RealFlow模拟流視窗有這樣六個【(SimulationPre,SimulationPost)(FramePre,FramePost),(StepPre,StepPost)】事件。

層級關系是Simulation——>Frame——>Step這三大部分。

如把整個藍色區域看成一次模拟,它的前後事件就是SimulationPre,SimulationPost

黃色區域就是由模拟事件分成的幀事件,黃色區域前後就為FramePre,FramePost

紅色區域就是由幀進一步細分的事件,紅色區域前後就是為StepPre,StepPost事件

這些事件可以目前可以添加三種狀态Script(腳本),Graph(節點圖),Plug-in(插件)。

意思就是你可以把這些腳本,結點圖或插件放到不同的事件中。在模拟中到達那個時間點,就會執行相應的腳本。是以要記住一個模拟事件,執行次數是反過來的。

Step>Frame>Simulation.

模拟事件最多執行兩次模拟前模拟後。步長執行次數最多,這還跟FPS(幀速率)有關系。如果計算量大的你就要考慮能不能放到幀事件中,這樣執行次數少一點,速度就會快一點。

在這個泡沫案例中我們将會用到 7個事件。6個結點圖1個Python腳本。如下圖:真正起作用的都是在FramePost事件中。下面我會一個一個來分析這些結點圖。

SimulationPre:

3.1 Initialization(初始設定)

模拟前事件通常就是進行初始設定的地方

3.2.FramePost:CreateParticlesForWhiteCaps

這裡産生白色泡沫粒子結點圖

3.3.EnforceNeighborCalculation

計算相鄰粒子區域

3.4.RemoveParticleLowerAgeAndNeighbors

3.5.MoveParticlesFramContainerTempToContainerAndMultiply

移除緩存發發射器中粒子

3.6.AddVelocity

添加粒子速度

3.7.放置粒子到浪面

記住這些結點圖在同一個事件中順序是不要緊的,因為它們在同一個事件中會同時執行。

3.1 Initialization(初始設定)事件分析

這裡不會詳細介紹每一個結點,隻會說一個大概思路,不會非常詳細的解說。具體如何連接配接,你可以下載下傳官方檔案檢視。

如果你Graph基礎知識不足,請參考本部落格翻譯好的Graph幫助。

這個Graph節點系統,初始化所有全局變量…。它主要有兩個作用:

  1. 從指定場景目錄載入泡沫貼圖

    主要是ImageLoad結點用來載入這張泡沫貼圖。

    SetImageGlobalVariable是設定全局變量,這樣這張圖資訊就可以在不同的事件中調用了。局部變量隻能在目前事件中起作用。

  1. 設定随機數組,這是用來随機化粒子或生成粒子時給粒子一個随機分布的位置

    主要是ArrayNumRandom随機數成器結點。設定最大值,最小值。最後也是設定成全局變量供全局調用。

3.2.FramePost:CreateParticlesForWhiteCaps

這個結點系統功能是:

乘以(multipy)現有的由Statistical spectrum生成的White-caps靜态泡沫圖檔。

然後生成粒子暫存到到臨時發射器"Container02_temp"中,

再把粒子放置到強度大于給定的門檻值的圖檔區域。

粒子位置會經過随機處理,看起來不會太平均不自然。

附:(可檢視相關幫助頁面)

  1. Image Statistical spectrum解釋

建立一個圖檔(image)統計波類似于RealWave的統計波。輸入值正好作為這描述的。最終圖檔是32位有三個通道。注意,圖檔可以包含負數區間是(-1,1).由于是把結果生成為圖檔,你可能要使用mapping(映射)函數或"Image"Convert"節點,使用映射函數映射顔色區間到0..1.

标準化(normalize)開關可以标準歸一一化貼圖根據第一幀(time = 0).是以映射結果正好相同高度值,如Hybrido轉換。

White caps(白色泡沫)範圍是由雅可比矩陣(jacobian)來定義。生成是1個通道32位圖檔。White cpas強度可以由縮放因子提供(scale factor).縮放因子值要大于圖檔。

由于圖檔太大分成三個部分來看

OceanStatisticalSpectrum結點會生成統計波形

3.3.EnforceNeighborCalculation

這個腳本功能很簡單,就是計算Container02_temp中相鄰粒子數

在SimulationFlow強制重新計算相鄰粒子位置。這是必須的,因為接下來有粒子要被移除,根據相鄰粒子數量。

# force the recalculation of neighbors at this position in the SimulationFlow

# this is neccessary, since in the following there are particles removed, according

# to the number of neighbors

Container02_temp.computeNeighbors();

3.4.RemoveParticleLowerAgeAndNeighbors

這個結點系統檢查所有臨時發發射器"Container02_temp"的粒子相鄰粒子數,如果相鄰粒子數小于給定的值就會被删除。

擷取Container02_temp中的粒子,然後做一個條件判斷。移除粒子。

3.5.MoveParticlesFramContainerTempToContainerAndMultiply

這個結點系統是移除臨時發射器"Container02_temp"中粒子,再在發射器中"Container01"生成新粒子(看起來像是把粒子轉移剪切了)。

你可以指定粒子倍增器(multiplier),可以在給定粒子周圍建立指定額外數量的粒子。這個半徑大小在"SimulationPre->Initialization"結點設定。

最終臨時粒子發射器"Container02_temp"會被全部清空掉。

3.6.AddVelocity

這個結點系統決定了粒子速度,它是根據statisticalSpectrum垂直速度,還與尖銳度(choppyness)有關。最終粒子移動就是根據這個速度。

請注意,這不是完全實體真實的,但粒子水準移動仍是根據波浪移動,能得到不錯的結果。 (因為粒子不僅在XZ方向有位移,是以現在做出來結果不是完全實體真實。隻是在水準方向根據波浪位移而計算。)

決定速度影響可以在結點圖紅色框的Real結點中修改。

如果這個值設定的太高,粒子會在表面"滑動",如果值太低,粒子看起來像靜止一樣。

這裡的OceanStatisticalSpectrum結點設定要與3.2.FramePost:CreateParticlesForWhiteCaps中的設定一樣。

障礙1:Real輸入Mul

自己根據之前意見,認為輸入值隻能是向量,但在RF2013中,這不能看做隻是向量積運算,它隻是一個點積。

它是支援Real輸入的。

Real: Constant 是實數結點

Mul:屬性 Math是求向量積,Product,叉積

3.7. PlaceParticlesOnSurface(把放置粒子到浪面)

這個結點系統是功能是把"Container01"的粒子放置到RealWave表面上。

你可以指定Y軸偏移,來減少人為抖動,讓粒子在浪面往上或往下偏移一點。

另外,對表面外面的粒子,你可以指定另一個偏移"OffsetY_forUnsed",使用很大的值在這,這會移除在殺死場(KillVolume)外面的粒子。

最後,"SearchRadius"參數強烈取決于choppiness(尖銳平滑度)。更低的choppiness_RealWave變形,是以可以是更低的值,模拟速度更快。

如果有一些粒子沒有準确放置到浪面上,隻要增加這個值就可以。

每個粒子附近polygons是經過測試的,如果粒子在那生成。Choppyness-值越大,就需要越多的polygons面,是以Search Radius值要增加。

繼續閱讀