Сравнение pathfinding в двух СтарКрафтах
07:59 07.07.2010

Pathfinding

Оригинальное название: The Mechanics of SC2: Unit Control: Pathfinding
Автор: Australia sluggaslamoo @ TeamLiquid
Перевод и оформление на reps.ru: Rus_Brain

Я планирую написать несколько статей на тему отличия механики первого от второго СтарКрафта. Я не ставлю целью облить грязью первый, указав лишь на его возраст; и, напротив, превознести StarCraft 2 с его нововведениями. Моя цель - раскрыть плюсы и минусы обеих используемых технологий. Свои слова я постараюсь подкрепить наибольшим числом доказательств

Моя цель - привлечь внимание к механике второго СтарКрафта. На мой взгляд, сейчас обсуждение ведется людьми, которые на самом деле мало понимают в том, о чем говорят. Фанаты BroodWar'а не принимают ни одного изменения, считая все новое - дешевой попсой, а фанаты StarCraft 2, кажется лишь хотят победить просто так, без тяжелых ежедневных многочасовых тренировок.

Многое из сказанного будет лишь частью моих догадок. Я не программировал ни BroodWar ни Starcraft 2, и должно быть понятно, что многое я буду домысливать, исходя из своего опыта. Тем не менее, Ваш собственный опыт, мои мысли, разбавленные собственной критикой, создадут у Вас собственную картину происходящего. Факты, мнения - в статье будет достаточно и того, и другого.

Управление войсками

В моем понимании, управление восками - это возможность игрока использовать их более эффективно, будь то атака по противнику, уход от встречной атаки, эффективное перемещение, расстановка войск.

Я решил разбить статью управления войсками на несколько частей. Первая часть раскроет принципы нахождения маршрута (pathfinding) в первом и втором СК.

Pathfinding

В Starcraft 2 используется техника нахождения маршрута под названием flocking или swarm AI. Чтобы было понятно, как работает эта система, представьте косяк рыб, или стаю птиц. Они никогда не сталкиваются друг с другом во время движения. Примерно так же работает этот искусственный интеллект. Предположу, что в Starcraft 2 механизм доработан - задача юнита добраться до пункта назначения, используя наименьшее число ключевых узлов; также дополнительно используется система "объезда" встречных юнитов и других препятствий на карте.

С точки зрения кода, Blizzard проделали огромной работу в этом направлении. Хотя ничего конкретного разработчик не говорит, лично я в этом убеждаюсь, когда по карте бегают 200 лимита, и никаких столкновений, и других ошибок в алгоритме не возникает. Учитывая тенденцию последних лет, Blizzard не могли обойти pathfinding стороной, и оставить его на уровне 1998 года, который используется в StarCraft: BroodWar.

В BroodWar'е используется система с кодовым названием A* (A-Star). На тот момент это так же была одна из самых прогрессивных систем, а если брать во внимание ограниченные производственные мощности, так вообще лучший выбор. Однако, позволю себе заметить, что система примитивна. Фактически юнит может двигаться только в восьми различных направлениях. Карта плоская: "возвышенности", которые есть на картах - ничто иное как земля другого цвета. Эти фишки уже во всю используют современные картоделы, создавая бесконечные по длине рампы, подъемы без рамп как таковых и подобные вещи.

pathfinding
Драгуны обходят препятствие в BroodWar,
как это видит игрок.

pathfinding
Драгуны обходят препятствие в BroodWar,
как это видит компьютер.

Как видно на картинке, карта заполнена множеством ключевых узлов, попадая в которые, юнит знает под каким углом ему двигаться дальше. В следующем другой угол. И так, пока он не доберется до места назначения. И если в Starcraft 2 юниты могут объехать друг друга, в случае перекрестного движения, в BroodWar они будут "бороться" за следующий ключевой узел, нарушая боевое построение. Сразу всплывает два плюса: более простое окружение в Starcraft 2; более простой стэк (мутастэк) в BroodWar, т.к. юниты не разлетаются в разные стороны, чтобы объехать друг друга.

pathfinding
Если муталисков резко развернуть, в момент они будут смотреть в разные стороны. Особенность движка.

pathfinding
Чтобы в СК2 юниты бегали как в СК1, нужно вручную задать кучу ключевых точек через shift.

Разница в том, что войска в BroodWar'е используют одни и те же ключевые точки, как велит им алгоритм A*; в отличие от StarCraft 2, где у каждого юнита просчитывается его собственный путь, с минимальным числом ключевых точек.

Защита от столкновений в BroodWar куда более примитивна - один юнит просто приостанавливается, чтобы пропустить другого, и, когда ключевая точка свободна, двигается сам. Мы часто видим это во время разведки рабочими, когда они не дают пройти друг другу в различных узких местах. Сейчас возможность задержать раба соперника на минуту будет считаться хорошим показателем скилла.

В Starcraft 2, чтобы объяснить проще, каждый юнит имеет сенсор столкновений. Он видит, что столкнется с другим юнитом еще задолго до самого столкновения, и система может набросить ему пару лишних ключевых узлов, позволив им "обрулить" друг друга. Это во-первых, делает перемещение куда более эффективным, а во-вторых не тратит энное количество процессорного времени на пересчет всех ключевых точек заново (их число всего лишь увеличилось с X до X+1 (или X+25, не столь важно). Кроме того "обруливаение" происходит по наименьшему радиусу.

pathfinding
Библиотеки для "объезда" препятствий есть уже и в открытом доступе, например OpenSteer.

pathfinding
В СК2 атака начнется быстрее, ведь собачки заранее чуть изменили свою траекторию. В СК1 они будут думать, с какой бы стороны подбежать.

Однако многим игрокам BroodWar'овской школы не понравился новый AI. И тому есть объективные причины. Самой популярной тактикой в ранней игре был обход противника и окружение. Но если держать тех же маринов в тесной кучке, окружение будет малоэффективным. Марины атакуют на расстоянии, следовательно стрелять будут все, и линги в упор. То есть большинство будет лишь суетиться рядом без должного эффекта. Чем меньше "полезная площадь" для атаки лингами, тем эффективнее марины. И чем больше лингов умирает, тем еще выше эффективность пехоты.

pathfinding
Korea (South) Effort наказал Korea (South) Flash'а за невнимательность.
Если бы марины не остались без чуткого попечительства своего командира, не известно, как закончилась игра.

Идеально, игрок который следит за своими войсками, должен выигрывать у неследящего. Невнимательный должен быть наказан. Но в Starcraft 2 создается ощущение, что компьютер лучше справляется с задачей управления войсками. И невнимательный, напротив, "случайно" или "внезапно" выиграет у аккуратного, следящего за каждым перемещением своих войск соперника.

В этом, на мой взгляд, заключается "обесскилливание", когда новенький игрок может все делать лучше старого. Я считаю, что войска должны как-то неуклюже расходиться, если игроку на них пофигу; но и аккуратный игрок не должен иметь 100500 АПМа, чтобы совладать со своими идиотами, отдав каждому индивидуальный приказ. Не должно быть "борьбы с интерфейсом", и должен быть обратный эффект, "награда" за заботу и внимание.

Авто-окружение, на мой взгляд должно быть доработано в сторону послабления. Линги в СК2 стали быстрее и умнее. Более того они еще быстрее на крипе. Нужно дать возможность хорошему игроку подольше бегать своей пробкой, демонстрируя свой уровень игры себе, сопернику и обсам. И доставляя в штаб важные разведданные, конечно.

pathfinding
Плохое окружение дает пробке еще один шанс.

В следующем выпуске мы поговорим о чрезмерно высокой, на мой взгляд, скорости атаки. Такая скорость становится похожей на ZvZ, когда вражеская мута уже не сможет уйти, если решила напасть. Далее я постараюсь рассказать о стэке, выстреле в движении, касты несколькими юнитами и так далее.

Добавить комментарий:
Вы не зарегистрированы на сайте, поэтому данная функция отсутствует.
You are not registered on the site and this function is disabled.