MAYA 學習筆記 003 Fluid 流體系統

Fluid 流體系統

本筆記參考的教學影片是:  Maya2010流體基礎入門教學 

濃縮成一句就是:流體發射器搭配一個流體容器就會有流體產生,流體只在容器內才是存在的,依據設定的屬性跟動力傳遞方式,而有不同的流體表現。

小提示

AutoDesk 官網的使用者手冊有極基本的介紹可供入門參考,懶得看英文就看簡體中文版(許多瀏覽器都可以繁簡互換)

這是 2012 的手冊

http://download.autodesk.com/us/maya/Maya_2012_GettingStarted_CS/index.html?url=files/Fluid_Effects.htm,topicNumber=d28e51865

這是 2013 的手冊

http://download.autodesk.com/global/docs/maya2013/zh_cn/index.html?url=files/GUID-25715456-D9A2-4700-A909-A21890EE0F13.htm,topicNumber=d30e434785


一、跟流體有關的重要參數與相關功能

容器
Display(關於場景內的顯示跟算圖情況)
解析度
動力屬性
密度屬性
速度溫度密度
與燃料
Shading
流體紋理
發射器


二、容器 (2D/3D Container)

1. 建立容器後,建立一個 Eimiter,或者也可同時建立(相關的指令都有 隨便你愛怎麼弄就怎麼弄)
2. 要觀察解析度與流體時,可以到 display 下切換網格顯示 Boundary Draww = Full 

  • 會用格子顯示出解析度)
  • 3D容器雖然也可以開啟全網格不過….你應會眼花吧XDDD 請先到 2D 容器觀察就好

3. 注意,除非你很確定自己要的就是流體的拉伸變形效果,不然網格最好是保持正方形

  • 也就是說,最好不要用 Scale 來拉伸 容器大小
  • 最好是在 Container Properties 內改 size 後,同時修改 resolution (這樣不會影響網格的正方)

4. Boundary 可以決定流體跟邊界的互動關係 (注意!流體在容器外是不存在的)  

5. fluidShape 屬性編輯器設定頁( 或稱選項卡)

  • both sides(雙邊存在)
  • none(不存在邊界,就會直接消失,而且不會顯示容器外的世界)

6. 就算你故意把 2D 容器的深度拉長,外觀看起來變成 3D 容器,但實際上流體仍然只會模擬2D,第三個維度只會呆板的展開,而不會自動解算第三個維度的流體運動。
但拉長 2D 容器的第三個維度還是有用的,他可配合 Use heigh Field 功能,來對流體狀態做深入的觀察,此功能可以把流體的密度轉換成等高度的圖來顯示。(Boundary Draw調成 Outliner、 Shading裡 Color 調成黑到白的漸層色、Color Input調成 Density, Transperency 調到黑)

7. Dispaly下的 Numeric Display(流體數值化顯示)以及 Velocity Draw(流體向量顯示) 對顯示與觀察流體很有幫助 (@fluidShape 設定頁)

  •     Display 下面,都是跟顯示有關的設定,向中有個 velocity draw 可以顯示流體的向量場

8. 建立空容器後,有一些 Preset 可以套用,例如原子軌道示意圖(最神奇的是,有個選項是 moon…@@!)
9. 上述 3. 改變容器大小的方法,如果容器內已有流體初始狀態,那3.的方法流體會跟著一起變大,要在不改變流體大小的前提下擴大容器,則需執行 Fluid Effect > Extend Fluid


三 Contents Method 標籤(fluidShape 設定頁)

1. 四大類型

  • Density
  • Velocity
  • Temperature
  • Fuel

2. 他們的欄位的值表示:

  • 值= OFF,表示該欄位所屬的屬性,在容器內為零,例如 密度為零(就是沒有流體…xD)
  • 值= Static Grid,會建立流體計算網格,但是不會因為動力學方面的參數改變而改變
  • 值= Dynamic Grid,會建立流體計算網格,並可調整動力學方面的參數來修改模擬狀況,會解算的狀況包含流體的上升 下降 擴散 損耗 發光 顏色 透明度 等等
  • 值= Grandiant,不產生計算網格,是 MAYA 內已經先預定好的流體變化梯度,選此選項時,下方的  XXX Gradiant 選項可供選擇,這個選項也無法使用動力學參數進行調整。
    (由於 Gradiant 是預先算好的變化形式,因此算圖or即時顯示的速度都會快很多)
    (勾選gradiat 的話 還可以進一步選擇漸層的形式)
  • 所謂網格(grid)即是流體計算的最小體積單位

3 Color Method 則決定流體顏色

  • 勾選 Use Shading Color ,然後到 Shading 標籤下修改顏色即可
  • 勾選 Dynamic Grid,則到 fluidEmiter 屬性編輯器的 Fluid 那邊,勾選 Emit Fluid Color ,這招用在同一容器內有多個發射器,而不同發射器的流體需要不同顏色時使用,因為 shading 作用於全體容器,所以全體都會變成那種顏色

4. 這些在 MAYA 的流體理念中屬於”內力”,就是內在可以改變流體的力,除此之外還有外力,就是 Field。


四、 動力學模擬相關

1.  Dynamic simulation 標籤下(fluidShape 設定頁)

提供基本的動力作用,重力、阻尼 ,不過都是作用於容器內整體! =)

1.1 解算器 Solver

  • NavierStoke 適合模擬流體氣體
  • SpringMes適合模擬起伏的波紋,可增加 Solver Quality 增加品質

1.2 Start Frame:起始 frame

2. 討論 Content Detail 下的標籤

2.1 Density 下有

Density Scle : 就是密度值

  • Buoyancy : 有浮力之意,代表與周圍相比的浮力,或者可以說類似”比重”的概念,但不是跟水比,而是跟容器內周遭空間來比
  • Dissipation : 消失參數,密度逐漸消失的程度,類似 Fall-Off 的意思。 (注意這不等於生命週期 )
  • Diffusion : 密度擴散到鄰近網格的速度, 拉高的話,煙柱就很容易四散開
    預設Buoyancy =1 所以流體會往上運動,改 -1 就可以看到流體下沈

2.2 Velocity 下有

  • 三軸向的 Scale : 當然就是三個軸向的速度 可以視為內部速的物理上的單位向量
    Swirl 漩渦參數 其數值代表漩渦產生數量

2.3 turbulence 下有

  • Intensity 強度值要不等於零才有作用
  • Frequency 較大值則 eddy 較大   較小值則 eddy 較小
  • speed 擾亂的速度 類似干擾強度的概念  月大當然就是擾亂的越嚴重

2.4 temperature 下有

  • temperature 預設沒打開,要在 Content Method 處將其改為 Dynamic Grid才會作用)
  • 同樣有Scale、Buoyancy、Dissipation以及Diffusion,意義類似但是調的是溫度屬性
  • 但是調完後發現居然沒作用?這是由於我們調節的是溫度,但是場景的顯示算圖卻是 “As Render”,也就是顯示的是以最終結果為主,所以看起來”似乎沒反應”,如果要專心看調整 Tempereature 的結果,則到 Display 標籤下的 Shaded Display,改成 Temperature

2.5 Fuel 燃料 下有

  • Fuel 下的 Ignition Temerature 決定了發生反應的最低溫度,當實際的溫度值大於 Ignition Temerature 時,才會發生反應。
  • Max temerature 則是最高溫度。若 temerature scale 高於此數值,反應會以最快速度發生。
  • heat release 就是燃料與溫度的轉換比

實際的溫度值*temperature scale (而非temerature scale)      ←←←  反應關係式

                 Ignition Temerature      ~        Max temerature

(以下反應速率 0 )                     (反應速率 = reaction speed , 1瞬間反硬 )

  • 如何觀察呢?

可以設定 把溫度用 白熾色 來表現,反正白熾色條,左到右為0~1,黑 紅 黃,超過 1 就會有黃色

  • 什麼叫做超過 1 呢?

簡單的說,  假設流體初始發射出來,某網格的實際溫度值* time scale,  在沒有燃料的情況下,即使如何變動、擴散,反正實際值介於 0.1~0.001 之間(按實際觀察結果),依你的需要設定temp scale(比方 1.0) 換言之,溫度永遠在 0.01 ~ 0.001 變動

倘若Ignition Temerature = 1.0 那很好,你會看到一團代有紅棕的黑煙 (把溫度用白熾表現了,根據你設定的白熾色條,數值小於 0.1,自然該是黑跟紅棕 )

你設個關鍵影格,到某依格時,突然Ignition Temerature =0.01吧,那此刻所有 實際溫度值* time scale > 0.01 的網格都會燃燒,速率按照 反應關係式 -1

最後所有燃料(density) 1:1 轉換為溫度。 (當然也是可以調整的  伊格數量密度 可以不止1   燃燒比 也不一定 1:1),那某格的 溫度值就會  > 1.0 

按照白熾條的顏色, >1 就會顯示黃光白熾囉!

2.6  關於密度、溫度與燃料概念

  • 首先,Density 只是性質,這裡的密度應該視為數量密度 (I.E. Number Density)  而非日常用的重量密度。Density 決定了流體的濃密程度。density 無法對 temperature 或 fuel 產生任何影響
  • temperature 則有兩功能,一個是推動density 跑動的動力 一個是點燃 fuel 反應
    如果兩個網格的 denisty 有差值,且 temperature 是關閉時,決定流體運動的主力大致可說就是浮力與重力(或其他Field),如果有temperature 參與時,則temperature 也會是 density 擴散的動力之一
  • Fuel 可用來定義反應的狀態(無 <-> 反應中 <-> 完全反應)
  • Density 跟 Fuel 共同決定了發生反應的場景。發生反應時,Density降低、Fuel也降低,同時Temperature增加,預設值一份 fuel 減少換取一份 temperautre 增加。
  • 控制這個反應比例的參數則是 heat release 預設是1(要觀察上述的現象,可以把 Shading 下的Color 改成黑色,並把 Color Input 調為 Density,Incandescence的 Color Input 保持 Temperature,播放之。觀察兩者此消彼長)


五、漂亮曲面製作

1. 如果流體想要有明顯的表面,在Surface 標籤下,從 Volume Render 改為 Surface Render
2. 之後下面的選項就打開了,可選擇 Hard / Soft 的表面型態。
同時可發現場景內的流體已經具有非常明顯的表面,這部分可以用流體來產生一些非常漂亮、難以用Polygon NURBS製作出來的曲面
3. 參數
1) Surface Threshold 表面融合程度(依據需要的效果調整)
2) Tolerance 精緻程度
3) Specular Color 反射高光
4) Cosine Power 高光的緊緻程度
5) Environment 環境光相關,這裡有一條漸層,左邊是較低的天空 右邊是天頂,請自行調整所需的環境光顏色
6) Render 效果太差? 找到下面的 Shading Quality 標籤的 Quality 數值,調高,同時下面的算圖內插方法從linear 改為 smooth( 就不會稜角啦)
7) 完成了漂亮的形狀後,請執行  Modify > Convert >  Fluid to Polygon 指令,將其轉化為可用的 Polygon(不好意思 沒有 NURBS 呦)


六、Shadding 標籤討論

1. Transperanct 自然是透明度
2. Glow Intensity 則會配合下面的 Incandescence 來做發光演算
3. dropoff 相關 則是流體邊緣的柔和、柔化效果(其實這當然就是指朝邊緣衰減之意),有各種不同形狀與條件的衰減演算法
4. 下面有三大漸層可供調整 Color  Incandescence  與 Opacity
這些漸層條,數值大的地方用的是右端的顏色、數值小的地方用的是左端的顏色   小 <-> 大
5. 在沒有紋理干擾的情況下, Color 的Input如果只是 Constant,那就只會出現一種顏色(右端色),此時調漸層是沒有意義的,要切換其他種類的 Input,那這個漸層條上設定的漸層色才會被展現出來,顯示在相對應的大數值or小數值上
6. 白熾光的漸層的預設是溫度 (很符合物理)、白熾光預設的漸層色調也是爆炸、火焰的色系,依據你自己需要的流體、溫度色來調整
7. Opacity 當然就是可以用來遮蔽、開放你所需要的顏色帶
8. Bias 是偏移、平移,可在不修改漸層條的狀況下,平移漸層顏色對應數值分布的效果
9. Matte Opacity 則只對 Aplha 作用


七、Texture 標籤討論

1. 新建一個沒有發射器的容器,先暫時把Density 弄成梯度類型
2. 勾選 Texture Color,並在 Color 漸層條設定兩種以上顏色  就可以看到紋理分布
3. 沒有的話,檢查攝影機視窗的 Shading / Hardware Texturing 有勾選
4. Texture type 則是不同的紋理種類
5. 紋理還可勾選透明度與白熾光來進行相關調整
6. 基本上這裡的參數很類似 Noise 材質

  • Depth Max 是紋理複雜度
  • Inflection 是裂紋效果

7. texture time 紋理的變化 ,若設定關鍵影格與變化時。就可以產生紋理變化的動畫
8. 下方的scale implode 則是一些紋理變形相關的效果,會縮減特定軸向的 scale ,就可以達成類似放射狀的效果
9. Beillow 開頭的參數只有 texture type 是 bellow時才能用,最上面勾選以後,才會冒出來 。

10.標籤的最上面,有個欄位 texture type 內 不同的文理有不同的額外參數。例如Billow 

選了一後下面會出現額外參數,例如:

  • 翻滾密度(Billow Density) 控制在「翻滾」(Billow)紋理類型使用的介質中嵌入的單元數目。「翻滾密度」(Billow Density)為 1.0 時,介質完全填滿單元。減小該值可使單元更稀疏。
  • 斑點化度(Spottyness)控制「翻滾」(Billow)紋理類型使用的單個單元的密度的隨機化。「斑點化度」(Spottyness)接近 0 時,所有單元都具有相同的密度。隨著「斑點化度」(Spottyness)的增加,某些單元將以隨機方式變得比其他單元更為密集或稀薄。


八、lighting 標籤

light 相關屬性在 texture 所製作的效果上上不起作用

1. self shadow 及其 opacity 自身陰影投影、 hardware shadow 則是場景內的預覽是否顯示陰影
2. 勾選 Real Light,並且自行創建燈光之後,才會不使用內部光來做陰影投射
3. light type 決定你的內部燈光型態,這裡的light開頭都是跟內部燈光有關,所以勾了 real light這邊就不作用了
4. ambient 開頭是環境光,無論 real light有沒有都會作用


九、繪製流體屬性

可以採用筆刷繪製 Density  velocity temperature fuel 等屬性,是一種自訂流體初始狀態的方式
1. 3D 較複雜,可先建立一個2D 容器來實驗
2. 啟動流體筆刷 Fluid Effect > Add/Edit Contents > Paint Fluid Tool,最好按 口 來叫出筆刷的 Tools
註。 MAYA 2013 直接按 口 若當機,則先重開 MAYA 後並重新回覆檔案後,自行打開 Tools Setting 面板,之後不要按 口,直接按 Paint Fluid Tool 就好。
3. 在Tool Setting 內可以看到典型的 MAYA 筆刷介面,調整 paintable attribute 決定要繪製的屬性是誰
4. 例如Density, 然後使用筆刷在2D容器內隨意劃上幾筆,播放就可以看到流體運動,且初始狀態就是你所畫的樣子
5. 注意!之所以能順利畫上、且流體會運動,那是因為一個容器的Density 與 Velocity 預設都是 Dynamic Grid。假如你剛剛創立容器時把他們切換到別的計算模式,或者你的筆刷選了別的屬性,那麼 MAYA 會跳出一個視窗詢問你是否把你即將繪製的屬性設定為 Dynamic or Static (不同屬性的詢問會有差異)
6. 若在 3D 容器繪製筆刷,則需要有一個 “切片概念”
在 3D 容器下啟動筆刷時,可見到容器中央會有一圈虛線框,可能為 紅 藍 綠 三色虛線框分別代表三個軸向的切片
7. 轉動視線時,MAYA 會自動切換離你較近的那個軸向的切片,如果轉動時不想要看到別軸切片,要強制只看到某一個軸的切片,則按下切片旁邊的那把鎖頭即可。
8. 筆刷就是畫在這個切片上,也就是說,此切片就是你的筆刷畫布,切片鎖頭旁有個雙向箭頭可以調切片的位置
9. 雙向箭頭旁有個手柄則可拉伸切片厚度,此外筆刷也可以調繪製深度,來幫助3D下的筆刷繪製
10. 塗抹 falloff屬性可以達成遮罩效果


十、模型與曲線控制流體發射

1. 從模型發射流體,選取模型執行Fluid Effect > Add/Edit Content >Emit from Object 即可
2. 從曲線發射,兩大法

  • 法一,選取模型+容器,執行 Fluid Effect > Add/Edit Content > Emit from Object ,按 口 打開詳細選單,選 Curve
  • 法二,選取模型+容器,執行 Fluid Effect > Add/Edit Content > with curve ,按 口 打開詳細選單,可看到預設是 Velocity,若直接執行,就會看到流體的速度箭頭依循曲線而分布,這可以用在你希望流體按照你畫的曲線前進時

3. 承上法二, Density 就可以看到流體從曲線發射出來,但你會發現一旦產生發射器,再修改曲線也不能改變流體的發射初始形狀,那要用法一才行
4. 上述兩個方法的不同,你可打開 Outliner 觀察, 法一的流體會附屬在 curve 下,而法二則互相獨立


十一、流體初始狀態

1. 在滿意的那一個影格暫停,執行 Fluid Effect > Set Initial State 即可把目前的流體狀態作為初始狀態
2. 同時也可執行 Clear State ,會清除這個初始態
3. 如果很滿意這個初始狀態,可執行 Save State as 儲存為 *.mel 檔,直接存在預設的資料夾就好! (檔名最好註明2D 或 3D)
4. 建立新的容器之後,打開 Visor -找到 Fluid Initial State 那一頁,應該可以看到你剛剛儲存的初始態檔案
   將這個 mel 以中鍵拖曳給新的容器,剛拖曳過去時狀態會很奇怪,別怕!回到第一影格後重新播放即可。
5. 初始態的預設儲存路徑大致是 C:/ Program File/Autodesk/MAYA2012/preset/fluid/initialstate 這樣,這同時也是 Visor 會去讀取的預設路徑
6. 注意!有些 initial states 他的 resolution 不是正方形的,這類初始態在套用之前呢…要先把容器的 Keep Voxels Square先關閉才行,否則你會發現不管怎麼套,流體都不會出現。

  • 例如 Miscellaneous / 2D下的 mayaLogo2DApply.mel 就是80*60解析度


十二 流體與物體碰撞

1. 建立了流體(有無發射器皆可)後,再建立模型於容器內
2. 播放,可以看到流體跟模型沒有交互作用
3. 同時選取流體跟模型,執行 Fluid Effect > Make Collid (若叫出 口 選單  只有一個參數 Tessellation factor 決定了碰撞計算的精密程度,數值越大碰撞狀況就會越接近正確)
注意!即使用 NURBS模型,在MAYA內部計算碰撞時,MAYA也換偷偷轉換為多邊形來計算碰撞
4. 再次播放就可以看到流體跟模型會有碰撞行為 (不過不會有動能的傳遞)
5. 若要讓流體”推動”模型
1) 設置模型為主動剛體 (Soft/Rigid Bodies > Create Active Rigid Body)
2) 選取模型+容器,執行 Field > Affect Selected Object (注意!不要選到你的流體 emitter)
3) 選取模型後,在屬性編輯器找到 rigidBody1 分頁,找到 performance attribute 標籤,將 Apply Force At 欄位修改為 centerofMass,再次播放,就可看到流體推動剛體運動了
4) 還可以對模型建立約束(Create XXX Constraint),就可以調出一些剛體被流體推動的運動變化,例如風車轉之類的
5) 除了 Make Collide 外,還可以選取模型跟容器後,執行   Fluid Effect > Make Motion Field ,也可以類似3)的操作那樣,讓流體跟模型有一些碰撞、互動,這裡所新增的 Motion Field 是一種 Drag Field
6) 視乎情況選擇使用哪一種碰撞關係,根據官網所說:『使用「生成運動場」(Make Motion Field),可以準確模擬對象穿過流體的情景。此場向父對象應用一種力,以便該對象看上去彷彿在移動或在推動流體。請參見 motionField。 』


十三、Cache

1. Cache 是預先儲存運算結果,最大用途是可以快速預覽任一影格的模擬內容
2. Fluid nCache > Create New Cache,即可建立
3. 只是要關閉但不刪除  Fluid nCache > Disable All XXXXXXXXXXX (Enable 就是再次打開)
4. 刪除 Cache 資料 Fluid nCache > Delete Cache ,按 口 打開選單,選Delete File
5. 自行指定 Cache 檔,執行  Fluid nCache > Attach Existing Cache File
6. 其餘  Fluid nCache 功能:
替換Cache(Fluid nCache > Replace Cache)
合併Cache(Fluids nCache > Merge Caches)
附加到Cache(Fluid nCache > Append to Cache)
替換Cache Frame(Fluid nCache > Replace Cache Frame)
刪除Cache  Frame(Fluid nCache > Delete Cache Frame)


十四、2D 紋理投影材質

1. 建立一個圓柱體模型
2. 賦予一個 blinn材質,並在 Color 旁按下棋盤格,呼叫材質選單,在 Fluid 2D texture上按右鍵選 Create as Projection
  (此時會有個投影專用的2D流體容器被建立)
3. 看到屬性編輯器內有個 projection 頁面 , proj type 設定為 Cylinder ,然後再按下 Fit  to Box,使整個貼圖的 UV 重新 fitting 到適當大小
(事後還要改要到 hypershade裡找 texture分頁下的 projection 節點)
4. 在容器內建立發射器,或用筆刷自己塗抹流體初始態,然後播放,就可以看到流體的紋理被當成一個材質投影在模型上了


十五、 文字消散效果,以流體形式消散

1 在 PS 等平面工具製作文字,需要一張黑底白字 一張黑底彩色字 (字的內容當然是一樣的) 存為 24bit tga 檔
2. 建立 2D 容器,且解析度設定超大 (500*500)
3. 執行流體筆刷(且需叫出Tool Setting)
4. 確認 paintable type 為 density,找到 Tool Setting 最下方,Attribute Maps > Import標籤,按下 import 把剛剛的黑白文字先匯入

  • 注意!匯入後如果沒看到東西,請先按 6 看看,只有 6(顯示貼圖) 才會看到匯入的結果

5. 播放,理論上你的文字已經能以流體動力學的形式消散了
這個就是拿剛剛那張黑白文字的圖片匯入,以其明暗程度來當作Density的分布
6. 執行流體筆刷,確認 paintable type 為  Color,若跳出詢問選單,就選設置為 dynamic
7. 匯入彩色圖片(就是拿彩色圖片的色彩分布,匯入為流體的Color分布)  也就是說,先在 Tool Setting 選擇形式為 Color ,然後匯入 彩色圖片

8. 調整你喜歡的容器參數,達成你喜歡的消散效果,比方不要向下消散,那Buoyancy 浮力把它倒數

9. 要發光則調整 shading / glow intensity


十六、關於流體發射器

1. min distance 最小距離,是流體會從距離發射器多遠的地方開始發射
2. Density/Voxel/Sec 密度每秒發射到體積單位內的速率
3. dropoff 衰減速度
4. fluid color 發射流體的顏色
5. Fluid Emission Turbulence 的屬性都跟擾亂場有關
6. Emitter Type 除了 Omni 點發射以外,還有表面發射、體積發射等等
如果選 Volume 發射,則下面的Volume Emiter Attribute 就可以調整,發射器就會具有一定的體積,而非點發射。 fluid drpo-off 配合設定為 0,流體就會從整體容器內發射出來。


總結

1. 總之,有了粒子發射器以後還要搭配一個流體容器才會有流體,流體只在容器內才是存在的
2. 流體容器的屬性編輯器以「 fluidShape」 這個設定頁,主導了流體內力的行為、顯示的總控制中樞,不懂就可以立即查官方手冊:
http://download.autodesk.com/global/docs/maya2013/zh_cn/index.html?url=files/GUID-25715456-D9A2-4700-A909-A21890EE0F13.htm,topicNumber=d30e434785

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料