NAVIGATION MESH

Материал из CSM Wiki
Перейти к навигации Перейти к поиску

Оригинал Navigation Mesh Commands, Navigation Meshes.

Описание

Навигационная сетка используется для системы искусственного интеллекта игры, и применяется игрой для управления ботами, передвижениями заложников и для отображения названий местностей в чате, на мини-карте и радаре.

Если вы хотите сделать хорошую оптимизированную карту, то вам обязательно нужно будет создавать навигационную сетку вручную. Для упрощения процесса создания навигационной сетки был разработан специальный конфигурационный файл navedit.cfg, входящий в состав CSSSDK по умолчанию. Смотрите "CSSSDK navedit.cfg".

Особенности использования

  • Cоздаётся непосредственно в самой игре автором карты или автоматически генерируется вызовом специальной консольной команды "nav_generate".
  • Хранится в файле "<имя_карты>.nav" в папке /cstrike/maps/.
  • Если навигационная сетка не создана, то при добавлении бота она будет сгенерирована автоматически.
  • Если навигационная сетка не создана, то заложники не будут двигаться.

Ошибки

Не обнаружены.

Карта

  • 1) csssdk_NAVIGATION_MESH.vmf
  • 2) csssdk_NAVIGATION_MESH_2.vmf

Используются объекты

  • 1)
  • NAVIGATION_MESH
  • func_detail
  • func_button
  • func_bomb_target
  • infodecal
  • logic_auto
  • point_servercommand
  • prop_static
  • prop_door_rotating
  • func_ladder
  • prop_physics_multiplayer
  • DISPLACEMENT
  • 2)
  • NAVIGATION_MESH
  • func_detail
  • func_button
  • func_bomb_target
  • infodecal
  • logic_auto
  • point_servercommand
  • prop_static
  • prop_door_rotating
  • func_ladder
  • prop_physics_multiplayer
  • DISPLACEMENT

Описание карты

  • 1)

Карта создана для экспериментов с генерацией навигационной сетки. Появившись на карте, подбегите к пульту и нажмите на большую кнопку на нём. Это приведёт к началу генерации навигационной сетки для этой карты. Независимо от мощности вашего компьютера, этот процесс не должен занять много времени, потому что карта маленькая. Закончив генерацию навигационной сетки карта автоматически перезагрузится и вы сможете поиграть на ней с ботами. Для этого нажмите на кнопку в виде "плюс" на пульте. Нужно так же заметить, что если на карте не будет навигационной сетки и вы попытаетесь добавить на карту хотя бы одного бота, это приведёт к началу генерации навигационной сетки. Чтобы увидеть навигационную сетку, выполните в консоли команду "nav_edit 1". Побегайте по карте и посмотрите как сгенерирована сетка.

Теперь, когда процесс генерации навигационной сетки уже более-менее ясен, попробуйте изменить какие-нибудь параметры генерации. Для этого откройте в редакторе Hammer свойства кнопки, генерирующей сетку, и в Output’ах это кнопки измените значения чисел возле "nav_slope_limit" и "nav_coplanar_slope_limit". Рекомендуется в различных комбинациях изменять эти значения от 0 до 1 и сравнивать полученные результаты в игре. Особенно обратите внимание на то, как разбивается навигационная сетка на DISPLACEMENT-поверхности.

  • 2)

Карта создана для получения навыков использования конфига navedit.cfg (см. CSSSDK navedit.cfg). Использование этого конфига сильно упрощает создание навигационной сетки и даёт автору карты очень удобный интерфейс работы с навигационной сеткой. Как показал опыт, научиться пользоваться конфигом navedit.cfg можно всего за несколько минут, притом за это время можно освоить чуть ли не все необходимые функции и последовательности действий.

Появившись на карте просто нажмите на кнопку пульта чтобы загрузить конфиг navedit.cfg. Это так же можно сделать просто выполнив в консоли команду "exec navedit".

После загрузки navedit.cfg, можно приступать к изучению некоторых хитростей создания грамотной навигации для ботов:

  • 1. Ботам не важно где находится навигационная сетка: идеально на земле немного под землёй или над землёй. Так же для них не важна форма частей навигационной сетки, им нужно чтобы навигационная сетка просто была. Поэтому при создании навигационной сетки на DISPLACEMENT-поверхностях не нужно разрезать сетку на множество маленьких частей. Это очень сильно снижает быстродействие карты. Если генерировать карту командой "nav_generate" со стандартными настройками генерации, то на DISPLACEMENT-поверхностях как раз будет создано множество таких маленьких частей, именно поэтому рекомендуется всегда контролировать процесс создания навигационной сетки, создавая её вручную. Посмотрите как на карте-примере вручную на DISPLACEMENT-поверхности была размещена навигация – одним сплошным "листом" почти по всей длине. Это работает в несколько раз лучше и быстрее чем множеством маленьких.
  • 2. Чтобы боты правильно обходили все углы, необходимо на углах делать вырезы в виде небольших квадратов величиной примерно 32x32 юнита. Это заставляет ботов грамотно обогнуть угол, на задевая его, и при этом плавно поворачивать их взгляд в сторону угла, создавая движения очень схожие с человеческими. Если аккуратно обработать все углы карты таким образом, то у других игроков вряд ли возникнет желание назвать ботов "тупыми". Опять же, если воспользоваться автоматической генерацией навигационной сетки (nav_generate), то такого эффекта будет не добиться и боты порой будут толкаться в углы. Замедляя движения тех кто идёт за ними. Посмотрите как навигационная сетка огибает большинство углов на этой карте-примере.
  • 3. Чтобы боты правильно входили в узкие двери, или прочие узкие проходы, нужно использовать узкие области навигационной сетки и применять на них модификатор точности Precise (F3 > 7). Посмотрите как это сделано на этой карте-примере в дверном проёме. Длина области учитывает открывание двери в ту и другую сторону. Благодаря такой конструкции, боты могут не просто вбегать в дверь, а даже запрыгивать в неё, и не по одному - а сразу толпой, что не позволит вам свободно отстреливать их, когда они застревают в дверях. Только таким образом можно добиться чтобы боты управлялись с дверями не хуже человека. Не верите? Попробуйте играя за террористов сесть в комнатке за дверью на этой карте, добавить максимальное количество ботов на карте (командой "bot_add_ct" или просто "bot_add"), и попробовать отсидеться в каком-нибудь углу этой комнаты. Боты могут входить в эту комнатку не только через дверь, а ещё и сверху, потому что для этих целей автором карты любезно были добавлены дополнительные пути для них, проходящие по всем стенам карты. Как не странно, но играя с хорошо созданными ботами можно получать не малое удовольствие от игры, потому что боты перемещаются по карте совсем как люди.
  • 4. Чтобы заставить ботов прыгать с нужного места и на нужное расстояние, достаточно просто на месте прыжка поставить небольшую область навигационной сетки и добавить к ней модификатор прыжка Jump (F3 > 4) и модификатор точности Precise (F3 > 7), в этом случае боты будут прыгать в нужное время и в нужном направлении. Посмотрите как это сделано на этой карте-примере на стенах возле базы А и на стенах комнатки с дверью. К сожалению, дерево поставлено на это карте не совсем удачно, поэтому навигационная сетка, созданная на дереве, ботами не используется, потому что когда они стараются запрыгнуть на дерево – они просто падают вниз со стены (даже игроку не просто туда забраться). Если поставить дерево как-нибудь иначе или произвести какие-нибудь изменения со стеной, то боты смогут успешно отсиживаться на дереве. Можете попробовать сделать это самостоятельно.
  • 5. Чтобы боты не застревали в разных труба и потом не пятились назад, всегда используйте узкие области навигационной стеки с модификатором Precise (F3 > 7), указывая ботам нужную траекторию движения в узких местах. Посмотрите как сделан "подземный" переход между базой А и базой Б на этой карте-примере. Если навигационную сетку в этом проходе сделать как-то иначе, то это приведёт к тому, что боты застрянут.

Для проверки работы ботов обычно используется нижеописанный метод. Игрок подключается к игре и заходит в Спектаторы (наблюдатели). Используя команды "mp_limitteams 30" и "bot_join_after_player 0", игрок получает возможность добавлять ботов без наличия игроков в игре, а так же добавлять в одну команду на 30 человек больше чем в другую. Затем, используя команду "bot_add_t", в одну команду добавляет множество ботов. Они будут постоянно бегать по карте в поисках новых путей движения. Находясь в Спектаторах, игрок может наблюдать за тем что делают боты. Для ускорения времени можно использовать консольную команду "host_timescale #", где # - это множитель скорости сервера; 1 – нормальная скорость; 2 – скорость в 2 раза выше нормальной; 0.1 – замедление времени в 10 раз и т.д.

Изучив хитрости создания навигационной сетки вы можете потренироваться в её создании самостоятельно. Для этого вам нужно будет удалить навигационную сетку на этой карте, удалив соответствующий NAV-файл в папке /cstrike/maps/ и перезагрузить карту. При помощи конфига navedit.cfg у автора этой карты-примера на создание навигационной сетки ушло чуть меньше 15 минут (с учётом тестов и исправлений ошибок). После создания навигационной сетки не забудьте выполнить её анализ (F1 > 1 > 5 > 6) или (F1 > 1 > 6 > 6), а так же поиграть на карте с ботами. Удачи.

Смотрите также