Intelligenza Artificiale parte 2

Come avevo già annunciato nella prima parte di questa serie di tutorial, su questo articolo mi occuperò della Navigation Mesh e di come l’AI viene sviluppata usando oltre alla NavMesh anche l’Actuator Steering.

Navigation Mesh

La NavMesh si può realizzare in due modi, ma cos’è una Navigation Mesh ? E’ fondamentalmente una mesh che serve all’AI per poter calcolare il percorso da fare dal punto in cui si trova fino al Target, che può essere un nodo di un percorso oppure il player. 

Primo metodo

Una volta creato il pavimento di gioco si può chiedere a Blender di creare la NavMesh in automatico, nelle proprietà della scena, l’icona che mostro nell’immagine seguente

 

c’è una tab apposita (chiamata Navigation Mesh) con vari parametri, vediamoli :

  • Cell Size è lo spazio che c’è tra il bordo della NavMesh e il bordo del pavimento o lo spazio di un ostacolo.
  • Cell Height è l’altezza tra la NavMesh e la mesh sottostante (il pavimento)
  • Agent è riferito all’oggetto che si dovrà muovere sulla NavMesh :
    • Height altezza minima dove l’Agent può muoversi.
    • Radius il raggio dell’Agent.
    • Max Slope è il massimo angolo di un’inclinazione su cui l’Agent può arrivare.
    • Max Climb l’altezza massima tra la NavMesh e il punto più alto dove l’Agent può salire.
  • Min Region Size è la dimensione minima (le piccole regioni saranno eliminate).
  • Merged Region Size dimensioni delle regioni che si possono fondere.
  • Max Edge Length conto massimo della lunghezza dei bordi.
  • Max Edge Error massima distanza di errore tra le celle della NavMesh.
  • Verts Per Poly numero massimo di vertici per poligono.
  • Sample Distance dettagli del’interlinea della mesh.
  • Max Sample Error dettagli di semplificazione della mesh.

Una volta settati questi parametri, di solito si lasciano di default e si agisce solo sulla parte dell’Agent, si può cliccare Build Navigation Mesh, cliccato si vedrà una mesh (di solito è un piano) colorata, quella è la NavMesh creata da Blender per noi, funzionante e pronta all’uso.

Secondo Metodo

Il secondo metodo è quello manuale, cioè creiamo noi una mesh, di solito è un piano, e la estendiamo su tutta l’area che vogliamo che la nostra AI si muova e dalle proprietà della fisica dell’oggetto scegliamo Navigation Mesh dal menù a tendina Physics Type.

Entrambi i metodi sono validissimi e portano al risultato voluto, nel primo metodo può accadere che se il piano che usiamo come pavimento ha delle estrusioni, che creano dei box o degli edifici, Blender inserirà sulla parte superiore delle piccole NavMesh. Si può modificare la mesh creata in automatico entrando in Edit Mode. Ma passiamo alla pratica.

Creare una Navigation Mesh automatica

Con una nuova scena inserisci un piano e scalalo di 10 unità (S10), entra in Edit Mode (tasto Tab quello a sinistra della Q), premi W e dal menù a tendina scegli Subdivide (la prima voce), premi il tasto T, per aprire la Tool Shelf di sinistra, in basso appariranno le opzioni per la suddivisione, inserisci 4 sull’opzione Numbers of Cuts. Adesso passa alla modalità Face Select usando lo shortcut CTRL+TAB e scegliendo Face. Seleziona delle facce a tua scelta, le facce verranno estruse verso l’alto quindi cerca di lasciare spazio in modo che l’AI possa muoversi. Una volta soddisfatto della tua selezione premi E e poi 3 ed Invio per confermare, concludi questa fase tornando in Object Mode sempre col tasto Tab. La mia scena è così

 

Adesso si può cliccare sul tasto che crea in automatico la NavMesh. Ecco la mia

Come avevo già scritto essendo un’unica mesh Blender mi ha posizionato sulla parte superiore delle parti della NavMesh, entro in Edit Mode e le cancello. Da qua possiamo iniziare a sperimentare con la nostra AI.

AI semplice

Inserisci un cubo (Shift+A/Mesh/Cube), scalalo della sua metà (S.5), dagli un materiale sul rosso e rinominalo AI, o scegli il nome che vuoi. Adesso inserisci un’altro oggetto a caso e rinominalo target, io inserisco un’altro cubo che sarà il Target dell’AI. Posiziona l’AI e il Target ad angoli opposti, seleziona l’AI e inserisci un Sensor Always, un Controller And e un’Actuator Steering, collegali tra di loro. Nella lista degli Actuator della parte manualistica del sito trovi anche lo Steering dagli una lettura se non conosci questo Actuator.

Adesso scegli dal menù a tendina Behavior (comportamento) Path Following, sull’opzione Target Object l’oggetto che hai scelto come target e sulla Navigation Mesh l’unica che c’è nella lista (quella creata precedentemente). Metti la spunta su Visualization (l’ultima opzione in basso) per vedere il percorso che l’AI fa per raggiungere il Target, salva e fai partire il motore (P). Sposta i due oggetti in varie posizioni e nota come Blender cambia di volta in volta percorso. Cosa succede però se nella scena, oramai di nostro gradimento, volessimo inserire un oggetto estraneo alla NavMesh e quindi non calcolato ? A tale domanda viene in aiuto il sistema della simulazione degli ostacoli.

Obstacle Simulation

Sulla proprietà del mondo in basso c’è la tab Obstacle Simulation, anche qui c’è un riferimento al manuale proprietà del mondo 3D dagli un’occhiata. Quindi cambia l’opzione Type da None a RVO (Cell). A questo punto puoi inserire altri oggetti e dire a Blender che quelli sono degli ostacoli dalle opzioni della fisica degli oggetti. Vediamo come.
Inserisci un cubo (Shift+A/Mesh/Cube) posizionalo dove passa l’AI. Fin’ora abbiamo usato gli oggetti con una fisica di tipo Static, ma se vuoi implementare un’AI come si deve devi iniziare a giocare con le opzioni per capire come Blender agisce nella varie situazioni, è anche vero che è meglio non complicarsi la vita, quindi evita di restringere troppo gli spazi dove può passare un’AI, così facendo non ti strapperai i capelli. Ma vediamo come cambiano le cose. Come prima cosa bisogna dire a Blender che il cubo appena inserito è un’ostacolo, sulle proprietà della fisica l’ultima tab è proprio quella per gli ostacoli, basta mettere la spunta su Create Obstacle, il campo Radius dipende dalla grandezza dell’oggetto, ma per questo esempio lascia pure il valore di default. Adesso devi dire a Blender che anche la nostra AI è un’ostacolo e dargli una tipologia di fisica Dynamic, in questo modo vedrai che l’AI si comporterà in modo completamente diverso. Naturalmente anche il piano che abbiamo estruso all’inizio per creare questa mini scena è un’ostacolo. Salva e fai varie prove posizionando i tre oggetti in varie parti, ricorda di non chiudere troppo gli spazi. Avrai notato che adesso l’AI ha una linea verde che è quella che fa cercare l’ostacolo. 

Questo sistema può essere accoppiato alla ronda dell’articolo precedente in modo che quando il player entra in una determinata area o un campo visivo, l’AI inizia ad inseguirlo. L’attacco, o inseguimento, sarà il tema del prossimo articolo.

Qui il file di questo articolo.