2010/12/09

Virtual Partitioning Krakatoa 虛擬分區的觀念

篇的是翻譯自maxscript大師Bobo在他的部落格發表的文章, 原標題為"Virtual Partitioning in Krakatoa 1.6.0" . 裡面提到他想到一個方法, 可以用較少的硬碟空間就可算出粒子隨機排列的效果, 他用了epiphany這個字來形容他的發現, 可見這個發現讓他很高興, 很重要. 可惜的是, 原文已經被刪除了, 或許是怕影響到Krakatoa 1.6.0的銷售吧?! 原因不得而知.


----以下為翻譯----
現在是十一月十三日早上五點

這是值得紀念的一刻,因為我剛剛頓悟了某個觀念!

讓我們先回顧一下歷史
如果你是Krakatoa的用戶,你應該知道,分區(partition)是粒子根據來源進行位置與速度隨機變化儲存到硬碟的一種資料。先前的版本把這樣的動態系統套用到Particle Flow、TP與傳統的粒子系統當中,之後的版本則是添加了對不可分區的粒子進行分區(partitioning the unpartitionable)的功能,採用的是高頻雜訊修改器,以此來隨機化粒子,例如茶壺的點,或是由RealFlow模擬而來的PRT Loader,或是任何一種類型的點雲。

後來,就在v1.6.0推出之前,一種全新的,帶有實驗性質的PRT Source出現了! 很少人知道這個東西 (誰要求寫這個東西的,還有誰寫這個東西的就會知道了) 。簡單說,PRT Source物件讓你可以對第三方的粒子來源進行載入、形變 、修改、算圖。假設你寫了一套程序性粒子產生器,你當然不會希望所有的跟變形 KCMs有關的程式碼都要自己來寫。

利用PRT Source,你可以用所有的功能,只要指定幾何體,輸出成Krakatoa particle stream檔案格式,這樣你就會有自己的粒子來源與PRT Source,選中你的粒子來源,你就可以在螢幕上看到粒子,以Krakatoa算圖,而且還可進行變形、選取、刪除等modifier的套用,還有KCMs。

說到這裡你能猜到我的想法嗎?

我頓悟是這樣的:
一般的分區會取用PRT Loader,然後套用Noise modifier,接著儲存。例如10個分區把隨機化的粒子位置儲存在硬碟裡,然後你建立新的PRT Loader,拾取那10個分區,接著算圖,你會看到十倍密的粒子,跟原本的粒子相比位置是分散隨機的,因此可產生好看的隨機效果。

而我所謂的虛擬分區粒子(Virtual Partitioning),只需要一個不帶有Noise modifier的PRT sequence。步驟是,建立一個PRT Source,選取PRT Loader作為資料來源,接著套用Noise modifier,然後呢,你就把這個PRT Source複製九個,總共有十個PRT Source。如果你螢幕顯示變慢的話你可以把粒子顯示關閉。最後,改變這十個PRT Source的Noise modifiers的隨機屬性(Seed),例如0,1,2,3等等。

算圖
所得到的結果跟一般的分區沒有不同!但是佔用的硬碟資料量就沒有那麼多, 通常會更少,

例如,我用茶壺,以半徑22.695作為測試,轉換成PRT Volume,把抖動關閉(Jitter OFF),距離設為1.0,細分設定為1,這樣能產生292,307個粒子。而把這個PRT存到硬碟會占用2,063KB硬碟空間;那若是我們用一般的分區方式,套用Noise Modifier Scale設為0.01,強度設為2.0,三軸都這樣,會產生20個檔案,每個檔案占用4,780KB的硬碟空間。(為何是20呢?因為Krakatoa必須要儲存第零個frame與第一個frame,這樣可以避免PFlow對-1的frame進行分區,但是這件事說來話長…) 而一般的grid檔案與diffused position的檔案的主要不同在於壓縮的方式,regular grid具有比較好的壓縮。

這兩種粒子點雲算圖出來會得到一樣的結果。一個PRT Loader,用了10個分區, 用一盞聚光燈照明,總共花了4.052秒算圖;而如果是複製了10個PRT Sources,並且對這十個PRT Sources進行隨機化處理,用了單一regular grid檔案,算圖時間花了5.349秒,跟傳統作法多花了1.297秒,或是慢了1.3倍。

因此這用了這個方法,你僅僅損失30%的算圖時間,這是因為在算圖時間進行的Noise modifiers計算。因此,我只要花2,063KB的硬碟空間就可以產生跟花費47,800KB硬碟空間一樣的效果!這樣可以節省23.17倍的硬碟空間耶!

當然囉,多個PRT Source的產生可以寫成script。所以今天晚點我會寫一個『Create Virtual Partition from PRT Loader』的腳本!

要來睡囉。

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

[相關文章]

No comments: