簡體   English   中英

Box2d raycast與AABB查詢性能

[英]Box2d raycast vs AABB query performance

我目前正在嘗試提高使用box2d物理(實際上是box2dlights)的游戲的性能。

我有一種方法可以在已知區域內制作幾個(比如說大約16到64個)光線投射。 我想知道在第一步中對該區域進行AABB查詢是否是一個好主意,以檢查光線投射是否可以報告。 如果沒有,我可以跳過光線投射。 但是,如果AABB查詢找到了我必須制作光線投影的內容,並且查詢是多余的。 AABB查詢與光線投射相比有多快(特別是在box2d中)? 如果我可以依次跳過一些光線投射,那么制作經常多余的AABB查詢是一個好主意嗎?

你真的應該至少以一種背后的方式確定你是否真的需要添加一個AABB測試階段。

聽起來你實際上是在使用光線投射來進行照明。 如果是這種情況,大多數情況下你的光線投射實際上會相交,這確實是有道理的。 您可能在您的環境中有一個外邊界。 這意味着,在這樣的環境中實施的AABB測試最有可能在大多數情況下(如果不是所有時間)都會相交。

此外,還假設為了2D照明目的而以徑向方式執行光線投影,從中心位置開始的光線的AABB在某種意義上有些退化,即每條光線(光線長度無限)將會導致4個可能的AABB之一:

x=0, y=0, x -> infinity  y -> infinity
x=0, y=0, x -> infinity  y -> -infinity
x=0, y=0, x -> -infinity y -> infinity
x=0, y=0, x -> -infinity y -> -infinity

如果您使用64個徑向等距光線進行光線投射並且天真地執行64次AABB檢查(每次光線投射一次),這將是浪費時間,例如,具有正x和正y方向的所有16條光線將分解為相同的AABB檢查(上面列出的第一個)。

您可以執行類似於總是執行這4個AABB檢查的事情,如果其中一個不相交,那么您可以跳過16個光線投射。 但只有當你一直走到環境的邊緣時才會發生這種情況。

AABB並非非常適合加速光線投射,因為只有接近與軸對齊的光線才能通過AABB(軸對齊邊界框)進行良好建模。


還存在一個替代思維過程,可以向您顯示AABB測試不太可能有用。

使用Box2D執行光線投射的目的是因為該庫提供了復雜的機制來為您加速光線投射。 iforce2d的世界查詢看

Box2D為[世界查詢]提供了兩種工具 - 射線投射和AABB測試。 雷鑄......我們不是這樣做的嗎? 是的,我們以手動方式完成,循環遍歷世界上的每個燈具,並檢查光線對所有燈具,找出哪一個最接近。 當場景中有大量燈具時,效率非常低。 更好的方法是使用世界本身的RayCast功能。 這允許引擎聚焦在它知道靠近射線路徑的固定裝置上。

該庫將使用其內置的世界空間表示及其內置的加速結構來確定特定光線將與哪些物體相交。 這實際上是box2dlights自己的存在理由。

因此,沒有使用AABB(Box2D提供的其他類型的世界查詢)來嘗試增加它的目的。 如果確實這是一件明智的事情,那么Box2D已經為你在光線投射功能的引擎下做了那件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM