Я не можу сказати точно, який підхід використовували розробники WC3, але він схожий на ієрархічну анотацію A *. Радіус одиниці, визначений у WC3Editor, був використаний як-для 3D-масштабування моделі, але фактичний розмір одиниці для наведення маршруту був дискретним, можливо, щось на зразок unitSize = (int) (unitRadius / 10). Це було не векторно, це точно.
Скажімо, існує безліч вузлів шляху, що роблять сітку вузлів високої роздільної здатності. Простий пристрій, як упир, має розмір 2, тому для того, щоб розмістити його десь у сітці, нам знадобляться 4 вільних вузла шляху один біля одного. Герой лицаря смерті трохи більший з розміром 3, займаючи 9 вузлів шляху. Тепер ми розміщуємо 2 зиггурати разом, залишаючи між собою простір на 2 вузла, а з іншого боку відправляємо вугра та лицаря смерті. Ghoul зможе пройти між двома зигуратами, тоді як лицар смерті повинен буде пересуватися. Як це можна визначити?
Для того, щоб побачити, чи може вузол вмістити одиницю певного розміру, давайте призначимо кожному вузлу спеціальне значення зазору, визначаючи максимально дозволений розмір одиниці. В основному це означає, що було зроблено кілька обмежувальних перевірок для вузла, а найбільші можливі межі запам'ятовувались як зазор вузла. Отже, коли ми хочемо розмістити лицаря смерті на якомусь вузлі, це стає настільки ж просто, як порівняння зазору вузла з розміром лицаря смерті. Звичайно, речі стануть набагато складнішими, коли існує кілька одиниць, що стрибають навколо, змагаючись за вузли, але це вже інша історія.
Для отримання детальної інформації ви можете ознайомитись із цією статтею:
http://harablog.wordpress.com/2009/01/29/clearance-based-pathfinding/