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: поддержка коллизий

LCC4Unreal поддерживает динамическую загрузку данных коллизий, поэтому персонаж может свободно передвигаться и взаимодействовать в мире 3DGS.

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

Коллизии опираются на файл коллизий, поставляемый вместе с данными, и требования различаются по форматам:

ФорматДанные коллизийПоддержка
.lcccollision.lci в каталоге данных, в старых версиях collision.binПоддерживается
.lcc2Файлы .ply в data/mesh/ внутри каталога данныхПоддерживается
.sog / .spz / .plyНетНе поддерживается

Плагин проверяет их в порядке collision.lci → collision.bin → data/mesh/*.ply и, если ни одного из них нет, выводит предупреждение и отключает коллизии. После загрузки данных используйте HaveValidCollisionData(), чтобы убедиться, что текущие данные содержат пригодные данные коллизий.

Примечание: collision.lci требует экспорта из LCC Studio v1.6.1 или выше; данные, экспортированные более ранними версиями, используют collision.bin.

Альтернативы для одиночных форматов

.sog, .spz и .ply — одиночные форматы, которые не несут данных коллизий, поэтому плагин не может создать для них коллизии. Когда коллизии нужны, постройте их в сцене самостоятельно:

  • Blocking Volume: соберите из блокирующих объёмов движка землю, стены и другие области, которые должны препятствовать движению. Подходит для правильных форм и обходится дешевле всего
  • Приблизительный меш: разместите меш, совпадающий по форме с 3DGS, и включите его коллизии. Подходит для сцен со сложными формами. Этот меш может повторно использовать прокси-меш, достаточно изменить его пресет коллизий на блокирующий

Оба способа не связаны с механизмом загрузки коллизий LCC, не зависят от CollisionLoadMaxDistance и не подкачиваются и не выгружаются при движении камеры.

Механизм загрузки

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

Camera position changes
      │
      ▼
Compute the set of collision chunks that should be loaded in range
      │
      ▼
Compare with the previous set ── same ──▶ skip, do nothing
      │ different
      ▼
Load the new chunks → hand them to the physics system for baking → generate collision bodies

Несколько замечаний по реализации:

  • Диапазон загрузки управляется параметром Max Load Collision Distance(m), и области за этой дистанцией коллизий не имеют
  • Первая загрузка синхронная, что не даёт персонажу провалиться сквозь землю до готовности коллизий; все последующие обновления асинхронные и не блокируют основной поток
  • Есть ограничение частоты, поэтому при непрерывном движении камеры коллизии не перестраиваются каждый кадр
  • Когда набор видимых блоков не изменился, обновление пропускается, поэтому небольшие перемещения на месте не вызывают перестроения
  • Расчёт ведётся только по основной камере, и SceneCapture в загрузке коллизий не участвует

Преимущества

  • Расход памяти зависит только от диапазона загрузки, а не от общего объёма данных, поэтому коллизии работают и в больших сценах
  • Количество тел коллизий, которые должна обрабатывать физическая система, всегда остаётся под контролем и не замедляет расчёт физики при росте сцены

Издержки и способы их избежать

ПроблемаПричинаСпособ обойти
Персонаж проваливается сквозь землю в момент старта игрыКоллизии ещё не построеныПоднимите PlayerStart немного выше или включайте перемещение персонажа только после готовности коллизий
Рывок, когда персонаж входит в область сцены 3DGS издалекаПерсонаж появился за пределами диапазона загрузки коллизий, и при входе запускается первая синхронная загрузкаРазместите точку появления внутри диапазона загрузки коллизий или загрузите все коллизии за один проход
Вдали нет коллизий, и трассировка лучей ни во что не попадаетВ областях за диапазоном загрузки тела коллизий не создаютсяУвеличьте Max Load Collision Distance(m) или перейдите на проверку, не зависящую от коллизий
Короткое время после телепортации или быстрого перемещения коллизий нетБлоки коллизий новой области ещё загружаютсяЗагрузите все коллизии за один проход
Рывки при движении, высокое время Update CollisionБлоки коллизий часто подкачиваются, выгружаются и перезапекаютсяУменьшите диапазон загрузки или проверьте, действительно ли нужны коллизии
При работе с навигацией навигационная сетка постоянно перестраиваетсяИзменения коллизий запускают обновление NavMeshУвеличьте диапазон загрузки, чтобы целевая область загрузилась за один проход, и используйте запекание Static, см. Поддержка системы навигации

Загрузка всех коллизий за один проход

Большинство перечисленных издержек возникает из-за динамической подкачки и выгрузки во время выполнения. Если размер сцены ограничен и памяти достаточно, увеличьте Max Load Collision Distance(m) так, чтобы он покрывал всю сцену, и тогда все коллизии будут построены за один проход при загрузке данных.

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

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

Включение

LCCComponent->SetLCCCollisionEnable(true);

Либо отметьте bEnableCollision в панели Details.

Включение коллизий LCC в панели Details

Включение коллизий LCC в панели Details

Демонстрация динамических коллизий LCC

Динамические коллизии персонажа в сцене LCC

Проверка

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

Отображение тел коллизий в режиме отображения

Проверка тел коллизий в режиме коллизий игрока или коллизий видимости

Связанные свойства

СвойствоОписание
bEnableCollisionВключает коллизии
CollisionLoadMaxDistanceМаксимальная дистанция загрузки данных коллизий (по умолчанию 300 метров)
Свойства включения коллизий и максимальной дистанции загрузки

Настройка состояния включения коллизий и максимальной дистанции загрузки

Замечания

  • После включения коллизий можно использовать LineTrace самого движка UE для трассировки лучей по телам коллизий, и диапазон трассировки также ограничен диапазоном загрузки
  • Память, занятую данными коллизий, можно посмотреть в Collision Data Usage у stat xgrids, время обновления — в Update Collision, а значение показателей см. в Параметрах производительности
Назад
Анимация загрузки
Далее
Поддержка системы навигации