Unity Obi插件一


Obi框架

  •   Obi是一個基於粒子的Unity物理學插件的集合。Obi的內容一切都是被稱為粒子的小球體組成。
  •   粒子之間可以相互影響,通過使用約束來影響其他物體。

ObiSolver

  • ObiSolver是一個執行物理模擬的組件。ObiSolver暴露了一些全局模擬參數,如重力、慣性尺度或速度阻尼。 

       

 

 

       

 

 

      

 

 

ObiUpdater

  • ObiUpdater是一個組件,可以推進一個或多個ObiSolver的模擬,使它們與Unity自己的物理引擎保持同步。Obi中包含了幾種類型的ObiUpdater,以覆蓋常見的用例,但如果你需要精確控制模擬更新周期,可以自行編寫ObiUpdater。

       

 

 

 ObiActorBlueprint

  • ObiActorBlueprint是一種asset,它存儲了一堆粒子和約束。它本身並不執行任何模擬或渲染。只是一個數據容器,與紋理或音頻文件不一樣。ObiActorBlueprint是由網格(ObiCloth和ObiSoftbody)、曲線(ObiRope)或材質定義(ObiFluid)生成的。

 ObiActor

  • ObiActor是在ObiSolver中實例化一個ObiActorBlueprint的組件。所有的ObiActor必須是ObiSolver的孩子。多個ObiActor可以共享同一個ObiActorBlueprint。並且可以重復使用同一個ObiActorBlueprint。ObiActor的例子有一根繩子、一面旗子、一個彈力果凍或一個噴水器。
  • 每個ObiSolver都會維護幾個列表或每個粒子的屬性:位置、速度、半徑等。最初,這些列表沒有元素。每當一個新的ObiActor被添加到ObiSolver中,就會發生這些步驟。
  • ObiActor要求ObiSolver根據ObiActorBlueprint的需要分配盡可能多的粒子。ObiSolver將每個粒子分配到它在其內部數組中找到的第一個空閑槽中。當從ObiSolver中移除ObiActor時,分配的粒子之間會出現空隙。正因為如此,在ObiSolver數組中,屬於同一角色的粒子可能不會相鄰。
  • ObiActor會復制ObiActorBlueprint中發現的所有約束,並更新它們的粒子引用,使它們指向正確的ObiSolver陣列位置。更新ObiSolver中的活性粒子數量。

Obi具體成員
 Actors

  •  一塊布、一根繩子、一個流體發射器或一個軟體,它們都是Actor。所有的Actor都以一個Blueprint作為輸入。Actor將實例化Blueprint中包含的信息(粒子和約束),這樣Solver就可以對其進行模擬。可以在多個Actor之間重復使用同一個Blueprint。
  •  如果想對一個Actor進行模擬,它必須是Solver的子角色。在運行時,可以修改一個Actor的父親為某一個Solver,也可以將它從當前Solver的層次結構中移除。

        

 

 

 

  • 無論你要創建什么類型的Actors,進行模擬所需的步驟都非常相似:

               1.生成一個適當類型的Blueprint資源,然后根據需要進行編輯。
               2.創建Actor,並為其提供Blueprint。

 

  • 可以通過進入GameObject->3DObject->Obi來創建任何Actor。
  • 例如,要創建一個布的Actor,GameObject->3DObject->Obi->Obi Cloth,要創建一個繩索GameObject->3DObject->Obi->Obi Rope等等。
  •  當第一次在場景中創建一個actor時,Obi會尋找一個ObiSolver組件來添加這個actor。如果它找不到合適的Solver,將自動創建一個。當創建一個Solver時,它也會自動將其添加到場景中找到的第一個  ObiFixedUpdater中。
  • Actors暴露了一些參數,讓你可以修改它的行為(例如,可以改變撕布所需的力,或軟體的可塑性)。改變這些參數不會以任何方式影響原始Blueprint,只會影響由actor生成的實例。
  • 對於每個Actor的Bluprint,將在后續的文章中更新。

                 繩索:模擬為一條粒子鏈,通過約束條件將它們連接在一起,迫使它們彼此保持一定的距離(距離約束)

                

 

 

 

                 布:一塊正方形的布被表示為一個二維的粒子網格,通過距離和彎曲約束連接在一起
流體發射器:生成新的粒子,排斥或吸引周圍的其他粒子,試圖保持一個恆定的密度(單位體積的質量)

                 

 

 

                 流體發射器:生成新的粒子,排斥或吸引周圍的其他粒子,試圖保持一個恆定的密度(單位體積的質量)

                 

 

 

 

ObiSolver

  • ObiSolver組件是Obi中最重要的組件。它負責模擬粒子物理和強制約束。關於ObiSolver,要記住三個重要的事情
  • ObiSolver可以被添加到場景中的任何GameObject中,並且在同一場景中可以有多個ObiSolver同時工作。
  • 每個Actor都需要成為Solver的孩子,才能獲得其模擬的更新。
  • 每個Solver都是完全獨立於其他Solver的。因此,被不同Solver更新的Actor不會相互影響/碰撞。只有同一Solver中的Actor才會相互影響。
  • Solver總是在局部空間進行模擬。這意味着,平移、旋轉或縮放Solver將僵化地改變整個模擬。
  • 但是,可以將Solver線性/旋轉運動的一定比例以慣性力的形式注入到模擬中。例如,若想控制整體角色運動對服裝模擬的影響程度。為此,Solver暴露了兩個參數來獨立控制線性和旋轉慣性力。
  • Simulate when invisible //不可見時仍保持模擬

                  當所有攝像機都不可見時,這個Sovler是否還保持模擬?如果模擬要求需要隨時更新,則需要開啟此功能。當場景中存在多個Sovler,但這些Sovler在任何時候都不可見時,需要禁用它以提高性能。

  • Mode //模式

                  Sovler可以在2D或3D模式下進行仿真。在二維模式下,模擬只發生在XY平面上。
                  2D模式通常與2D碰撞器的使用結合在一起。但是,為了方便起見,你也可以將3D碰撞器與2D模式一起使用。

  • Interpolation //插值

                   用於渲染粒子的插值模式。None擁有最快的速度,但Interpolate會產生更多的視覺效果。
                   Interpolate 最適合慢鏡頭效果,它可以避免Unity的timescale<1時產生的停頓。

  • Gravity //重力

                   在這個Sovler中施加於粒子的重力方向和大小,用Sovler的局部空間表示

  • Damping //阻尼

                  速度阻尼應用於粒子速度。增加阻尼以減少粒子的動能。
                  高阻尼值對模擬水下效應很有用。低的非零值(例如0.15)可以在大多數情況下提高模擬的真實性,代替空氣的動力阻力。

  • Shock propagation //沖擊傳播

                  值變高會人為增加支撐其他粒子的質量。可以實現更好的堆積穩定性。

  • Max Anisotropy //最大各向異性

                 Obi中的流體粒子的形狀可以是橢圓形的,而不是完美的球形。這是為了讓它們的形狀更好地適應它們所代表的物體表面,實現更精確的碰撞檢測和更平滑的渲染。
                 最大各向異性可以讓你確定橢球體半徑之間的最大比例:數值為1將迫使所有粒子都是球形的(停用各向異性),數值大於1將允許粒子變得更加橢球化。

                 啟用各向異性(最大各向異性>1)可以極大影響流體渲染。可以在使用較低的流體分辨率時獲得更平滑的流體表面。

  • Sleep threshold //睡眠閾值

                 任何動能低於這個值的粒子都會被凍結在原地。當你不想讓速度或力的微小變化擾亂一個粒子,使它看起來像在抖動或緩慢移動時,可以開啟這個功能。如果你想讓粒子的位置受到任何作用在它們上                     的力的影響,需要把它設置為零。

  • World linear inertia scale //世界線性慣性標尺

                 控制Sovler變換的世界空間線性慣性有多少被應用到粒子上。值范圍從0(無)到1(100%)。
                 移動中的Sovler包含一塊布,線性慣性標度設置為1。當解算器突然停止時,布根據慣性繼續向前移動。當解算器恢復運動時,布收到慣性向后。

  • World angular inertia scale //世界角慣量表

                 類似於前一個屬性,但控制的是角慣性(旋轉)而不是線性慣性(平移)。注意,離心力和科里奧利力都被計算在內。

                 旋轉求解器中包含一塊布,角慣性刻度設為1。注意離心力如何在旋轉時將布抬起。  



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM