UE4學習筆記--EQS系統

最近在研究虛幻4引擎的EQS系統,看了下官方對EQS的解釋文檔(官方文檔鏈接:https://docs.unrealengine.com/en-US/Engine/ArtificialIntelligence/EQS/index.html)及相關源碼,熟悉了EQS在AI製作時的應用和使用,文章爲本人學習之餘所整理筆記,如有紕漏歡迎指正交流。

一、EQS原理:

EQS(Environment Query System),直譯爲環境查詢系統,可以理解成對當前場景狀態的掃描或者檢查,往往配合AI行爲樹一起使用。其實現原理比較好理解,簡單來說就是將場景環境劃分,一般來說是按密度劃分成一個一個點,當然也可以以場景元素Actor來進行劃分,將環境劃分好後,再按照相應的設定規則對劃分項(點或Actor)進行打分,最後得分最高的Item即爲系統所找到的最優查詢結果。EQS系統將其最優查詢結果告知AI,AI行爲樹則會對來其進行相應的決策及執行。

二、EQS組成部分:

使用EQS前我們最好知道EQS的都由哪些部分組成,各部分的分工都是什麼。虛幻4官方文檔對其各個組成部分的名詞解釋已較爲詳細,以下是本人對官方文檔中名詞解釋的簡單整理:

1.EnvironmentQuery(環境查詢資產)

EQS資產,我的理解一個EQS資產就是一個可供AI使用的EQS實例。它相當於是一個容器,裏面裝着根據不同需求設計好的各種查詢規則(即Genetators和Tests)。我們做好一個EQS資產後,最終,其會在AI的行爲樹節點中實例化,並在行爲樹節點運行時執行EQS相關功能,執行結果也會保存爲黑板變量供行爲樹來決策使用。

2.Genetators(採樣生成器)

採樣生成器規定了我們EQS的採樣點的生成規則。它以某一種規則在使用者周圍進行參考點選取,將選取的採樣點(可能是位置點也可能是Actor)用於測試。


如圖,我們打開創建好的環境查詢資產EnvironmentQuery後,在根節點下拉即可創建需要的Genetators。目前引擎提供的Genetators有以下這些:

  • Actors Of Class 採樣場景中的Actor對象,按類型匹配,使用所匹配的Actor對象作爲採樣點(可以設置採樣中心參照點及查詢半徑範圍);
  • Composite 複合多種生成器,用來組合生成器使用;
  • Current Location 使用當前位置作爲採樣點;
  • Points Circle 環形點生成器,選取方式使用參考點向四周轉圈發射射線。如果觸碰到任何物體則將碰撞位置作爲採樣點,如無碰撞則以設定最大半徑爲採樣點(可以設置採樣查詢半徑及發射間隔角度);
  • Points Cone 錐形點生成器;
  • Points Donut 環狀點生成器,區別於Circle,此生成器如同水波,一層一層向外擴散,直到最大半徑;
  • Points Grid 簡單的格子點生成器,不對採樣點進行路徑規則校驗,導航不可達位置也將被收集;
  • Points Pathing Grid 路徑格子點生成器,採樣點必須是導航可達,需要滿足導航規則校驗;


3.Tests(測試規則)

測試規則的作用爲對採樣生成器找到的採樣點進行打分或剔除,最後從通過所有測試規則的採樣點中找到打分最高的採樣點,即爲EQS查找到的最優結果。當我們在EQS資產中創建好採樣生成器Genetators之後,就可以在Genetators上添加各種Tests,目前引擎提供了一下Tests供使用:

  • Distance 距離測試,將採樣點與參照內容進行距離測試,默認是距離越遠分數越高,反之可將ScoringEquation設置爲InverseLinear;
  • Dot 點乘測試,用於朝向方位打分,得分區間爲0-1,默認正面爲1背面爲0,可勾選AbsoluteValue,正面、背面爲1,左右兩邊爲0;
  • Gameplay Tags 標籤測試,用於根據Tag對採樣點進行類型查詢及剔除;
  • Overlap 通道測試,用於根據通道標記對採樣點進行查詢及剔除; 
  • Pathfinding 尋路測試,將採樣點與導航進行測試,可達則分數1,不可達爲0,會返回一個可達的採樣點;
  • Pathfinding Batch 批尋路測試,與上面不同的是它會返回所有可達點,供下個測試項目使用;
  • Project 投射測試,用於修正採樣點位置,分爲導航投射和碰撞投射;
  • Trace 射線測試,存在遮擋分數爲1,不存在爲0;
  • 此外,用戶也可以根據需要自己編寫測試規則。

每個Tests還需設置其TestPurpose,即測試目的,有以下三種:

  • Score Only 僅打分,根據規則爲採樣點打分;
  • Filter Only 僅篩選,使用規則對採樣點進行踢除,用於縮小測試範圍,將符合篩選條件的進行保留,負責踢除;
  • Filter and Score 篩選並打分,綜合上兩種操作。

4.EnvQueryContext(查詢內容)

查詢內容可配置在Genetators或Tests上,在測試節點中,針對不同的測試方式需要選取不同的參照物進行測試參與。Context的功能便是提供參照物,拿採樣得到的每一個點,分別與Context進行測試比較,然後將結果以分數形式標記於採樣點。


EnvQueryContext默認提供了4種參照物返回方式:

 

  • Provide Single Location 提供一個三維向量在測試環節中與採樣點進行比對;
  • Provide Single Actor 提供一個Actor在測試環節中與採樣點進行比對;
  • Provide Location Set 提供一組Actor在測試環節中與採樣點進行比對;
  • Provide Actors Set 提供一組三維向量在測試環節中與採樣點進行比對;

三、EQS使用:

EQS目前在虛幻4引擎中是還一個測試功能,默認並沒有開啓。我們如需使用的話需提前手動開啓引擎EQS功能。具體方法如下:
Edit - Editor Preferences - General - Experimental - AI - Environment Querying System

開啓好後,就可以使用EQS了,具體使用步驟根據前文整理如下:

  1. 創建AIPawn、AIController及AI行爲樹;
  2. 創建EQS資產(Environment Query);
  3. 在EQS資產中添加採樣生成器Generators用於收集採樣點;
  4. 根據需求向Generators中添加測試規則及EnvQueryContext;
  5. 行爲樹中添加EQS查詢節點;
  6. EQS查詢節點設置對應的EQS資產及結果黑板變量;
  7. AI行爲樹根據EQS結果黑板變量進行決策。

四、顯示EQS環境信息:

UE4的GameplayDebugger可在編輯器模式下實時顯示特定遊戲數據,我們可以通過它來查看AI在使用EQS時環境查詢的實時信息,包括EQS受擊到了哪些採樣點,以及每個採樣點通過Tests的最終打分結果,十分直觀方便。
可以在Edit - Project Setting - Engine - Gameplay Debugger 進行相關設置。
當項目運行時,把準星對準AI,再按撇號鍵(回車鍵左邊那位),就可以打開Debugger(再按關閉),可以實時顯示某個AI當前的EQS環境信息以及一些運行時狀態和行爲樹執行流。


後續我會繼續深入研究EQS系統,並對相關引擎源碼進行分析,本文會持續更新。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章