Ru/Nav Mesh Editing: Difference between revisions
ActoniRull (talk | contribs) |
ActoniRull (talk | contribs) |
||
Line 136: | Line 136: | ||
* '''Область прыжков''' (отмечена <span style="color:#00FF00">зелёным X-ом</span>) говорит ботам, что они должны прыгнуть, дабы добраться до области выше(соединенной), но эту область нельзя использовать как место для пережидания/снайперов. | * '''Область прыжков''' (отмечена <span style="color:#00FF00">зелёным X-ом</span>) говорит ботам, что они должны прыгнуть, дабы добраться до области выше(соединенной), но эту область нельзя использовать как место для пережидания/снайперов. | ||
* '''Область приседания'' (отмечена <span style="color:#6060FF">синей диагональной линией</span>) заставляет ботов приседать на этой области. | * '''Область приседания'' (отмечена <span style="color:#6060FF">синей диагональной линией</span>) заставляет ботов приседать на этой области. | ||
* '''Область | * '''Область БЕЗ прыжков''' (отмечена <span style="color:#FF0000">красным ромбом</span>) заставляет ботов не прыгать. Это можно использовать для сокращения прыжков. Но боты застревают, если для продолжения движения требуется прыжок, т.к. они не могут прыгнуть. | ||
* ''' | * '''Область отступления''' (отмечена <span style="color:#00FF00">зелёным +-ом</span>) останавливает передвижение ботов к препятствиям. Это полезно для мест, где легко провалиться, как мосты без ограждений. | ||
* ''' | * '''Область торможения''' (отмечена <span style="color:#FF0000">красным восьмиугольником</span>) говорит ботам придержать коней, прежде чем войти в другую область. Можно использовать, чтобы сделать аккуратный и точный прыжок. | ||
* ''' | * '''Область бега''' (отмечена <span style="color:#6060FF">двумя синими стрелками</span>) говорит ботам просто бежать. | ||
* ''' | * '''Область шага''' (отмечена <span style="color:#00FF00">одной зелёной стрелкой</span>) говорит ботам ходить бесшумно. | ||
* ''' | * '''Область не для пряток''' (никак не отмечена) говорит ботам, что здесь нельзя спрятаться. | ||
* ''' | * '''Область прямоходящих''' (никак не отмечена) говорит ботам не приседать здесь, пока они прячутся. | ||
Помимо этих атрибутов, которые можно установить, есть ещё '''запретный''' атрибут (отмечен <span style="color:#6060FF">синим прямоугольником</span>), который ставиться автоматически в определенных случаях, когда боты не могут или не должны пользоваться областью навигации.<br> | |||
{{note| | {{note|Области могут быть недоступны для определенной команде в {{tf2}}. Можно увидеть каким ботам заблокирован доступ с помощью <code>tf_show_blocked_areas</code> [[ConVar]].}} | ||
В {{csgo}}, активный [[trigger_hurt]] энтити, заблокированные двери и [[func_nav_blocker]] могут заблокировать навигационную область. | |||
{{clr}} | {{clr}} | ||
Revision as of 05:38, 5 November 2021
Эта страница посвящена созданию и редактированию файла NAV для карты в игре.
Список команд см. в разделе Команды навигационной сетки.
Автоматическая генерация навигационной сетки
Новый вид навигационной сетки <game>/maps/<mapname>.nav
(<игра>/карты/<имя карты>.nav
) создается с помощью команды nav_generate
во время загрузки карты, которая требует sv_cheats 1. В зависимости от размера и сложности карты, это может занять от нескольких минут до нескольких часов. Но в основном эта операция длится5 минут. Однако большие леса являются примером структур, для которых расчет .nav может занять много времени. Затем вы можете загрузить созданный файл .nav на свой сервер.
Template:Note:ru
Рекомендуется, чтобы создатели карт создавали навигационные сетки, прежде чем опубликовать свою карту.
Что вычисляется во время генерации
Во время создания навигационной сетки происходят следующие шаги:
- Начиная с точки респауна игрока, ходимое пространство выбирается путем "заливки" из этой точки, ищя соседние ходимые точки;
- Из отобранных данных строятся прямоугольные Навигационные области;
- Вычисляются места для передышки и для снайперов;
- Вычисляются места встреч и точки подхода (это может занять некоторое время);
- Вычисляются начальные области встречи.
Просмотр навигационной сетки
Чтобы просмотреть сначала вам нужно включить sv_cheats 1 и ввести nav_edit 1
. Чтобы выключить редактор сетки, введите nav_edit 0
.
Чтобы увидеть все атрибуты пропишите
tf_show_mesh_decoration 1
. Используйте tf_show_mesh_decoration_manual 1
, чтобы скрыть автоматически создаваемые атрибуты .
Явное обозначение зон, пригодных для ходьбы (например: "Наверху нет сетки")
Некоторые карты с очень крутыми лестницами, пандусами или холмами могут запутать систему генерации, в результате чего навигационная сетка не покрывает всю карту. Чтобы решить эту проблему, вы можете вручную разместить дополнительные маркеры для ходьбы, которые будут указывать генератору на поиск в направлении от этой точки во время фазы выборки.
Чтобы добавить один или несколько маркеров, сначала направьте взгляд на известное место на карте, где можно ходить, затем введите nav_mark_walkable
в консоли. Когда вы закончите расставлять маркеры, введите nav_generate_incremental
(затем nav_clear_selected_set
) или nav_generate
для повторной генерации сетки.
Вы можете удалить все ранее размещенные ходовые маркеры с помощью команды nav_clear_walkable_marks
.
Быстрая генерация сеток для тестирования
Фаза анализа генератора может отнимать много времени. Чтобы не ждать е завершения, введите в консоль nav_quicksave 1
.
Редактирование навигационной сетки
Автоматический генератор навигационной сетки делает хорошую работу по созданию сетки (даже без запуска nav_quicksave 0
), позволяя вам легко начать использовать ботов и заложников на пользовательских картах.
Однако тщательная ручная настройка навигационной сетки может заметно улучшить производительность ботов. Ручное редактирование сетки Названиями мест также позволяет ботам сообщать другим, где происходят события, что улучшает радар Counter-Strike и включает названия мест во все радиосообщения.
Чтобы включить редактор, введите nav_edit 1
в консоли (для выключения введите nav_edit 0
).
- Белый крест в центре экрана - это курсор.
- Область навигации, на которую вы указываете, является выбранной областью и отображается желтым контуром.
- Навигация Области, в которые можно попасть из выбранной области, показаны красным цветом.
- Белая линия в выделенной области обозначает место, где область будет разделена, если будет выполнена команда
nav_split
.
Сохранение
В настоящее время в системе редактирования Navigation Mesh нет команды "отменить". Поэтому очень важно часто сохранять свою работу с помощью команды nav_save
.
Создание новой области
Это можно сделать с помощью команд nav_begin_area
и nav_end_area
.
Template:Note:ru Template:Tip:ru Template:Tip:ru Template:Tip:ru
Удаление
Чтобы удалить область, надо навести курсор на ненужную область, выделить её и прописать nav_delete
. Также вы можете выбрать несколько область и удалить их.
Соединение двух областей
Соединения определяют, где боты могут перемещаться из одной области в другую.
Обычно соединения Двухсторонние, то есть боты могут свободно перемещаться между двумя областями. Однако, иногда могут понадобиться односторонние соединения, например, когда нужно чтобы боты могли спрыгнуть с верхней точки вниз. Также их можно использовать для установления направления, например, для совершения сложных прыжков.
Дабы сделать одностороннее движение из точки А в точку Б (то есть передвижение из точки Ф в точку Б):
- Выделите область А: На ведите курсор на неё и пропишите
nav_mark
. - Нацельтесь на точку Б и введите
nav_connect
.
Чтобы сделать Двухстороннее движение, повторите шаги выше, поменяв местами А и Б.

nav_connect
будет пытаться двунаправленно соединить первую выделенную область и каждую последующую выбранную область. Выберите несколько областей и используйте nav_connect
, чтобы сразу сделать двухстороннее соединение.Отсоединение двух областей
Чтобы убрать все соединения между точками А и Б:
- Выделите область А: На ведите на неё курсор и пропишите
nav_mark
. - Наведите курсор на область Б и пропишите
nav_disconnect
.

nav_disconnect
, когда выбрано несколько областей, он будет пытаться отсоединить друг от друга первые и последующие выбранные области.
nav_disconnect_outgoing_oneways
,чтобы удалить все односторонние соединения. Эта команда также работает с несколько выбранными областями.Разделение
Разделение делает из одной области две двухсторонне соединенные области.
Объединение
Объединение позволяет уменьшить количество.
Обе области должны быть одинакового размера по краям. Но не обязательно чтобы они были смежными.
Полученная область унаследует связи обоих областей и их свойства (т.е.: Названия мест и т.д.).

Сращивание
Сращивание позволяет создать новую область между двумя имеющимися. Это очень мощное орудие, которое можно использовать для легкого создания наклонных участков, как показано в примере ниже.

Атрибуты области
Имеется куча атрибутов, с помощью которых область говорит ботам, что им делать, когда они касаются её.
Все атрибуты могут быть увидены на небольшой срок, когда мы нацелены на них. Длительность можно изменить с помощью ConVar nav_show_area_info
.
Чтобы создать атрибут надо нацелиться на нужную область и прописать команду, например nav_jump
.
- Область прыжков (отмечена зелёным X-ом) говорит ботам, что они должны прыгнуть, дабы добраться до области выше(соединенной), но эту область нельзя использовать как место для пережидания/снайперов.
- 'Область приседания (отмечена синей диагональной линией) заставляет ботов приседать на этой области.
- Область БЕЗ прыжков (отмечена красным ромбом) заставляет ботов не прыгать. Это можно использовать для сокращения прыжков. Но боты застревают, если для продолжения движения требуется прыжок, т.к. они не могут прыгнуть.
- Область отступления (отмечена зелёным +-ом) останавливает передвижение ботов к препятствиям. Это полезно для мест, где легко провалиться, как мосты без ограждений.
- Область торможения (отмечена красным восьмиугольником) говорит ботам придержать коней, прежде чем войти в другую область. Можно использовать, чтобы сделать аккуратный и точный прыжок.
- Область бега (отмечена двумя синими стрелками) говорит ботам просто бежать.
- Область шага (отмечена одной зелёной стрелкой) говорит ботам ходить бесшумно.
- Область не для пряток (никак не отмечена) говорит ботам, что здесь нельзя спрятаться.
- Область прямоходящих (никак не отмечена) говорит ботам не приседать здесь, пока они прячутся.
Помимо этих атрибутов, которые можно установить, есть ещё запретный атрибут (отмечен синим прямоугольником), который ставиться автоматически в определенных случаях, когда боты не могут или не должны пользоваться областью навигации.


tf_show_blocked_areas
ConVar.В , активный trigger_hurt энтити, заблокированные двери и func_nav_blocker могут заблокировать навигационную область.
Using Mesh Editing Binds
Although all of the mesh editing commands can be typed in the console, in practice it is far easier to bind these commands to keys.
With bind del nav_delete
for example, pressing Del will delete the nav area under your cursor (in nav editing mode).
You can temporarily bind many commands at once by using a CFG file. This is useful for bot navigation editing, because there are many commands, and you will probably not want them to be permanently attached to your keys. See Editing Bot Navigation CFG File for a pre-made file and instructions on its use.
See Navigation Mesh Console Command Reference for a list of all commands related to bot navigation.
Place Names
Once you've generated a nav mesh, Place Names can be assigned to nav areas to label that region of the map. For instance, if there is a prominent house in the map, all of the nav areas in the house can be tagged with the "House" Place Name.
Place Names are used by the CS Bot chatter system to announce where they are, by the radar to show the current location of the player, and they are appended to the player's name when that player uses text chat or radio commands. For example:
ChicagoTed @ Apartment (RADIO): Fire in the hole!
Adding place names
To add or change the name of a location, you need to turn on the place name editor. Make sure nav_edit
is set to 1, then type
nav_toggle_place_mode
.
When the place name editor is enabled (assuming no areas have been named) all the nav squares should turn red. To select which Place Name you want to assign to an area, type
nav_use_place <name>
,
for example nav_use_place Bedroom
. Next, aim your cursor at an area you want to label with that Place Name and turn on Place Painting Mode by executing
nav_toggle_place_painting
.
While Place Painting is active, each area you point at will be tagged with the current Place Name you selected and will turn green in color. You can change the place name you are painting with by typing nav_use_place <newname>
, notice that after changing the place name, all areas already painted with a different name will turn blue and areas painted with the name you just changed to will turn green. When you are finished using Place Painting Mode, you can exit by executing nav_toggle_place_painting
again.
For a list of all available Place Names, execute nav_use_place
with no argument.
See also: Standard Place Names for CSS,
Standard Place Names for CS:GO.
There are several additional commands that provide tools for picking, flood-filling, replacing, and so on. For a complete reference, see Place Name Commands.
Common mesh problems and solutions
Extraneous areas on stairs and ramps
The automatic generation system tends to build areas that hang off the side of stairs and ramps. These should be removed to force the bots to take the stairs or ramp straight-on.
Railings
Railings can be a problem for the current bot navigation system, this includes jump-down links that must pass over railings, they should be avoided unless necessary. The bots will eventually make these jumps, but they are not terribly elegant while doing so.
Preventing excessive jumping
Use the nav_no_jump
command to flag the area to discourage jumping.

NO_JUMP
attribute is not used in 
Dealing with rotating doors
Clip off the nav area to leave an empty space in the nav mesh to allow for the rotating door. You may have to remake the nav square if deleting part of an existing one doesn't work.
Bots will sometimes try to walk through the opened door brush from one nav area to another and get stuck. Either removing the adjacent nav area or configuring the areas and connections so the bots have to walk around the opened door should prevent this.
Advanced editing techniques
Ladders
Ladders can be manually built against climbable surfaces. Your editing cursor will turn green when pointing at a climbable surface.
Using nav_build_ladder
The easy way to build a ladder is to simply point at a climbable surface, and execute nav_build_ladder
.
Using nav_begin_area
and nav_end_area
If nav_build_ladder
isn't what you need, you can manually create a ladder:
- Place your cursor at where a corner of the new ladder should be
- Execute
nav_begin_area
- Move your cursor to drag out the ladder's extent
- Execute
nav_end_area
This can be useful to get bots to start going up the ladder, and jump off halfway up, onto the crate:
Reversing ladders
Sometimes a ladder will be created facing the wrong way. If a ladder is drawn in red, you are looking at it from the back. The ladder is drawn in green if it is facing you. To change the orientation of a ladder, simply point at the ladder and use nav_ladder_flip
.
Obstacle avoidance and precision movement
Using nav_precise
, nav_walk
, and nav_stop
to disable local obstacle avoidance behaviors and control bot movement.

WALK
and STOP
attributes are not used in 
Marking areas to avoid
Using nav_avoid
to tell bots to avoid the area unless the normal route has become too dangerous.

AVOID
attribute is not used in 
Controlling where bots Can hide
Using nav_dont_hide
to prevent bots from hiding in that area.
This can be used to force the creation of hiding spots during the analysis phase.
Setting up sniper spots
Mark an area using nav_walk
and execute nav_make_sniper_spots
. This will break the area into small sub-areas which are used internally by the navigation mesh to encourage sniping.


Lining up tricky jumps and narrow doorways
Arranging nav areas to force specific paths.
- If the bots are getting hung up on the sides of a door or window, you can carve out a narrow path through the middle of the opening.
- The highest a bot will try to jump is 58 units. If the top of a jump is 59 or more units above the bottom, bots will give up as soon as they jump. If this happens in a spot that the bots can actually jump up to, use
nav_corner_lower
to lower the upper nav area slightly.
Import and Exported areas
Nav areas can be imported and exported through nav_save_selected and nav_merge_mesh respectively. nave_save_selected exports nav areas in a selected set to a KeyValues file, while nav_merge_mesh imports nav areas from the selected file and selects them. The KV file used by these commands can be edited to force custom nav area shapes and connections that otherwise would be impossible to make.

These commands can be useful for:
- Creating connections that are difficult or impossible to make manually with nav_connect, such as a bidirectional connection between two areas in areaportals.
- Fit areas on to skewed surfaces.
See also
- Navigation Mesh Console Command Reference
- Left 4 Dead Navigation Meshes:ru
- L4D Level Design/Nav Meshes:ru
- L4D Level Design/Nav Flow:ru
- L4D Level Design/Advanced Nav Editing:ru
External Links
- Official forums for the bot system (down) - Archived version.
- Waypointing for CS:S Bots/Hostages (Edit Life)