精選文章

SmallBurger Asset Home

  SmallBurger

2022年6月8日 星期三

關於超大地圖Recastnavigation尋路資料建立的做法

 由於專案有複雜超大地圖(unity單位15000*15000)的需求,在Recast資料建立上遇到了一些問題…

  1. 整塊大地建立不出來,發生了以下的錯誤…
    if (maxVertices >= 0xfffe)
    {
            ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Too many vertices %d.", maxVertices);
            return false;
    }
  2. 就算是分了區塊,但因為Recast底層建立的函式,無法並行建立,所以造成了建立時間過久的狀況(超過一天以上)
解決方案:
  1. 自行實作一個建立console工具程式,並用批次檔來運行多個執行檔,來達到並行建立區塊的目的。
  2. 最後將相關的區塊移到unity裡來進行彙整,並輸出跨區域尋路的整塊地圖。
利用美術的相關模型生成柱狀體檔格資料:(原本可以直接使用美術的mesh直接生成,但因為資料容易有不合法的問題及因為專案只需要2D的尋路,所以為了減少生成問題,使用了這個方式)




















利用外包計算(其實只是做格子的拜訪)的演算法,來算出各區塊的包覆範圍,分割地圖區塊:


將各個Console程式計算的區塊地圖彙整到unity,進行地圖合併及提供之後計算跨區域路線計算:



















計算跨區域路線,並存檔,完工…



















後記:實測建立時間可以節省2/3以上,目前覺得還要回來unity進行合併,多了一個步驟,不知道之後有沒辦法分塊,合併及路線計算能在一個步驟就完成,以下是相關的視頻:






Dream continues in...


沒有留言:

張貼留言