當前位置:首頁 >教程首頁 > Houdini >Houdini中給火花渲染準確的運動模糊

Houdini中給火花渲染準確的運動模糊

發布時間:2018-11-17 19:57:24

估計大家都知道使用運動速度來進行運動模糊的渲染,但是往往這個方法得到的運動模糊都是線性變化的,雖然乍一看沒什麼問題,但是如果想要每一幀的模糊軌跡也是有曲線變化的而不是僵硬的直來直去的話,使用trail算個速度來做的運動模糊是永遠做不到這一點的。

這裏我想通過常用的火花(spark)的運動模糊來講一講我所了解的一些比較好的方法。

所謂渲染中的運動模糊無非就是差值算法。目前使用的比較多的主要有兩種。第一種就是上麵說到的直接使用速度來線性差值,這種方法會計算每一個點的速度方向,計算出前一幀或者後一幀的位置,並與當前幀在兩點之間進行線性采樣這樣就得到了運動的感覺。另一種直接是算的幀與幀之間的位移,然後把幾何體變形差值來算出中間的模糊狀態。其實兩種方法大同小異,但是後者有一個好處是如果渲染目標是有substep的話,那麼會優先使用這些substep找到幀之間的中間值,那麼substep就是我們得到準確運動效果的模糊。

在詳說之前先看三張圖的對比:




三張圖都是用的同一個點的旋轉動畫,在這裏為了作比較我把相機shutter開為1,也就是每幀之間是全長度差值的,另外模糊偏移是設置為的0,也就是前幀取一半後幀取一半來完成當前幀的模糊渲染。第一張圖直接使用的速度值來進行插值模糊,能夠很明顯的看得出最後形成的圖案連一個閉環都算不上。第二張圖使用的是傳統的位移變換插值,但是在每一幀之間的substep都是線性變換的,所以能夠看出來一個圓環高速轉起來結果變成了一個類似多邊形的效果。最後一個是用我的方法計算出來的中間值,雖然不是絕對完美的匹配了圓環,但是曲線的效果非常明顯,而且已經非常符合眼睛看到的殘影。

如果我們在houdini裏麵使用的是腳本或者表達式來驅動的動畫,我們大可不必為中間的substep擔心,因為houdini會自己幫我們找到準確的位置,因為所有路徑都是計算出來的,不論精確到哪一個時間點上。而如果我們把這些動畫以幾何體的形式轉存到硬盤上,那麼上麵說的substep就會全部轉成每一幀之間線性的插值(像圖2)。而且這一點還是在拓撲和點數前後保持一致的前提下。在後麵會講怎麼解決像粒子在時間線上點數不斷變化的問題。我們可以把線性的位移動畫直接提取到chop裏麵來進行更高級的非線性插值,從而達到運動模糊能夠有圓滑的曲線感。如下圖:


通過把P點數據以動畫形式導入進去得到t[xyz]三條曲線,以當前幀為基礎,分別多導入前後兩幀(其實前後一楨也可以,不過兩幀更安全),在使用resample節點在段與段之間加入新點。這裏值得注意的是要使用cubic,也就是這個帶來了非線性的感覺。而且這個方法也確保了之前的所有控製點都在曲線上,所以不會改變每個整數幀上點的位置。

插值的方法就是這個,再來講一講另一個用在火花上非常實際的問題,那就是點數不穩定的問題。上麵所講的方法一定是要建立在前後幀點數一定的前提下。所以如果粒子的生命不夠動畫長度的話,很可能就會使上麵的方法直接死掉。不過這個問題也有一個突破口,那就是粒子有個點屬性叫id。當動畫調整完之後,我們拉到最後一幀可以很明確的知道最後一個id數是多少,這個數也代表了粒子一共出現過多少個。

解決這個問題的方法就是首先直接生成id最大數量的默認點,位置隨便在哪都好(最好把初始位置放在發射源的中心點)。然後通過比對id數是否和自己的點數一致,一致的話把粒子的位置和其他必要屬性直接傳個生成的這個固定點,這樣就從變的點交接到了固定數目的點上去了。這個過程我使用的一點點vex:

複製代碼

 1 int popNum = npoints(1);
 2 vector startPos = point(2, "P", 0);
 3 
 4 for(int i = 0; i < popNum; i++){
 5         int popId = point(1, "id", i);
 6         if(@ptnum == popId){
 7                 vector popPos = point(1, "P", i);
 8                 @P = popPos;
 9                 f@alpha = 1;
10                 break;
11         }else{
12                 @P = startPos;
13                 f@alpha = 0;
14         }
15 }

複製代碼

這裏的alpha是想讓那些還沒有動的點暫時渲染時不可見。

我之前說最好把初始位置放在發射源的中心點,是因為其實這個方法結合上麵的模糊差值還是有一個小小的問題,那就是從默認點位置變換到粒子發射的點上,中間這段距離也會產生模糊,但是這個模糊是絕對不正確也不需要的,但好在粒子一般都是從物體表麵或者體積內部發射出來的,我們完全可以用發射源來遮住這一幀的錯誤。

下麵看看火花的效果對比,為了看效果快門還是用的1,但是明顯能看出孰優孰劣了:



华体会hth体育网 賞析
  • 2101期學員李思庭作品

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

你擔心的問題,火星幫你解答

微信掃碼入群領福利

掃碼領福利最新AI資訊

點擊谘詢
添加老師微信,馬上領取免費課程資源

1. 打開微信掃一掃,掃描左側二維碼

2. 添加老師微信,馬上領取免費課程資源

×

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯係,請保持電話暢通!
確定