XGRIDSДокументация
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Lixel CyberColor

    • Руководство пользователя LCC Studio

      • Начало работы
      • Версия и обновления
      • Загрузка и установка
      • Обзор интерфейса и навигация
      • Перед реконструкцией
      • Реконструкция модели
      • Реконструкция одиночной модели
      • Объединение карт
      • Воздушно-наземное объединение
      • Воздушная реконструкция
      • Мои модели
      • Другие функции
      • Настройки и учётная запись
      • Конвертер
      • Реконструкция по видео
      • Часто задаваемые вопросы
    • LCC Scene Editor

      • Версия и обновления
      • Учётная запись и вход
      • Обзор продукта и главная страница
      • Интерфейс редактора
      • Режимы навигации по сцене
      • Файл
      • Настройки
      • Операции редактирования
      • Окно
      • Глобальная панель инструментов
      • Ресурсы и свойства
      • Левая панель инструментов
      • Точки обзора
      • Портал
      • Skybox
      • Аннотации
      • Измерение
      • Flythrough
      • Отчёт по сцене
      • 3D Layout
      • Мини-карта
      • Preview Mode (Viewer)
      • Справка
      • Часто задаваемые вопросы
      • Точка появления
    • LCC Model Editor

      • Версия и обновления
      • Руководство пользователя
      • Обзор и интерфейс
      • Операции с файлами
      • Инструменты выбора
      • Редактирование моделей
      • Измерение
      • Цветокоррекция
      • Управление ресурсами
      • Настройки и справка
      • Часто задаваемые вопросы
  • Plugin & SDK

    • Unreal

      • Введение
      • Быстрый старт — Windows
      • Быстрый старт — Linux
      • Быстрый старт — Quest3
      • Редакции и лицензирование
      • Рендеринг
      • Растеризация Tiled (экспериментально)
      • Визуальные настройки
      • Нормали и освещение
      • Редактирование сцены
      • Параметры производительности
      • Руководство по оптимизации производительности
      • Интеграция со сторонними и движковыми плагинами
      • Прокси-меш
      • Анимация загрузки
      • Коллизии
      • Поддержка системы навигации
      • Поддержка однослойной воды
      • Локализация
      • Частые вопросы
      • Устранение неполадок
      • Журналы и диагностика
      • Свяжитесь с нами
      • Рекомендуемые практики

        • Переосвещение 3DGS с помощью меша LixelStudio
      • Справочник API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Журнал изменений

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1

Создание навигационной сетки в сцене 3DGS

Navigation System Support

Область применения

Этот документ рассчитан на сцены, где навигация строится по данным коллизий LCC, поэтому он применим только к ALCCActor и ALCC2Actor: собственные данные коллизий есть только у форматов .lcc и .lcc2, см. Коллизии.

.sog, .spz и .ply данных коллизий не содержат, поэтому проходимые области нужно строить самостоятельно с помощью Blocking Volume или приблизительного меша. Такая геометрия состоит из стандартных объектов UE, и навигация настраивается по официальному процессу Unreal Engine, который не касается особенностей этого документа.

Обзор

Navigation System в Unreal Engine предоставляет AI-персонажам проходимые области через NavMesh. Создание NavMesh опирается на геометрию сцены, которая может влиять на навигацию и имеет корректные коллизии.

Коллизии LCC загружаются динамически по блокам: загружаются только блоки коллизий в пределах определённого диапазона вокруг камеры, и они подкачиваются и выгружаются при движении камеры (о механизме см. Коллизии: механизм загрузки). Это напрямую определяет стратегию настройки навигации:

  • Подкачка и выгрузка блоков коллизий во время выполнения запускают перестроение NavMesh и вызывают рывки
  • Поэтому коллизии целевой области следует загрузить полностью за один проход, а затем строить навигацию в режиме Static

Для сцен LCC в качестве Runtime Generation рекомендуется Static. Dynamic постоянно реагирует на изменения коллизий и перестраивает NavMesh, а вместе с блочной загрузкой коллизий это часто запускает перестроение и в больших сценах даёт заметную нагрузку на CPU и рывки.

Предварительные условия

УсловиеОписание
Данные содержат файл коллизийДля .lcc нужен collision.lci (в старых версиях collision.bin); для .lcc2 — файлы .ply в data/mesh/. См. Коллизии: предварительные требования
Коллизии включеныУ Actor bEnableCollision = true
Данные коллизий загруженыВыберите в режиме отображения коллизии игрока или коллизии видимости, чтобы увидеть загруженные тела коллизий
Actor может влиять на навигациюУ Actor CanEverAffectNavigation = true
Диапазон загрузки коллизий достаточенMax Load Collision Distance(m) покрывает целевую область, где нужна навигация, по умолчанию 300 метров
Границы построения NavMesh достаточныВ сцене размещён NavMeshBoundsVolume и покрывает целевую область, где будет действовать AI

Дистанция загрузки коллизий и NavMeshBoundsVolume управляют разными диапазонами: первая определяет, в каких областях есть данные коллизий, второй — в каких границах движок строит NavMesh. Чтобы в целевой области появилась пригодная NavMesh, оба должны её покрывать.

Порядок действий

1. Включите и проверьте коллизии LCC

Выберите ALCCActor или ALCC2Actor и включите Enable Collision (bEnableCollision) в панели Details либо включите из кода:

LCCComponent->SetLCCCollisionEnable(true);

Одновременно убедитесь, что у Actor CanEverAffectNavigation = true, чтобы его коллизии могли участвовать в построении навигации.

После загрузки данных LCC выберите в режиме отображения коллизии игрока или коллизии видимости и проверьте, появились ли тела коллизий в целевой области. Коллизии используют асинхронное физическое запекание, поэтому после начала рендеринга изображения 3DGS может потребоваться подождать ещё несколько секунд.

Проверка загрузки тел коллизий LCC в режиме отображения Unreal Engine

Проверка в режиме коллизий игрока или коллизий видимости, что тела коллизий LCC в целевой области навигации загружены

2. Настройте диапазон загрузки коллизий

Коллизии LCC загружаются только в пределах диапазона, заданного параметром Max Load Collision Distance(m), по умолчанию 300 метров.

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

Плата за это — более долгая загрузка при запуске и повышенный расход памяти. Через Collision Data Usage у stat xgrids можно проверить, приемлема ли память после полной загрузки, см. Коллизии: загрузка всех коллизий за один проход.

Не меняйте Runtime Generation на Dynamic, чтобы обойти недостаточную дистанцию коллизий. Dynamic не расширяет диапазон загрузки коллизий, и в областях за этой дистанцией по-прежнему нет коллизий, пригодных для построения навигации.

3. Разместите и настройте NavMeshBoundsVolume

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

Размещение и масштабирование NavMeshBoundsVolume в сцене LCC

Размещение и масштабирование NavMeshBoundsVolume, чтобы границы построения навигации покрывали всю область действия AI

Ещё раз убедитесь, что оба диапазона одновременно удовлетворяют требованиям:

  • Max Load Collision Distance(m): определяет, есть ли в целевой области загруженные коллизии LCC;
  • NavMeshBoundsVolume: определяет, в каких границах Unreal Engine строит NavMesh.

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

4. Настройте Navigation System

НастройкаРекомендуемое значениеОписание
Runtime GenerationStaticПредпочтительная настройка. Навигация создаётся только при построении в редакторе, что избавляет от издержек постоянного перестроения во время выполнения
Cell SizeЗначение по умолчаниюЧем меньше значение, тем точнее NavMesh, но тем выше время построения, расход памяти и издержки во время выполнения

Когда всё же использовать Dynamic

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

С коллизиями LCC Dynamic требует особой осторожности: коллизии сами загружаются динамически по блокам, и каждая подкачка или выгрузка блока считается изменением геометрии и запускает перестроение навигации, что в больших сценах может давать непрерывную нагрузку на CPU и рывки. Если Dynamic действительно необходим, одновременно увеличьте диапазон загрузки коллизий так, чтобы он покрывал всю область действия, и избежите изменений коллизий во время выполнения.

Не включайте Dynamic только для того, чтобы увеличить дистанцию коллизий или охват навигации.

5. Дождитесь готовности коллизий и постройте Static NavMesh

При использовании рекомендуемого режима Static действуйте в следующем порядке:

  1. Загрузите данные LCC и убедитесь, что изображение 3DGS уже отображается.
  2. Дождитесь завершения асинхронного запекания коллизий.
  3. В режиме коллизий игрока или коллизий видимости убедитесь, что коллизии в целевой области загружены.
  4. Убедитесь, что Collision Load Max Distance и NavMeshBoundsVolume покрывают целевую область.
  5. Выполните Build → Build Paths в главном меню Unreal Engine.
  6. Дождитесь завершения построения навигации.
  7. Сохраните уровень и данные навигации.

Проверка и устранение неполадок

Нажмите P, чтобы отобразить NavMesh во вьюпорте:

  • Зелёные области: проходимая NavMesh создана;
  • Нет зелёных областей: в этом месте NavMesh не создана, проверяйте в порядке ниже.
Нажатие P для отображения зелёных проходимых областей NavMesh в сцене LCC

Проверка NavMesh нажатием P; зелёное покрытие означает, что в этой области созданы проходимые данные навигации

Если в целевом месте нет зелёной NavMesh, проверьте по порядку:

  1. Содержат ли данные коллизии: убедитесь, что используется .lcc или .lcc2 и в каталоге данных есть соответствующий файл коллизий; одиночные форматы коллизий не содержат и для этого процесса не подходят;
  2. Включены и загружены ли коллизии: убедитесь, что bEnableCollision = true и CanEverAffectNavigation = true, и что в режиме коллизий игрока или коллизий видимости видны тела коллизий в целевом месте;
  3. Достаточен ли диапазон загрузки коллизий: если целевое место выходит за диапазон загрузки, увеличьте Max Load Collision Distance(m) и дождитесь повторной готовности коллизий;
  4. Покрывает ли NavMeshBoundsVolume целевое место: переместите или отмасштабируйте Volume, чтобы границы построения навигации полностью покрывали целевую область;
  5. Была ли Static NavMesh перестроена: после проверки коллизий и диапазонов выполните Build → Build Paths, дождитесь завершения и сохраните уровень и данные навигации;
  6. Снова нажмите P и проверьте зелёное покрытие.

Если всё перечисленное верно, но создать навигацию по-прежнему не удаётся, дополнительно проверьте в Output Log ошибки, связанные с Navigation, Recast и коллизиями, и убедитесь, что текущий уровень сохранён.

Назад
Коллизии
Далее
Поддержка однослойной воды