2011/10/31

VRay動畫算圖最佳化


原文:Vray animation optimisation
作者:James Cutler
翻譯:Hammer Chen

當用Vray算動畫的時候如果算圖時間很長, 往往會讓人很挫折. 原本用在單張靜態算圖的反射模糊的材質, displacements, 如果直接用在動畫上面的話,會讓整個算圖時間無限延長!

Displacement
渲染單張圖片若是用到displacement, 算圖時間就會變得很長. 若是用在動畫上面會變得更複雜, 需要很小心地規劃, 特別是你想要做出寫實的地毯的時候.
小技巧:若是用在表現草地, 地毯時, 建議使用3d mapping. 如果你用2d mapping算圖, Vray會載入每個frame. 如果texture很大的話, 這個動作會花很久時間. 關於地毯與草地3d mapping的邊長(edge length)可以設的高一點, 效果也不差; 若是用比較小的邊長, Vray越是細分(subdivides )mesh, 算圖時間就會越長. 邊長這個參數跟解析度有關, 越高的解析度, 邊長就應該越大. 同時應該要確認view dependent的選項有打勾, 這樣會減少閃爍問題, 因為displacement會更平均地分散計算.

2011/10/16

Building demolition: volumebreaker and Thinkingparticles integration videotutorial



In this 18 mins video tutorial, I am going to demonstrate how to create a realistic building demolition in 3ds max 2011, with help of Volumebreaker and ThinkingParticles plugins.

Tutorial results:




Before you start break your 3d building into pieces, make sure the mesh is a solid model. Add STL modifier to see if there is any error.

2011/10/11

Art of Optical Flow 光流的藝術

Optical Flow是從觀察者的角度(2D), 物體上面的特徵點所產生的運動向量. 這些向量可以由每個frame推算出來. 得到這些向量的資訊, 用在影片格式方面, 可以用來壓縮影片. 在電影特效的領域裡:可以用來追蹤畫面, 自動去背, 自動ROTO, 重建3D場景, 製作慢動作特效, 計算景深資訊. 在機器科學裡面, 可以讓無人飛機偵測環境碰撞, 判斷速度, 物體的遠近. 基本上Optical Flow的技術可以視為一種機器的視覺. 以下文章主要由fxguide而來, 挑出重點略譯.


----以下為編譯後的內容----
作者:Mike Seymour
編譯:Hammer Chen

"Optic flow"這的詞, 其實是你我每天都會體驗到的視覺現象. 基本上, optic flow是當你在運動的時候, 體驗到的視覺上的移動. 假設你做在車子裡面, 看窗,外 你會看到樹木, 地面, 建築物, 似乎在往後移動---這樣的動作就是"optic flow". 這個動作也能告訴你物件跟你的距離有多遠, 距離比較遠的例如天空的雲, 山脈會移動的比較慢. 比較近的如樹木或是建築物會移動的比較快. 非常近的物體, 例如地面, 會以非常快的速度離開你. (節錄自Centeye)

我們可以用很清楚的數學來界定optic flow的強度與物件跟你的關係. 如果你用兩倍的速度移動, 那麼optic flow也會變成兩倍. 如果物件兩倍的接近你, optic flow也會變成兩倍. 而且optic flow也跟角度有關, 跟你移動的方向, 和觀看的方向有關. 如果你往前移動, 跟你呈90度角的會有最大optic flow. 如果朝你而來, 則optic flow會比較小.

Optical flow 是視覺特效科技發展最有趣的技術, 這裡會專訪發明這項技術的人.

電影駭客任務Matrix裡面的子彈時間( bullet time) 跟 optical flow技術大有關係!

Bill Collis是The Foundry公司寫出 Furnace optical flow外掛的人. 該外掛還包含了改變時間撥放快慢(retimers )的 Kronos功能, 而ILM公司的Kim Libreri 認為Kronos是當今做 retimers最棒的工具. Optical flow大概是在十年前開始被用在電影裡面, 而現在有業界裡面的天才們正在開發相關的外掛 ,有了這些外掛, 美術人員就有機會處理極端複雜的畫面, 把這項科技用在 After Effects Shake, Flame, Nuke, Fusion 與 toxik等合成軟體.

Optical flow或是追蹤每個像素所需要數學, 被用再當今標準的影片轉檔與壓縮裡面, 在視覺特效的領域裡面, Optical flow 被用在改變影片快慢(retime), 追蹤, 3D場景重建, 動態模糊, 自動roto, 移除缺陷 (dirt removal).

對於 Optical flow的計算, 我們必須要考慮每個像素的x y移動向量, 也要考慮每個像素的品質, 比較這個frame的某像素跟下個frame一不一樣, 還必須要設定一個評量標準, 怎樣的像素可以作為追蹤點. optical flow都是以浮點數在計算的, 有些會儲存在 OpenEXR檔案裡面.

"當我們在走路或是移動頭時, 眼裡的世界也跟著改變, 即便是我們靜止不動, 這個世界也不會一直維持不動. 東西會飄落, 樹木會擺動, 小孩嬉戲. 這一類的動作, 以及我們對動作的了解, 似乎很平常, 我們往往把它當作理所當然. 事實上, 能夠查覺這個世界的改變, 對於生存十分重要, 沒有這項能力, 我們感知就會失去連續性"---- M.Black 博士班論文, 1992年.

Black博士的論文呈現了---optical flow, 做為這個世界的動作投影到觀察者的平面最好的註解. Optical flow 是以二維的向量場所呈現的, Optical flow是由移動的物體, 或是攝影機移動所造成的 用最簡單的說法來談, optical flow 它就是追蹤一個frame的像素, 然後追蹤下一個frame...最後的輸出會得到一系列的向量, 從這些向量與分析, 你就可以找到原本場景中物件的形狀.

為什麼這樣的分析很重要, 因為基本上 optical flow可以視為"機器的視覺". 一旦我們給予電腦"看" 東西的能力, 那麼電腦就能由2D畫面判斷出的物件形狀, 物體位置甚至演員, 這樣開啟了很龐大的機會, 我們可以依此做出很多很酷的特效. 一旦電腦可以"看"到車子, 電腦就會自己對汽車做roto的工,作 自動取代背景隱藏的部分( background hidden)或是把汽車挖掉. 一旦電腦"看"的到, 電腦就會產生深度圖(depth map), 顯示哪些東西靠的比較近, 哪些比較遠, 甚至可以進行retime. 精確地對畫面進行補差 (missing frames between any two ), 產生非常平順的慢動作特效.

Optical flow 雖然是一項技術, 讓我們分析場景, 這不是3D的分析, 也不需要任何特殊的硬體. 它主要是比較每個frame 試著去比對每個像素, 由一個frame到下一個fram, 如果有一個完全平滑的球在自旋的話, 因為畫面上看不出動作, 所以就沒有Optical flow了!

Optical Flow的拍攝規範
前面談那麼多Optical Flow的理論有什麼意義呢? Optical Flow的程式寫法是根據某些假設或是規則, 如果你在拍攝的時候遵守這些規則, 就會產生比較好的結果. 這很容易理解, 我們都知道綠色或是藍色螢幕的去背, 我們在拍攝的去背畫面的時候都會有規則遵守: 例如不要穿著綠色上衣, 或是不要用 promist濾鏡, 避免綠色背景太過接近演員. 當然啦! 你還是可以違反這些規則, 但是為了要得到高品質的去背結果你可能要因此加倍努力才能得到好效果.

就 optical flow來說, 規則如下:
  1. 透明的東西, 會違反"單一的運動前提", 所以效果會不好
  2. 閃爍的燈光, 或是其他類似的狀況會違反"亮度恆定的假說". 效果也會不好
  3. 非常顆粒或是雜訊很多的影片效果也不好
  4. 後製通常會對Optical flow 的計算不好, 後製對Optical flow 的計算不會有幫助. 我們問過Black博士與 the Foundry的 Bill Collis, 兩個人都同意. 他們說: Optical flow 程式的演算法在寫的時候就有把雜訊與顆粒考慮進去了, 所以預先處理影片, 比方說顏色校正這類的東西, 雖然人肉眼看好像比較好看, 其實對你Optical flow的運算是有害的.
  5. Optical flow 會去考慮frame之間的圖案 所以快速移動可能不容易解算出來, 隨機的運動也不行. 如果物件過於激烈地改變, 連你用肉眼都很難看出來運動了, 我想電腦也很難判斷吧.
  6. 為了解決雞生蛋, 蛋生雞的問題, 就先給電腦雞吧. 很多程式都能輸入matte, 如果你能先提供物件的roto或是key或是有用的matte, 將會大大改善解算的問題. 目前的程式, 並沒有物件形狀的資料,庫 也沒有更高階的形狀資料, 所以預先把物件獨立出來會非常有效. the Foundry的 Kronos的 retimer功能就能輸入matte .
  7. 計算Optical flow 的時間或多或少跟影片的影像大小成正比, 兩倍的像素表示兩倍的計算時間 .
  8. 這跟邊界分離有關, 大部分的軟體對相對規則, 慢點的影片會比較好計算, 如果有交錯的運動要避免 例如兩個人交錯走過就是一個不好的例子.

發展的歷史

1993
1993年TRACK軟體發表, 這個東西的功能是計算攝影機的位置並且重建場景TRACK系統是Digital Domain公司整合的軟體. 用在電腦視覺(computer-vision)科技, 萃取影片中2D與3D的資訊 , 到了2006年. 推出第五版的TRACK, 可以餵資料給Digital Domain的NUKE合成系統. 但是這套系統在使用的時候需要相當的使用藝術... 通常不能只用一種方法來處理單一個場景, 可能需要三四種方法才能達成.

1995 – 1996
Optical flow技術首次用在電影裡面:
1995年Sergei Fogel研發出新的處理技術, 可以讓frame與frame之間產生內差, 這項科技很快地命名為Cinespeed. 而最先採用Cinespeed技術的電影是"不可能的任務". 其中有一幕湯姆克魯斯在圓桌上親吻Emmanuelle Beart, 這個鏡頭成功地結合傳統的2D與Cinespeed技術, 表現慢速鏡頭(retimed) 這基本上就是整個系統的元型.

在"美夢成真"這部電影裡面, 羅賓威廉斯在一個似乎用筆刷畫出來的世界裡面, 他是即時的表演, 但是當他接觸到植物的時候, 植物看起來好像是畫出來的. 背景一直有個巨大光線, 不論攝影機的位置在哪裡, 但是當風吹, 或是演員移動 ,植物都能夠很寫實地做出反應. 觀眾可能會假定這幕是完全在綠幕前拍攝的, 但是, 實際不是的. 導演(Vincent Ward)不想用傳統的方式拍攝, 他想用自由的, 自然的方式拍攝, 但是又能在後製加上驚人的特效.

美夢成真這部電影跨出的一大步

場景準備
最後想出的解決方法是, 在冰河國家公園拍攝所有場景, 演員就自然演出即可, 但是在現場擺上橘色標記點.

接著, 演員以Optical flow技術從場景中拿掉. 攝影機的功能是要重建攝影機在3D中運動, 然後再次利用Optical flow技術. Optical flow vector maps用來追蹤影片裡面的每個像素, 最後, 使用雷射雷達技術, 用來掃描拓譜, 產生點雲, 重建整個地形的3D資訊.

接著使用Photoshop做pre-viz, 團隊能夠依此決定要怎場景的哪邊繪製植物, 山脈, 天空, 水. 可以依照顏色, 亮度, 深度來繪製出alpha matte.

接著"動作繪製(Motion Paint )" 用來套用不同顏色與比刷, 根據動作/空間的分析資訊, 動作繪製拿實拍畫面Photoshop mattes 或是optical flow的處理, 來產生整個最終影片的效果

最後, 演員才又擺回原本的畫面裡頭.

1999
駭客任務中的子彈時間特,效 也是利用optical flow技術還讓慢動作畫面能平順地呈現. 而這次提昇的品質是過去業界無法想像的!

Kim Libreri是子彈時間的主管, 這幕最大的困難在於要慢慢的動. 然後拉攝(dolly)進畫面, 而每個靜態攝影機的最近距離是七吋, 而最近也會有12吋的間距, 所以要產生平順的運動根本就是不可能的.

最大的問題在於鏡頭的抖動, 每秒600個frame, 這些是跟optical flow無關的, 是穩定性與顏色等問題.

一開始時團隊有考慮到用cineon系統, 但是原廠Kodak有意把cineon抽出市場. 於是Kim Libreri詢問他在S&W的朋友, 請他試做效果相當不錯, 只是當時不是只有內差的問題, 還有攝影機拍攝600 fps的抖動問題.

根據Libreri所說, 在首次的駭客任務子彈時間測試的時候, John發明了新的詞---UCAP 他希望做出完全的捕捉, 他希望用10台攝影機, 能夠內差出所有角度的攝影機, 做出完整的3D場景重建, 裡面有演員 ,環境, 不管從任何角度都可以, 這就是團隊在下一步要做的(駭客任務第二集)

2000
在製作電影"大敵當前"的時候, RealViz Retimer這套軟體推出了. 那時我們用Cineon’s Cinespeed進行retime, 但是"大敵當前"有其他挑戰, 用這個工具無法克服. 這部電影拍攝了很多二戰時期史達林格勒的細節畫面, 電影中經常必須出現大量的火, 燃燒以及很厚實的煙, 燒向天際. 我們根本就不可能實際拍出這麼多煙霧, 而大部分拍攝地點製造這麼多煙霧也是不合法的. 所以我們的作法是拍攝微縮的煙霧, 用最高的FPS來拍攝, 就算是這樣還是不夠, 我們就利用當時最新的Retimer軟體來處理讓這些火焰, 煙霧的速度變慢. 有時候甚至讓速度整個慢十倍, 只有optical flow的技術有可能達到這種特效, 最終的效果讓我們感到十分驚奇.

駭客任務的續集
第一個把optical flow技術用在臉部表情動畫的不是"駭客任務"續集 ,其實是用在"不可能的任務2"與"靈異總動員". 裡面有一個角色要變臉的鏡頭, 我們決定要用optical flow的技術來做, 於是我們就拍攝一位演員的臉部表情背景是綠色螢幕, 而另外又做了這演員的模型. 我們把演員表情所產生的optical flow套用到模型上面, 模型就開始講話了. 雖然效果很粗糙, 但是這個測試說服了我們,這樣的流程可行. 雖然電影後來沒有用這個畫面, 可是這就是駭客任務續集UCAP的基礎, 我們可以說, 只要有好的3D模型, 我們就能重新建立某位角色的臉部表情.

當時Manex團隊想要找到合作夥伴, 因為這些特效相當複雜, 攝影機產生的資料量是每秒好幾G. 每天晚上團隊都要備份5terabytes的資料量, 到最後, 他們還必須要把工作帶回家處理這些高解析度的影片.

Borshukov回憶在拍攝"靈異總動員"的時候, 他發現景深效果不對, 但是他想到如果再加幾部攝影機的話就能產生正確的景深.

駭客任務續集, 把一些研究與成果都結合在一起. 結合了美夢成真的追蹤技術, 子彈時間的內差技術 還有虛擬攝影(virtual cinematography) 全部結合在一起---就變成了全景捕捉了(Universal Capture of the Matrix sequels) . 駭客任務續集, 延伸了optical flow技術, 使用多台攝影機並結合了,攝影量測學技術(photogrammetry)用在產生3D動作重建(包含了動態貼圖與擷取)

高解析度捕捉的設定
團隊小心翼翼地放置五台同步的攝影機, 在環境燈光下, 捕捉演員的表情. 為了要得到最佳圖像品質 ,精心佈置了Sony/Panavision HDW-F900攝影機與電腦工作, 捕捉出位壓縮的數位格式. 以每秒達到1G/sec 資料量寫到硬碟裡面.

Optical Flow的攝影量測學技術(Photogrammetry)
Optical flow用在追蹤每個畫面的像素, 最終結果會結合成一個虛擬的模型, 表現出自然的演員表情與重建的攝影機位置.

這演算法會投影模型的vertex到攝影機, 然後追蹤這些vertex的動作, 利用optical flow技術追蹤這2D畫面, 然後用三角測量法重新根據每個frame建立3D的位置, 最後會得到精確,的 每個vertex在3D空間的重建.

關鍵形狀, 適應, 移除整體運動(Keyshaping, Adapt, Removing Global Motion)
Optical flow的計算錯誤會隨著時間累積, 會造成3D重建不必要的飄移. 為了要減小飄移問題, 團隊用了反轉的Optical flow, 這個問題是經由手動的關鍵形狀(a manual keyshaping step)來減小的. 當問題大到某個程度的時候, 就手動修正錯誤, 然後用演算法的方式把這個修正套用到其他的frame. 重建的動作包含了整體的僵硬的頭部運動, 為了要添加臉部表情到CG身體, 我們會用最小平方法去吻合自然的臉部然後扣掉這個動作來取得不僵硬的臉部變形(non-rigid deformation)

貼圖的擷取
為了要產生逼真的臉部算圖效果, 就要擷取臉部表情隨時間的貼圖. 事實上團隊並沒有在演員臉部放置任何的標記點來幫助臉部追蹤. 因為他們可以根據多台攝影機, 隨著時間變化, 產生一個無縫的UV color map. 捕捉重要的貼圖變化, 例如皺紋, 或是擠壓產生的顏色改變, 臉部的每面都有很高解析度的細節.

算圖
雖然臉部動作擷取最細微的動作, 但是還是缺乏細節, 例如毛孔和皺紋. 團隊用的是高解析度的100-micron scan掃描臉部, 這個細節最終轉換成bump map. 動態的皺紋是根據影像處理所產生的, 然後把皺紋疊在bump map上面, 最後再結合image-based skin BRDF估算與次表面估算效果.

[相關文章]

2011/10/07

CG Taiwaner網站流量統計與專訪


CG Taiwaner台灣人玩動畫是一個已經經營五年的網站. 對於一個經營小眾主題的部落格來說, 怎樣的流量數字才可稱為優秀? 尤其以3DCG為主題的網站, 每天有多少人瀏覽才算是熱門呢? 站長今天就充當記者, 用自問自答(笑)的方式來談流量統計數字與理念:

站長你好, 請問你網站目前每天大概有多少人瀏覽?
每天大概有400人. 全盛時期有到每天700人左右.

你所謂的瀏覽人次, 該不會是刷新一次就算一次瀏覽吧?
我們是用Sitemeter做統計. 基本上它是用IP來計算人次. 如果排除掉站長自己每天一直看, 加上有變動IP的訪客, 所以實際訪客數據還需要下修. 但是基本上不會差太遠( 應該吧~)

那, 這些人大概花多少時間在你網站上?
大概2分30秒吧. 根據Sitemeter數據, 有些人會待到40分鐘以上, 但那是極少數.

兩分多鐘啊! 這麼短! 這樣對網站經營上有什麼策略上要因應?
每個訪客臨幸本站的時間大約在3分鐘以內會完成. 就影片來說, 也不建議超過3分鐘. 就算是長時間的教學影片, 知名的TED演講所訂下的時間是18分鐘. 文章長度長的話也可以增加訪客的黏著度. 其實那些停留超過3分鐘的就代表真的對你文章有興趣, 只不過這些人大概只佔所有訪客的千分之幾而已!

如果我們要對3DCG相關的中文部落格訂流量高標, 你認為應該是多少?
每天800人, 每位停留4.5分鐘

來談談跟Blogger相關的指標, 請問你網站現在有多少followers (Friend Connect)?
135人, 這個成績自認相當不錯. 我們拿知名的遊戲產業評論網站銀狐 Silver Fox 的碎碎唸來說, followers則有94人.

Google Reader的訂閱者有幾人?
593人, 有些網站的Feed Burners訂閱者可達近2000位, 例如數位內容觀察站. 不過我沒辦法成功使用Feed Burners, 所以就沒有設定Feed Burner. 目前的統計數值還是透過Google Reader而已

你有使用Google Anylytics分析工具吧? 來談談你主要的流量來源.
搜尋引擎 46.6%
推薦連結 32.5%
直接流量 20.7%
由搜尋引擎而來的流量還不算少(46.6%), 對於一個經營5年的部落格來說, 這好處是不太需要去打廣告, 也不太需要常常更新內容就會有客人上門.

你說你的推薦連結有達到32.5%? 到底是哪些網站在挺你?
cgtutorials其實是我自己去貼連結的. maxuser, grabc4d也是. 對於網站經營, 一開始的時候自己去打廣告是必要手段. facebook的流量大部分都是網友幫我推薦的, 感謝大家相挺.

整體而言, 你的流量來源是?
如上圖, google, yahoo, cgtutorials, maxuser, grabc4d...這些. 還有FB

大家用搜尋引擎(比方說Google) 都是怎樣連到你網站的? 他們打什麼關鍵字?
知道我網站的人就直接用台灣人玩動畫 或是 cg taiwaner. 其他像是3ds max最新版本2012, 2011也都很重要. 外掛網站跟外掛網這兩個關鍵字比較特別啦! 那是遊戲玩家在找作弊的外掛不小心連到我網站的 ,所以跳出率很高(笑). Vray也很重要. 這樣你就知道經銷商什麼軟體比較有銷路了吧~

我知道你有靠網站的廣告賺點外快, 請問你adsense的關鍵字收益排行榜大概是怎樣?
不能給你實際的金額, 不過你可以看看前十大賺錢關鍵字.

網友到底最喜歡看你哪幾篇文章啊?
Normal map, 3ds max的外掛, 或是vray的全局照明...等等. Tutorial精選文是我後來新增的目錄頁. 這些是很重要的資料, 這樣我可以知道哪些文章可以"熱賣" 或者網友喜歡怎樣型態的文章, 可以最為我日後發文的參考.

可否推薦台灣的五個3DCG相關的中文部落格?
目前只想到這五個, 但相信還有很多不錯的站. 我覺得要持續更新, 有自己的想法, 內容豐富是最重要的~

對台灣部落客經營者有什麼建議?
Content is the king 內容第一, 持續更新吧, 大膽地記錄自己的想法!

很感謝你這次參與自問自答的訪談, 再見!


[隨選文章]

2011/10/03

The Science of Fluid Sims流體模擬背後的科學

通常像這樣的文章沒十天, 半個月很難全部翻完. 一方面時間拖的太長, 另外一方面排擠掉其他好文的翻譯機會. 這樣很可惜. 也因為如此, 作者決定要提供另外一種的翻譯模式---改用讀書心得的方式呈現. 也就是說把每段的大意讀通, 消化了以後再用簡短的文字表現出來.

記得大學時代教授曾經講過:來不及看完所有的原文書嗎? 那就把每張附圖的意思搞懂就好了. 看不懂整段的文字段落嗎? 那就把文章的第一句跟最後一句搞懂就好了. 很簡單的20/80法則, 卻也十分有效!

這篇介紹流體模擬會遇到的狀況, 主要以Exotic Matter的Naiad流體軟體作為說明.

----以下為心得與編譯----
作者:Mike Seymour

前言
流體的運算是最耗電腦運算資源的, 但是對於視覺特效來說十分重要. 流體所指的不單單只是液體而已, 還包含了火焰,, 煙霧, 氣體等. 而煙霧跟液體最大的差別在於, 液體會有固定的體積, 氣體則不是. 流體的這個概念不僅僅被應用在視覺上, 在科學領域裡面, 用電腦輔助流體的研究簡稱CFD. 60年代, 被廣泛應用在氣象預報, 洋流, 飛機動力學(這些都對經濟有很大的影響).

Weta Digital在X-men電影裡面的流體特效

Framestore為納尼亞傳奇: 黎明行者號製作的視覺特效

基本概念
流體模擬主要分常兩種方式: 早期是把流體當成一個大平面 (例如海洋); 後來才有會計算到體積(Volume)的模式, 例如倒水杯, 或是大水衝到街道裡面. 這種模式必須要考量以下條件:
  • 質量守恆. 基本上水不會在模擬的過程中平白消失
  • 動量, 或是能量守恆
  • 體積守恆, 不可壓縮的流體. 真實的世界裡面, 水是可以被壓縮的, 但是如果假定水不可壓縮, 那計算公式變會簡單許多.
  • 流動加速度(connective acceleration) 空間會控制流體的加速度, 例如當水流出水管的時候.
  • 流體主要受到兩種力: 一個是重力, 另外是流體本身的壓力
  • 基本上會忽略黏著度
  • 邊界的條件(boundary conditions)這是流體計算很重要的關鍵
流體模擬主要就是要解算Navier-Stokes方程式:是一組方程式用來描述不同類型的流體, 這個方程式已經流傳幾百年了. Navier Stokes方程式的解算結果並不是單一個簡單數字, 例如42. 而是一組複雜的向量場. Navier Stokes掌控的不是位置, 而是速度. 基本上這個方程式就好像把牛頓第二運動定律應用到流體上面 也就是說F=ma. 這個方程式最後的解是速度場(velocity field)或是流場(flow field).用來描述流體在特定點的移動距離與時間. 一旦速度場被解出來, 就可以把流速或是阻力也推算出來.


以下是簡化版的Navier-Stokes公式
用大家可以理解的方式來解釋一下:

加速度+某東西+在壓力與密度的改變=本體的力+動態的黏度

但是假定流體是不可壓縮的話 黏度的計算就可以被忽略

加速度+0+在壓力與密度的改變=本體的力+0

整理一下公式, 會得到:

加速度=本體的力-壓力與密度的變化

而密度又等於質量除以體積, 壓力的改變又與體積有關, 因此:

流體的某一點的加速度=重力(外力)-壓力或是密度的改變, 也因此流體的加速度就與他所受到的力相關.

這樣的公式要怎樣實際導入到流體軟體裡面呢?
如果直接把公式寫成程式語言很簡單, 但是實際在計算的時候需要考量產業需求, 電腦運算時間. 寫實度往往必須跟速度達到平衡. 因此實際上需要很多偷步的技巧才能滿足不同流體狀況. 其中一種偷步技巧是Surface Tracking Euler method. 他是用height map來控制流體表面, 但是忽略掉水面以下發生的事情.

某些軟體的解算法並不能滿足所有尺度, 從小尺度的倒酒杯 到大尺度翻滾海浪上的船.

某些則是數學公式上面有缺陷 ,會導致流體會隨著時間讓體積越來越小, 例如在測試<加勒比海盜神鬼奇航:幽靈海>裡面有一幕玻璃箱裝載了美人魚, 而Naiad則是解決了這方面的問題.

ILM製作加勒比海盜神鬼奇航:幽靈海的畫面

以下是關鍵技術讓你可以在合理的時間裡面計算出寫實的流體:
SPH(Smooth Particle Hydrodynamics)方法
是一種用Navier-Stokes的粒子系統, 模擬完後再把這些粒子變成polygon. 這種方式對於倒酒的流體特效很適合 ,但是對於如海水般大量流體就會有困難.

Weta在格列佛遊記使用Naiad

Volume GRID方法
只有表面的流體, 又被稱為Volume Fluids. 例如在Houdini裡面, 可以很有效率地描述海洋波浪的高度與頻率, 這種方法沒有粒子, 對於小尺度的倒酒效果不合適. 這種方法通成被稱為Euler法.

FLIP方法
FLIP解算法是粒子解算法與volume解算法兩種的混合, 加勒比海盜神鬼奇航:幽靈海 美人魚裝在玻璃牢籠裡面的流體, 就是用Naiad的 FLIP模擬出來的.

FLIP跟粒子或是SPH相比最大的優點在於, 每個frame需要計算公式的次數不需要這麼多, SPH解算法在計算的時候, 每個frame都要計算好幾次, 有點像是時間上的反鋸齒計算, 這樣的公式往往必須要解算10-100次才有可能得到好效,果 要不然很容易產生分子炸開的問題.

Houdini也提供三種解算模式, 包含了FLIP的方式. 針對Houdini 11 Side Effects 的資深數學家Jeff Lait說:
"當FLIP流體被解算的時候, 會暫時產生速度場, 粒子的速度場會被轉移到grid裡面. 用來處理流體的彈射方向 ,這樣可以避免粒子重疊, 也可以避免它們都往同一個方向移動. FLIP流體的另外一個優點是不同的流體可以疊在一起, 不會影響到系統的穩定度. SPH法當兩個粒子很靠近的時候很容易就炸飛, 對於FLIP來說, 你可以添加新的粒子到流體裡面, 例如石頭丟到水裡面飛濺起來的分子"

Naiad案例分享
Exotic Matter公司的Naiad流體軟體用的方法是PIC-FLIP, deFLIP 甚至更先進, 未發表的方法. Exotic Matter公司的 CEO--- Marcus Nordenstam先生做了以下解釋:
"FLIP用了新的方法來改善以粒子呈現流體的計算方式, 在每次的模擬, 我們會從粒子產生grid, 把粒子的速度與表面資訊轉移到grid上面, 然後壓力會透過grid來計算, 而把計算的結果更新到粒子身上, 然後粒子再把新的速度轉移到grid上面, 如此計算稱為一次的step (譯者註:反覆的跑這樣的流程可以算出很寫實的流體).


Naiad Scene Test from slayerk on Vimeo.
問: Naiads能允許添加新的粒子嗎? 例如當石頭丟到水裡濺起水花.
答:可以. 有很多發射的operators可以做到這件事, 不論這是一級流體或是二級流體都可以.

問: Naiad的精度到多少? 你認為還要花很多時間開發才能得到好的精度嗎?
答:Naiad的精度幾乎是一等一的. 是目前的尖端科技, 如果是工程用的流體軟體價格是Naiad的十倍, 能達到最棒的精度. Naiad還可以同時計算剛體與流體, 而大部分的流體模擬軟體都是把剛體與流體分開計算的, 這會影響到細節與精度.

另外一個重點是細節與解析度Naiad最著名的就是提供大量的細節, 即便是解析度很粗糙.Naiad不是用傳統的方式調整解析度, 它不是靠單純固定大小的細胞--或是稱voxel來計算的. 而是以動態的 自適應的方式來處理. 因此, Naiad的流體不會侷限在某個框框裡面計算, 這要歸功於Naiad’獨特的3D tiling系統.

問:有沒有可能靠一種方式就能計算所有尺度的流體呢?
答:Navier-Stokes方程式可以應用到分子般大小的尺度都可以, 也可以適用於大尺度上面, 所以物理上方程式都是通的, 唯一的差別是, 在不同尺度上面, 某些方程式變得比較重要, 例如在小尺度的世界裡面, 表面張力的影響很大; 但是大尺度裡面, 表面張力就可以忽略.

用Naiad模擬大象跑過黏稠的泥沼(要觀看影片影點這裡, 或是download

問: 在做需要計算黏度的專案的時候, 要考慮到什麼?
答:Naiad會計算黏度, 不同於其他軟體Naiad會分別計算速度的向量, 因此結果會更精確, 也因此Naiad算出來的黏稠流體會有寫實的纏繞效果.

從用戶的角度來看, Naiad調整黏度很容易使用. 甚至還可以用3D材質來控制黏度的變化, 同樣的觀念也可以用來控制流體的密度.


Naiad density viscosity RND from Igor Zanic on Vimeo.
問:Naiad可以怎樣整合到工作流程裡面? 要怎要輸出到Houdini?
答:沒有預設的輸出. 但提供裡一個圖表, 有點像是NUKE裡面合成的節點那樣. Naiad圖表般含了file operators ,可以讓你把資料快取到硬碟裡面, 你可以輸出成mesh, 也可以輸出成3D場的資料, 例如速度, 也可以輸出成粒子.

Naiad圖表裡面也有render operators. 目前只支援Solid Angle’s Arnold renderer , 而我們也有跟Chaos Group合作, 讓它支援使用V-Ray. 所以輸出的時候不只是可以輸出成mesh 甚至還可以算圖!

最常用的整合方式是透過我們的外掛軟體. 例如Maya 與Houdini的外掛. 例如你可以把動態的角色自Maya輸出, 輸入到Naiad, 計算流體模擬, 然後在把資料導回到Maya裡面.

問:關於當今流體方面的研究有趨緩嗎? 變得更加成熟?
答:當今大部分的研究都希望用最新的硬體架構讓計算更有效率, 但是對於多物理(multiphysics) 例如同時計算流體與軟體, 或是剛體, 這方面的研究還有很多要做.

問:我們如果用Naiad來算流體 速度會多快?
答:跟解析度有關. Naiad很穩定, 不管你計算的step有多少次. 如果step太少的話結果會過於平滑, 所以大部分的人會用多一點的粒子, 高解析度來計算出寫實的流體效果.

----翻譯完畢----

[相關文章]