Учебник Bethesda Navmesh

Навигация

Материал из Creation Kit Русский
Перейти к: навигация, поиск
Учебник Bethesda Navmesh
Серия Дизайн Уровней, глава 4
Вернуться в Учебный центр
LeftArrow.png Предыдущий учебник Следующий учебник RightArrow.png
Примеры плагинов:
Начальный Завершенный


Обзор

В этой главе мы пройдем через процесс создания навигационной сетки (англ.) Navmesh, как вручную, так и с автоматической генерацией.

Вы узнаете:

  • Что такое "Navmesh", и почему она важна
  • Как автоматически сгенерировать navmesh используя Recast Based generation
  • Как редактировать navmesh вручную
  • Поправляем предупреждения в navmesh
  • Generating basic cover

Что такое Navmesh?

Без Navmesh персонажи падают и застревают
Как только локация построена и обставлена, мы должны определить, где актеры смогут перемещаться. Здесь к нам приходит на помощь navmesh. Проще говоря, navmesh - это совокупность полигонов, или навигационная сетка, указывающая актеру где он может ходить.

Когда играешь, легко смотреть на вещи, как сами собой разумеющиеся. Наш мозг обрабатывает каждую визуальную детальку, постоянно рисует какие-то выводы и делает прогнозы. К сожалению, работа системы Искусственного Интеллекта (англ. AI - Artificial Intelligence) еще очень далека от того, как это происходит в человеческом мозгу, и должна полагаться на информацию, которой мы её обеспечиваем. Навигационная сетка играет решающее значение в том, чтобы ИИ актеров понимал какую-либо локацию. Качественная сетка является важным фактором для помощи ИИ, чтобы актеры не сваливались в ямы, не упирались в стену, обходили препятствия и т.п.

Редактор навигационной сетки требует усилий в освоении - потому что может расстроить при первом использовании. Мы будем изучать принципы работы с ним шаг-за-шагом. После того, как вы изучите основы и немного попрактикуетесь, вы очень быстро станете экспертом в этой теме.

NewFeature.jpg Примечание для пользователей GECK: в ручном изменении navmesh не так много изменилось. Однако, здесь было добавлена возможность авто генерации, например совершенно новый режим генерации "Recast", который как раз будет рассмотрен в этом учебнике. Чтобы узнать больше информации, загляните на страничку Генерация Navmesh.

А те кто использовал Oblivion и/или Morrowind Construction Set учтите, что Navmesh полностью заменяет систему нахождения пути данным инструментом.

Автоматически-генерируемая сетка

Рис. 4.1: Кнопка Navmesh
Рис. 4.2: Панель инструментов Navmesh

Вся работа по созданию сетки выполняется в отдельном режиме редактора. Для входа в этот режим, нажмите кнопку Navmesh (Рис. 4.1) на главной панели инструментов, или нажмите комбинацию клавиш "CTRL+E". Появится панель инструментов Navmesh (Рис. 4.2).

В принципе, для автоматического создания сетки нам не нужно что-то использовать с панели инструментов Navmesh; она существует для удобства. Так же совершенно не обязательно находится в режиме редактирования сетки Navmesh для использования авто-генерации, однако, присутствие панели инструментов дает нам понять, с чем мы сейчас работаем.

Есть четыре типа авто-генерации: Object Based, Havok Based, Recast Based, и Advanced. Для большинства интерьеров, подойдет тип генерации Recast Based и затем нужно поправить сетку вручную. В этом учебнике мы не будем детально рассматривать типы генерации Object Based или Havok Based. Продвинутые же пользователи могут предпочесть сделать все сетки вручную. Для некоторых этот способ получается быстрее, чем автоматически сгенерировать сетку и затем корректировать её вручную - все это дело вкуса, когда вы знакомы с данной системой.

NewFeature.jpg Примечание для пользователей GECK: Object Based и Recast Based это новые режимы генерации, специально созданные для движка Creation Engine.

Давайте используем тип генерации Recast, чтобы создать начальную версию сетки в нашей локации LokirsTomb:

  1. Щелкните по окну Render Window, чтобы убедиться, что оно активно.
  2. Убедитесь что ничего в окне Render Window не было выделено (если вы в этом не уверены, нажмите в любом месте пустого пространства левой кнопкой мышки или нажмите клавишу D).
  3. Выберите Recast Based Generation из меню Navmesh на главной панели инструментов: Navmesh > Generation > Recast Based Generation.
  4. Появится диалоговое окно Recast Navmesh Generation. (Рис. 4.3)
  5. Не беспокойтесь о назначении всех этих значений. Только убедитесь что они идентичны тем, что изображены на Рис. 4.3 и нажмите "OK".
  6. Нажмите "OK". Генерация может занять некоторое время, в зависимости от вашего ПК.
  7. Как только процесс будет закончен, навигационная сетка должна быть похожей на Рис. 4.4 и 4.5.
NewFeature.jpg Иногда нужно сделать сетку для большого участка уровня, но при этом не нужно удалять остальные сетки на уровне. Вы можете удерживать CTRL+ALT и щелкнуть левой кнопколй мышки и потянуть выделение вокруг всех нужных ссылок в ячейке, где вам нужно сделать сетку. Как только эти ссылки будут выделены, нажмите Recast Based Generation и сетка будет сгенерирована только для этих ссылок.

Работа с сеткой вручную

Теперь, когда у нас создана навигационная сетка, нам нужно потратить немного времени на её корректировку и очистку. Самый простой и быстрый способ сделать это - вручную. Перед тем как мы начнем процесс очистки, потратьте минутку рассмотрев вашу сетку и посмотрите где генерация типу Recast Based не очень хорошо сработала.

Если вы затрудняетесь с просмотром сетки, то можете использовать один из трех режимов просмотра Navmesh: Normal (обычный), Transparent (прозрачные объекты), Navmesh Only (только сетка). Нажимайте "W" для переключения между тремя этими режимами, или используйте кнопки панели инструментов, изображенные здесь:
NavmeshViewMode.png

Удаление частей сетки

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

Зона пещеры и лестница в Нордских руинах кажется самой большой недоработкой. Вы также увидите много "островков" сетки. Не волнуйтесь сейчас о них. Как только мы почистим основную часть сетку, удаление этих "островков" будет быстрым и простым.

Protip.jpg Для продвинутых пользователей, которые сразу хотят избавиться от "островков", CTRL+левый щелчок по треугольнику каждой сетки, которую хотите сохранить и затем нажмите "I". Это называется Обратная Заливка (Inverse Flood Fill) и будут выбраны все сетки, которые не были выбраны в данный момент. Как только ы нажмете "I" и все островки будут выделены, удалите их, нажав "R" или "DELETE". Это быстрее чем удалять каждый ненужный "островок", но так же, здесь просто случайно удалить нужную сетку - будьте осторожнее!

Начнем с обработки участка пещеры. Затем, мы очистим остальную часть сетки. Сейчас, сейчас вам нужно знать только о трех крайних кнопках в левой части панели инструментов Navmesh:

Для очистки участка с пещерой, щелкните левой кнопкой и выделите вершины в участке с пещерой. Не забудьте включить отображение ("W") для лучшей ориентации. Не беспокойтесь о сохранении какого-либо участка сетки в области пещеры: мы восстановим его позже. Убедитесь что Select Vertex (Рис. 4.7) и/или Select Triangle (Рис. 4.6) включены. Вы можете очистить участок пещеры выделяя вершины или треугольники или и то и другое. Рис. 4.9a показывает сетку со всеми выделенными вершинами и треугольниками (или сокращенно с англ. "verts and tris") в области пещеры и готовыми к удалению.

Как только вы выбрали треугольники и/или вершины, которые хотите удалить, нажмите либо "R" либо "Del" для удаления выделенной области. После удаления участка с пещерой, ваша сетка должна быть схожей с Рис. 4.9b.

Создание треугольных кусков

Сейчас пришло время вручную создать сетку в области пещеры.

Protip.jpg Как только вы будете создавать и редактировать все больше и больше навигационных сеток, вам понадобится использовать горячие клавиши сетки вместо использования панели инструментов.

T Вкл/Выкл режим выделения треугольников
V Вкл/Выкл режим выделения вершин
G Вкл/Выкл режим выделения граней

Включите режим Vertex Selection (выделение вершин) используя кнопку Jb NavmeshButtonToggleVertexSelect.png на панели инструментов Navmesh или используя горячую клавишу "V" и приблизьте вид в начало участка с пещерой. Щелчок правой кнопкой по полу. Обратите внимание, что появится вершина. Теперь создайте ещё две вершины тем же способом. Вы должны увидеть что-то вроде Рис. 4.10 - три желтых (или две желтых и одна зеленая) вершины на поверхности пола.

Achtung.png Убедитесь что не включена привязка к сетке (Grid Snap). При редактировании навигационной сетки она нам не нужна, потому что только вызывает проблемы, когда активна.
Protip.jpg При редактировании навигационной сетки используется отдельный набор горячих клавиш, в отличии от обычного режима редактирования в Creation Kit. Некоторые горячие клавиши, к которым вы привыкли, такие как "T" для переключения на вид сверху-вниз, были привязаны к новым клавишам при редактировании навигационной сетки. Вы можете распечатать и смотреть горячие клавиши Navmesh при использовании этого режима.

Обращайте внимание на цвета вершин, которые создаете. Зеленый указывает что вершина выбрана в данный момент. Желтые вершины не выделены и не соединены - не являются частью какого-либо треугольника. Вершины которые не выделены, и которые являются частью треугольника отображаются как Красные. Желтые вершины не служат какой-либо цели и могут быть спокойно удалены, если таковые остались висеть вокруг завершенной сетки.

Для создания треугольника, выделите все три не соединенных, желтых вершины используя CTRL+щелчок левой кнопкой мыши по каждой вершине - или сделайте сразу область выделения на все три вершины. Выделенные вершины станут зеленого цвета, указывая что они были выделены. Нажмите "A" или используйте кнопку Jb NavmeshButtonCreateTriangle.png для создания треугольника из трех вершин, как на Рис. 4.11. Обратите внимание, что кнопка "A" сработает только тогда, когда были выделены именно три вершины.

InDepth.jpg Обратите внимание что две вершины останутся зелеными/выделенными после создания треугольника. Это облегчает создание последующих треугольников. Когда у вас выделено две вершины, все что вам нужно для создания другого треугольника - это нажать CTRL+щелчок правой кнопкой мышки. Новая вершина будет создана там, куда вы щелкнули мышкой и автоматически создаст новый треугольник.

Создание сетки в участке с пещерой

Теперь, когда мы создали наш первый треугольник, нужно заделать остальную часть участка с пещерой другими треугольниками. Простейший способ сделать это - выделить две вершины и нажать CTRL+щелчок правой кнопкой для размещения третьей вершины. Это автоматически создаст новый треугольник между двумя выделенными вершинами и одной только что размещенной.

Обратите внимание, что когда создан новый треугольник, две вершины остаются выделенными/зелеными. Просто используйте CTRL+щелчок правой кнопкой для создания другого треугольника. С правктикой, вы войдете в ритм и научитесь быстро заполнять пространство просто удерживая CTRL и щелкая правой кнопкой мышки. Если две зеленые вершины не те, из которых вы хотите сделать следующий треугольник, то просто нажмите кнопку "Tab" для переключения выделенных вершин. Продолжайте в том же духе и заполните оставшуюся часть участка с пещерой. Как только закончите, ваша сетка участка с пещерой должна выглядеть похожей на Рис. 4.12 и 4.13 ниже.

(Примечание: ваши результаты могут изменяться в зависимости от того, насколько ваш хлам совпадает с тем, что в файле примера)

Protip.jpg С помощью этой техники, вы можете создавать треугольники очень быстро и покрывать большие участки поверхности земли просто используя CTRL-щелчок правой кнопкой. Мы ласково называем эту технику "Прогулка с собакой" (англ. Walking the Dog).

Создаем сетку на нордской лестнице

Перед тем, как перейти к созданию оставшейся части сетки в ячейке, обратим внимание на нордские лестницы, NorHallSm1wayStairs128. Лестница - это типичная проблемная зона при использовании автоматической генерации. Вероятнее всего, что ваша сетка в этом месте имеет разрыв, как на Рис. 4.14a.

К счастью, Creation Kit позволяет легко присоединять разорванные участки сетки типа этого.

Для этого примера, нам нужна чистая грань сверху и снизу лестницы. Следуйте этим шагам:

  1. Удалите любые вершины на самой лестнице, если возможно.
  2. Переставьте вершины в верхней и нижней части лестницы, создавая чистую, открытую грань с каждой стороны.
  3. Если одна грань имеет три или более вершин в верхней части лестницы, объедините некоторые из вершин так, чтобы осталось только две. - Для объединения вершин, выделите те, что хотите слепить и нажмите "Q" или кнопку Jb NavmeshButtonMergeVertices.png на панели инструментов.
  4. Убедитесь что режим выделения граней активен ("G")
  5. Двойной щелчок по одной из граней. Двойной щелчок по грани выделит две вершины на этой грани - и они станут зелеными для обозначения того, что выделены.
  6. С двумя выделенными вершинами, удерживайте CTRL и сделайте двойной щелчок по другой грани. Сетка будет автоматически сгенерирована для присоединения граней. Вар результат должен выглядеть похоже на Рис. 4.14b ниже.

Сетка остальной части уровня

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

  • Сосредоточьтесь на чистой, простой навигационной сетке. С ней проще возиться и она быстрее работает в игре.
  • Запомните горячие клавиши! Держите рядом шпаргалку по Navmesh во время изучения.
  • Не утруждайтесь создавать навигационные сетки в тех зонах, куда ИИ все равно не смогут попасть, таких, как узкие проемы между фурнитурой. Pathing Tests может быть исполосовано для проверки этого.
  • Запомните: для автоматического создания сетки между двумя соседними, открытыми гранями: Двойной щелчок левой кнопкой по грани, затем CTRL+двойной щелчок левой кнопкой по другой грани.
  • Воспользуйтесь несколькими режимами просмотра. Для переключения между ними, нажмите "W" или используйте следующие кнопки на панели инструментов
    NavmeshViewMode.png
  • Для удаления треугольника, включите "T", выберите ненужный треугольник и нажмите DELETE или R. Вы так же можете отменить изменения, которые сделали, нажав CTRL-Z.
  • Удаляя любую вершину вы удалите все треугольники и грани чей частью он являлась.
  • Запомните горячие клавиши для переключения режима выбора треугольников, вершин, и граней. (T, V, G соответсвенно).
  • Чтобы слепить вместе вершины, выделите две или более и нажмите Q или кнопку Jb NavmeshButtonMergeVertices.png Вершины будут слеплены в одну вершину, которая была выделена первой.
  • Двойной щелчок по грани (со включенным режимом вбора граней, "G") для быстрого выделения двух вершин этой грани.
  • Помните, что две вершины остаются выбраны после создания треугольника? Вы можете переключаться между двумя выделенными вершинами на нужные, нажимая "TAB".
  • Вы можете нажать "R" для удаления выделенных объектов если не хотите тянуться через всю клавиатуру, чтобы нажать кнопку DELETE.
  • Стремитесь создать "жирные" треугольники - и настолько близкие к равносторонним, насколько возможно. Это намного эффективнее. Тонких, "худых" треугольников следует избегать. Используйте вращение граней с кнопкой "S" или кнопкой Jb NavmeshButtonEdgeRotate.png для достижения более идеального результата, как показано на Рис. 4.15 пример до и после.
  • Если у вас есть то, что выглядит как соединенная сетка, но вы видите желтую грань, это просто означает, что есть две вершины перекрывающие другие. Чтобы исправить, сделайте выделение вершин и слепите их вместе ("Q"). Если желтая грань все равно остается, повторите то же действие с вершинами с другой стороны грани. Если желтая грань исчезла, значит вы слепили вершины и соединили вашу навигационную сетку.
  • Правый щелчок по грани для создания вершины на этой грани. Это называется расщепление грани.

Вот как должна выглядеть сетка уровня около зон с хламом. Обратите внимание, что на Рис. 4.16 сетка проходит под объектом со включенной физикой (подвижный/динамический). Вам никогда не нужно обходить сеткой вокруг объектов Havok, потмоу что навигационная сетка учитывает их во время игры. В примере ниже, объекты Havok это лопата, деревянная повозка, и керамический кувшин. Вы заметите что сетка проходит под этими объектами. Деревянные бочки при этом не являются объектами Havok, и поэтому нам нужно обходить их сеткой.

Рис. 4.17 показывает примерно то, как должна выглядеть ваша навигационная сетка после того, как вы закончите. В этом примере, мы оставили маленькие, изолированные участки сетки, называемые "островками". Их можно легко удалить.

  1. Выберите любой треугольник в основной навигационной сетке и нажмите "I" или Jb NavmeshButtonToggleInverseFloodFill.png
  2. Это называется обратная заливка и она выделит все сетки, которые не были выделены. Предполагается, что ваша игровая зона состоит из единой, непрерывный навигационной сетки, и в данный момент, все области выделенные зеленым нам не нужны.
  3. Когда эти островки выделены, удалите их, используя "R" или "DELETE".
  4. Финальная версия вашей сетки должна быть похожа на ту, что на Рис. 4.18.


Исправление ошибок сетки

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

Achtung.png Если у вас есть какие-то ошибки, вы будете уведомлены о них при сохранении плагина. Вне зависимости, получите ли вы сообщение об ошибке при сохранении или нет, вы всегда должны запускать проверку сетки "Check Navmesh".
  1. Откройте диалоговое окно выбора треугольника по индексу показанное на Рис. 4.18. Есть три способа сделать это:
    1. Используя кнопку Find Triangle на панели инструментов навигационной сетки, Jb NavmeshButtonFindTriangle.png
    2. Нажимая горячие клавиши "CTRL+F"
    3. Через гавное меню: Navmesh > Select Triangle by Index.
  2. Как только это окно появилось, выберите "Check Navmesh".
  3. Предупреждение, показанное на Рис. 4.19, выскочит с показом количества треугольников (если есть) и спросит хотим ли мы удалить их всех.
  4. Далее, займемся проблемными треугольниками. Здесь есть два подхода к этому:
    1. Выбрав "Yes" удалит все проблемные треугольники - но вам придется пройтись и найти, где эти треугольники были расположены и поправить их (обычно создавая новый треугольник). У вас не будет никаких других способов найти эти треугольники, как только на глаз, что может быть очень затруднительным при сложных сетках, особенно если эти треугольники были маленькими или перекрывали что-то.
    2. Мы рекомендуем вам исправлять все ошибки вручную, в этом случае вы можете выбрать "No" для обхода удаления. Это закроет диалоговое окно с предупреждениями.
    3. Нажмите Next Warning в диалоговом окне Select Triangle. Камера в окне Render Window автоматически переместится к проблемному треугольнику и выделит его. Большинство проблем легко решается удалением проблемного треугольника и построением нового.
    4. Если у вас более одного предупреждения, нажмите Check Navmesh ещё раз и повторяйте этот процесс пока все проблемные треугольники не будут исправлены. (Вам необходимо проводить повторную проверку между каждым удалением, потому что меняется индекс треугольников в сетке, при корректировке каждой ошибки.)
  5. Когда завершите, снова сохраните ваш плагин.
Protip.jpg Если вам не хочется исправлять каждое предупреждение вручную, пройдитесь по всем плохим треугольникам, используя кнопку "Next Warning", затем выберите "Yes" для удаления всех проблемных треугольников. Это даст вам знать, где проверить сетку, на наличие ошибок, потому что удаленные кусочки пропадут и вы сразу увидите где.

Создание покрытий граней

Покрытия граней (англ. Cover edges) содержат данные, такие как высота кусочка покрытия, которые NPC используют в бою и во время обычного проложения маршрута.

  1. Для автоматического обнаружения покрытий, перейдите в Navmesh > Find Cover с главной панели инструментов, или используйте кнопку Jb NavmeshButtonFindCover.png на панели инструментов Navmesh.
  2. Поиску покрытий нужно некоторое количество времени для обработки, оно зависит от железа вашего компьютера и сложности сетки.
  3. Когда закончится, вы заметите разноцветные грани в вашей сетке. Каждый цвет представляет различную высоту покрытия. После генерации покрытий, ваша сетка должна выглядеть похожей на ту, что представлена на Рис. 4.20 ниже.
  4. Для того, чтобы лучше визуально представить какие покрытия есть на вашем уровне, перейдите в Navmesh > Draw Cover (показано на Рис. 4.21).

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

InDepth.jpg Информация о покрытиях используется не только для дальнего боя - она так же определяет где ИИ будет стремиться проходить, когда например будет бежать от врага. Так что хорошо бы генерировать эту информацию, даже если она не кажется важной.

Сетка может содержать и другие данные, не только о покрытиях - есть так же возможность помечать треугольники как участки с водой, предпочитаемые для пути, и грани - как раскрывающиеся выступы. Больше информации можно найти здесь.
Так же есть возможность более точной настройки данных у покрытий, хотя такой уровень детализации не часто нужен. Для ручного изменения данных покрытия, выделите грань и нажмите "E". Это вызовит диалоговое окно "Edge Cover".

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

  • Обзор Navmesh - Категория по навигационной сетке, содержит ссылки на другие темы по обзору сетки.
  • Main Toolbar - Информация о разных иконках на главной панели инструментов и панели инструментов Navmesh и что они делают.
  • Navmesh Toolbar - Разъясняет кнопки на панели инструментов Navmesh.
  • Шпаргалка по Navmesh - Полезные горячие клавиши во время нахождения в режиме редактирования навигационной сетки. Хорошо бы напечатать и держать рядом при изучении.

Сплошная сетка дает фундамент, который нужен для установки хорошо работающих NPC и для боевого геймплея. В следующем уроке мы именно с этим и будем разбираться.

Известная проблема

В данный момент существует проблема из-за которой навигационные сетки в .ESP файлах прекращают работать, если вы путешествуете на несколько ячеек от той, где находится сетка. NPC прекращают двигаться и не продолжат, пока игра не будет перезагружена. На данный момент проблема решается, и её исправление находится в работе.


LeftArrow.png Предыдущий учебник Вернуться в Учебный центр Следующий учебник RightArrow.png

tags: creation kit сетки путей, navmesh