Chúng ta có thể thấy ở bước A, giải thuật bắt đầu bằng việc tạo ra một "funnel" với 1 đỉnh là vị trí bắt đầu trên đường đi và 2 cạnh trái và phải nối từ đỉnh đến 2 đầu mút cạnh chung của tam giác bắt đầu và tam giác liền kề nó, cạnh chung này được gọi là "portal". Các bước từ B đến D là sự di chuyển của 2 cạnh funnel men theo rìa (border) của corridor đến các portal tiếp theo. Chú ý rằng sự di chuyển này luôn làm cho 2 cạnh của funnel gần nhau hơn.
Ở bước E chúng ta có một vấn đề là nếu cạnh màu cam (cạnh trái) di chuyển về portal tiếp theo thì nó sẽ làm cho 2 cạnh funnel cách xa nhau hơn so với bước trước đó. Trong trường hợp này chúng ta sẽ không di chuyển cạnh màu cam nữa mà thay vào đó di chuyển cạnh màu xanh ở bước F.
Thật không may, lúc này chúng ta gặp một vấn đề nữa đó là nếu di chuyển cạnh màu xanh đến portal tiếp theo thì sẽ làm cho 2 cạnh funnel chéo nhau và lúc này chúng ta phát hiện có một góc (corner) trong corridor. Lúc này chúng ta cần thêm một điểm vào đường đi cuối cùng của mình đó là đầu mút của cạnh màu cam. Ở bước G, chúng ta dời vị trí của funnel sao cho đỉnh của nó trùng với vị trí mà ta vừa thêm vào đường đi và khởi tạo lại 2 cạnh như
bước đầu. Giải thuật cứ tiếp tục cho đến khi 1 cạnh bất kỳ chạm đến vị trí đích. Để tóm tắt lại, giải thuật gồm có các bước sau:
• Di chuyển 2 cạnh funnel sao cho 2 cạnh càng gần nhau hơn.
• Nếu di chuyển 1 cạnh mà làm cho 2 cạnh xa nhau thì không di chuyển cạnh đó nữa.
• Nếu di chuyển 1 cạnh mà làm cho 2 cạnh chéo nhau thì cần thêm đầu mút của cạnh còn lại vào đường đi cần tìm và khởi tạo lại funnel ở vị trí vừa thêm.
Sau khi chạy giải thuật thì chúng ta đã thành công tìm được đường đi ngắn nhất từ danh sách các đa giác đã tìm được. Và bây giờ chỉ cần cho nhân vật AI của chúng ta di chuyển theo đường đi vừa mới tìm được thì việc di chuyển đã hoàn tất.
3.2 Né tránh vật cản và RVO (Reciprocal Velocity Obstacles)
Trên đường đi của nhân vật AI, Unity sẽ lấy vị trí cần đến (corner) tiếp theo và dựa trên đó tìm ra hướng mong muốn và tốc độ cần thiết để đến đó. Việc sử dụng vận tốc mong muốn (desired velocity) để di chuyển các nhân vật AI có thể dẫn đến va chạm giữa các nhân vật với nhau. Tính năng tránh chướng ngại vật sẽ chọn một vận tốc mới sao cho cân bằng giữa việc di chuyển theo hướng mong muốn và ngăn ngừa việc va chạm trong tương lai với các nhân vật khác. Unity sử dụng Reciprocal Velocity Obstacles (RVO) (van den Berg, J. et al, 2008) để dự đoán và ngăn chặn va chạm. Để hiểu về RVO đầu tiên chúng ta cần tìm hiểu về Velocity Obstacles.
Velocity Obstacles (VO)
Vật cản vận tốc (Velocity Obstacles) của vật B đối với một nhân vật A là một tập hợp bao gồm tất cả các vận tốc của nhân vật A mà sẽ dẫn đến va chạm tại một thời điểm nào đó với vật B đang chuyển động với vận tốc nào đó. Với định nghĩa đó, mọi nhân vật AI trong môi trường sẽ có thông tin về những vận tốc sẽ dẫn đến va chạm với các nhân vật/chướng ngại vật khác. Bằng cách này, nhân vật AI có thể tránh vật cản thành công và đi đến được mục tiêu.
Xét một ví dụ đơn giản: có hai nhân vật AI A và B là hai điểm trong không gian với vị trí và vec tơ vận tốc như hình.