當前位置:首頁 >教程首頁 > Houdini >Houdini vex 模擬交通係統案例教程分享

Houdini vex 模擬交通係統案例教程分享

發布時間:2020-04-23 11:53:27

Hello . 大家好!今天給大家帶來一個比較有意思的Houdini vex 模擬交通係統案例教程分享,我是神棍趙。

0.webp.jpg

1、介紹

我的名字叫Franco Pizzani,參與過《使命召喚:無限戰爭》和《使命召喚:第二次世界大戰》等遊戲的開發。大約從那時起,我開始在空閑時練習Houdini,當時隻是為了學習一些新東西,但是,在某個時候,我意識到我想進一步深入掌握它。所以就參加了加拿大溫哥華的 Houdini FXTD program 。

2、項目的開始

這是我的Houdini課程中的第三個項目,我們需要創建一個人群係統。前幾講涵蓋了有關人群及其行為的基本概念。我們進一步了解了Houdini內置的人群工具,該工具可以與人群求解器一起自動為您完成所有操作。盡管人群求解器和內置工具非常出色,但我確實想嚐試使用VEX可以做一些不同的事情,所以我認為交通係統將是獨一無二的。在我看來,交通係統是如此機械,它將使我有機會控製和設置使交通係統運行的所有必要屬性,例如矢量和力。同時,模擬交通係統似乎並不是典型的Houdini項目,因此我將其視為一舉兩得的事。

3、項目的基本情況

該項目的核心是一個solver求解器和一堆pointwaranger節點(您可以在其中寫VEX的節點),通過vex讀取和設置屬性。然後,這些屬性用於基於不同條件來定義屬性狀態。在此項目的每個幀上都會計算出90多個屬性,這些屬性的範圍從我所謂的“初始屬性”開始,這些屬性是原始數據,由方向矢量,距離和模擬中產生的其他信息組成。然後分析這些初始屬性以設置“狀態屬性”。這些狀態屬性用於定義車輛的狀態,這些狀態是“加速”,“開始”,“停止”或“以最高速度行駛”。

例如我前麵有一輛與我在同一車道上的車輛,那麼它的方向與我的方向相同,並且到前麵的車輛的距離小於預定的製動距離,這時“在前方車輛製動”屬性將為true,從而觸發“開始”狀態。當觸發此狀態時,有一個製動節點負責根據距離減小施加到我的車輛上的力,從而減小我的速度和與前方車輛的距離,以防止其發生碰撞。如果我的車輛處於“製動”狀態並且我的速度等於0,則表示我已停止,因此將觸發“停止”狀態。如果車輛正在製動或停止的狀態屬性改變,它將變為“加速”狀態,再次施加力。

這些狀態屬性的傳遞都是通過pcopen和neighbor等點雲係列函數實現的。下圖中是我的節點圖,盡可能的保證節點圖的組織化和模塊化。solver求解器將在每一幀中從左到右以及從上到下執行這些節點。

1.webp.jpg

4、道路與交通結構

具體的道路係統是以現實生活為參照,仔細觀察,提煉規則。我非常喜歡現實生活的交通路網,通過觀察學習我了解了車輛行駛,交通信號燈,停車標誌,避開行人的規則。我花了一段時間才正確設置交通信號燈模式。

當我剛開始該項目時,我先進行了原型製作,使車輛沿著道路(在單車道上)行駛並互相製動/停車。後來,當我將其擴展到每條道路有1條以上車道時,我看到車輛似乎無緣無故地刹車和停止,但它們前麵沒有其他車輛。經過一些調試後,我發現它們的停止是因為我沒有執行任何判斷來檢查前麵的車輛是在當前車道中還是在相鄰車道中,因此很多工作確實按照現實生活的邏輯進行修改。在檢查設置狀態的條件時,重要的是要檢查正在發生的事件及其優先級。車輛可能正在刹車減速以在紅燈處停車,但是如果在到達紅燈之前有停止的車輛,則必須先停車。

在項目中我采用樣條線來引導車輛。每個樣條都有一個“道路名稱”,並且知道與之相連的樣條是什麼。當車輛在道路上行駛時,它會從樣條曲線讀取這些屬性,從而可以知道下一條街道在哪裏以及它們可以走到哪裏。如果選項為2或更多,則每輛車將隨機選擇下一步。這是我最不滿意的項目部分,因為設置這些樣條線需要一些手動工作去放置,並設置道路屬性。

2.webp.jpg

5、管理車輛

我在項目中使用速度屬性來移動點:以米/秒為單位進行計算,如果車輛的速度為25,則意味著它以每小時90公裏的速度行駛。由於每個車輛都知道它們的位置和所要行駛的道路,因此可以計算從車輛的位置到所要行駛的道路的方向向量,然後在該向量的方向上施加力。一旦我們在道路上,將沿道路的行駛方向施加力,這樣,車輛就可以沿著道路正常行駛。

項目中也運用了一些其他的數學概念(例如點積和叉積)。使用點積,我們可以輕鬆確定車輛之間的前後關係。如果我的方向向量和到另一輛車的方向向量的點積大於0,則意味著另一輛車在我前麵。如果小於0的結果表示另一輛車在我後麵。

3.webp.jpg

6、speedmax屬性

在生成車輛時,我立即為它們分配一個隨機的“ speedmax”屬性。車輛的speedmax屬性在每秒11.1至17.7米之間,相當於每小時40至64公裏的速度。無論施加多大的力,都不允許速度超過指定值。

同時,道路具有真實的比例大小,並且車輛以每小時64公裏的最大速度行駛,這意味著車輛在道路上行駛一些時間後會離開模擬。因此,我正在準備模擬一個14000幀,這相當於大約10分鍾的解算,大約需要5分鍾來模擬。

另一個重要方麵是通過隨機變化。每輛車都會獲得隨機值,例如它們開始停車時與紅燈之間的距離,停在前方車輛後方的距離或者停車後重新啟動的時間等隨機值,所有的這些值的隨機變化都會使解算更加逼真。

4.webp.jpg

產生製動和停止距離的隨機值

車輛始終可以獲取需要刹車或停車的屬性狀態,並且當距離低於上麵屬性中定義的值時,它們會通過減小承受的力來減慢速度,剩下的就是求解器通過降低其速度。車輛源的幾何形狀經過仔細設置,以1米長為標準,這樣我就可以根據實際單位為每輛車輛分配pscale屬性(大小)。由於每個車輛都知道它們的尺寸(pscale)和必須製動的車輛的尺寸,因此我可以準確地計算出它們從前保險杠到後保險杠的距離。

7、紅綠燈與行人

我認為添加行人會使其看起來更加生動複雜。並且我在之前的製作過程中已經做好了添加行人係統所需要的屬性,以及檢測其他車輛並為行人工作而刹車/停車的邏輯。這是Houdini的優點之一:進行一項設置,並通過針對不同的事物進行一些調整來重複利用。行人需要做更多的工作,因為現在他們的行為有些漫無目的,他們隻是盲目地穿過馬路,理想情況下,我會執行一些邏輯以使行人在過馬路之前停下來觀察車輛的往來疏密,直到有安全的空隙或紅綠燈變為綠色時再穿過馬路。

交通信號燈是設置的重要組成部分,如果沒有交通信號燈,在交通流量大的情況下,這個十字路口可能會很混亂。

我將交通信號燈視為具有通過或不通過狀態的實體。將這些插入解算中,每輛車可以一直獲取當前狀態以及與會影響它們的最近紅綠燈的距離。現在已經預定義了交通信號燈狀態模式,但是我正在探索使它們根據車輛流量自動更改紅綠信號的方法。

8、車輛生成

我為車輛定義了不同的生成源,每個源都有特定的生成頻率,生成數量和生成種子,以提供更多的變化。我現在設置的值是在交通流量與我的參考鏡頭相匹配的最佳值。

5.webp.jpg

在下圖中,您可以看到當我同時生成四倍的車輛時會發生什麼。交通堵塞模擬器!

6.webp.jpg

9、後記

我不能保證何時能夠與人們分享更多的細節,因為在學校的時間非常緊張,我必須將自己的時間用於下一個項目。最重要的是,該係統仍然是一個半成品,有很多地方需要調整和修複。不僅如此,就像我之前說過的那樣,目前還有一部分內容需要手工完成,因此,我會考慮一種解決方案,以使其變得更加程序化,更直接易用。

3D藝術家:Franco Pizzani

訪談 :Kirill Tokarev

來源:Thepoly

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

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

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

微信掃碼入群領福利

掃碼領福利最新AI資訊

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

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

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

×

同學您好!

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