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

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

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

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

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

      • Объединение нескольких крупных моделей 3DGS
  • 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
    • Unity

      • Введение в Unity SDK
      • Технические возможности
      • Требования к среде разработки
      • Руководство по быстрому старту для PC
      • Руководство по оптимизации настроек проекта
      • Руководство по разработке для Pico 4 Ultra
      • Руководство по стримингу Pico 4 Ultra с PC
      • Руководство по разработке для Quest 3
      • Руководство по стримингу Quest 3 с PC
      • Руководство по разработке OpenXR
      • Руководство по бизнес-стримингу Pico 4 Ultra
      • Глоссарий
      • FAQ
      • Свяжитесь с нами
      • Руководство по разработке функций

        • Руководство по разработке смешанного рендеринга нескольких сцен
        • Руководство по разработке приёма теней
        • Руководство по разработке освещения в реальном времени
        • Руководство по разработке многокамерного рендеринга
        • Руководство по разработке рендеринга изображений высокого разрешения
        • Руководство по разработке совместимости форматов данных LCC и LCC2
        • Руководство по разработке эффекта загрузки
        • Руководство по разработке переключения режима рендеринга Mip
        • Руководство по разработке привязки к рёбрам и углам
        • Руководство по разработке проецируемых декалей
        • Руководство по разработке видеопроецируемой декали
        • Руководство по разработке подсветки
        • Руководство по разработке обрезки в реальном времени
        • Руководство по разработке коррекции цвета
        • Руководство по разработке получения данных Mesh сцены
        • Руководство по разработке в режиме редактора
        • Руководство по настройке параметров производительности рендеринга
        • Руководство по разработке совместной упаковки приложения и данных
        • Руководство по разработке системы коллизий
        • Руководство по проблемам с разрешениями при разработке на macOS
        • Руководство по разработке компиляции и упаковки для устройств iOS
      • Справочник по API

        • LCCManager
        • Renderer
        • Типы данных
      • Журнал изменений

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14

Руководство по настройке параметров производительности рендеринга

Обзор

Для адаптации к устройствам с разным уровнем производительности LCC Unity SDK предоставляет несколько параметров конфигурации производительности рендеринга. Они распределены между классом LCCManager и классом Renderer и в основном связаны со следующими методами:

КлассМетодНазначениеМомент вызова
LCCManagerSetMaxBufferSplatЗадаёт максимальную ёмкость Buffer (выделяется один раз на GPU)Должен вызываться перед любым Renderer.Load()
LCCManagerSetFullRenderSplatЗадаёт пороговое количество Splat между полным/чанковым рендерингомДолжен вызываться перед Load()
LCCManagerSetMaxRenderSplatsЗадаёт общее количество Splat, отображаемых на экране при чанковом рендерингеВ любое время во время чанкового рендеринга
LCCManagerSetStartLodЗадаёт начальный уровень LODВступает в силу во время выполнения, после Load()
LCCManagerSetDetailLevelЗадаёт уровень детализации рендеринга (тонкая настройка точности рендеринга)Может динамически настраиваться во время выполнения
RendererSetRenderAllЗадаёт, принудительно ли использовать полный рендерингДолжен вызываться перед Load()

Примечание:

Среди перечисленных выше параметров единицами методов, связанных с количеством Splat (SetMaxBufferSplat, SetFullRenderSplat, SetMaxRenderSplats), являются десятки тысяч, то есть переданное значение × 10000 = фактическое количество Splat.

Примечание:

SetMaxBufferSplat задаёт максимальный объём буферного пространства в памяти CPU и видеопамяти GPU, доступный для рендеринга, а SetMaxRenderSplats задаёт количество примитивов Splat, отображаемых на экране при чанковом стриминговом рендеринге. Поэтому если значение, заданное через SetMaxRenderSplats, превышает значение, заданное через SetMaxBufferSplat, оно будет усечено.

Режимы рендеринга SDK

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

  • Режим SingleRender (по умолчанию): в основном используется на PC/Mac. Этот режим не позволяет создавать несколько Renderer, то есть одновременно может рендериться только одна LCC-сцена. Когда объём данных мал и соответствует требованиям, данные будут полностью отрендерены (загружаются полные данные LOD0, без динамического переключения LOD, наилучшее качество рендеринга); когда примитивы Splat LOD0 превышают общий объём, который можно полностью отрендерить, данные будут отрендерены по чанкам с использованием механизма динамического стримингового рендеринга LOD во время выполнения для адаптации к рендерингу очень больших сцен.
  • Режим MultiRender: в основном используется на PC/Mac. Этот режим позволяет смешанный рендеринг нескольких LCC-сцен в реальном времени; все данные сцен будут отрендерены по чанкам с использованием механизма динамического LOD.
  • Путь чанкового рендеринга: на платформах Mobile (iOS / Android), VR (Pico 4 / Quest 3), а также для источников данных HTTP на PC/Mac используется путь чанкового рендеринга с применением механизма динамического LOD.
Связь между тремя режимами рендеринга SDK и путями полного/чанкового рендеринга

Связь между тремя режимами рендеринга SDK и путями полного / чанкового рендеринга

Полный рендеринг против чанкового рендеринга:

  • Полный рендеринг: загружает и рендерит полные данные LOD0 за один раз, наилучшее качество изображения; включается только в режиме SingleRender на PC/Mac, когда объём данных LOD0 соответствует условиям.
  • Чанковый рендеринг: динамически загружает данные уровня LOD в соответствии с фрустумом камеры рендеринга, контролирует количество Splat на экране и адаптируется к аппаратным средам с ограниченной видеопамятью и производительностью.

Значения SDK по умолчанию

Значения по умолчанию, минимально допустимые значения и максимально допустимые значения для каждой платформы приведены ниже (единица: десятки тысяч):

ПараметрЗначение по умолчаниюМинимально допустимое значениеМаксимально допустимое значениеПримечания
Глобальный буферPC/Mac: 3000
Mobile: 300
VR: 100
100PC/Mac: 4450
Mobile: 600
VR: 200
Управляется через SetMaxBufferSplat()
Порог полного рендеринга25001004450Управляется через SetFullRenderSplat(); действует только для режима SingleRender на PC/Mac
Количество чанкового экранного рендерингаPC/Mac: 2000
Mobile: 200
VR: 60
10——Управляется через SetMaxRenderSplats(); максимальное значение ограничено объёмом глобального буфера
Принудительно ли использовать полныйНет————Действует только на PC/Mac и только для режима SingleRender

Стратегия конфигурации для PC/Mac

Для PC/Mac рекомендуется настраивать параметры в соответствии со следующими уровнями качества (единица количества Splat: десятки тысяч):

УровеньГлобальный буферПорог полного рендерингаЧанковое экранное количествоStartLODПринудительный полный
Очень низкий3003003002Нет
Низкий1000100010001Нет
Средний3000190019001Нет
Высокий3000250025000Нет
Очень высокий3000300030000Нет

Примечания о переключении уровней во время выполнения

  • При переключении между уровнями Medium / High / Very high можно оставить глобальный буфер без изменений, и логика обработки очень проста: вам нужно задать только порог полного рендеринга, количество экранного рендеринга и StartLOD.
  • При переключении между уровнями Very low / Low и другими уровнями ситуация сложнее: поскольку глобальный буфер может уже быть выделен, сначала необходимо уничтожить исходный глобальный буфер, а затем создать новый. Эта операция требует освобождения всех Renderer с помощью Dispose() и освобождения буфера, затем повторного получения Renderer через GetRender().
  • Текущая рекомендация: задайте уровень по умолчанию High; при переключении уровней оставляйте глобальный буфер без изменений, но всё же обрабатывайте переключение полного/чанкового рендеринга.

Примечания

  1. SetMaxBufferSplat() должен задаваться в самом начале, в идеале до GetRender(). Если вы задаёте это значение после того, как сцена уже запущена, для вступления в силу необходимо освободить все Renderer с помощью Dispose(), а затем повторно получить Renderer.
  2. SetFullRenderSplat() действует только для режима SingleRender на PC/Mac и должен задаваться до Load().
  3. SetMaxRenderSplats() применяется ко всему чанковому рендерингу и может задаваться в любое время, но должен вызываться позже SetMaxBufferSplat() (если этот метод вызывается).

API производительности рендеринга

SetMaxBufferSplat

// Возвращаемое значение: void
public void SetMaxBufferSplat(int _count)

Задаёт максимальную ёмкость буфера GPU (количество Splat). В пути RenderCore (чанк MultiRender / SingleRender) он определяет размер общего глобального буфера; в режиме полной загрузки SingleRender он выделяется в соответствии с фактическим объёмом данных и не ссылается на это значение. Выделяется один раз и не может изменяться динамически.

ПараметрТипОписание
_countintГлобальный единый размер буфера в количестве Splat 3DGS, единица: десятки тысяч

Пример использования:

lccManager.SetMaxBufferSplat(3000); // 30 миллионов точек (по умолчанию для PC/Mac)
lccManager.SetMaxBufferSplat(4450); // 44,5 миллиона точек (максимум для PC/Mac)

Описание:

  • Единица — «десятки тысяч»; переданное значение × 10000 = фактическое количество Splat.
  • Должен вызываться перед любым Renderer.Load(), иначе он выдаст ошибку и вернётся.
  • Сначала необходимо вызвать SetPlatformType.
  • Чем больше ёмкость, тем выше использование видеопамяти; задавайте по мере необходимости.
  • Ограничения платформ: PC/Mac — 44,5 миллиона, Android/iOS — 6 миллионов, VR — 2 миллиона; минимум 1 миллион.
  • Значения по умолчанию: PC/Mac — 30 миллионов, Android/iOS — 3 миллиона, VR — 1 миллион.

SetFullRenderSplat

// Возвращаемое значение: void
public void SetFullRenderSplat(int _count)

Задаёт пороговое количество Splat между полным и чанковым рендерингом в режиме SingleRender на PC/Mac. Когда количество Splat LOD0 данных меньше этого значения, используется путь полного рендеринга (выделенный буфер GPU); в противном случае используется путь чанкового рендеринга.

ПараметрТипОписание
_countintКоличество Splat 3DGS, единица: десятки тысяч

Пример использования:

lccManager.SetFullRenderSplat(2500); // 25 миллионов точек

Описание:

  • Единица — «десятки тысяч».
  • Поддерживается только на платформах PC/Mac; вызов на других платформах выдаёт ошибку и сразу возвращается.
  • Должен вызываться перед любым Renderer.Load().
  • Сначала необходимо вызвать SetPlatformType.
  • Диапазон значений [100, 4450] (то есть от 1 миллиона до 44,5 миллиона).

SetMaxRenderSplats

// Возвращаемое значение: void
public void SetMaxRenderSplats(int _count)

Задаёт максимальное количество Splat, отображаемых на экране за кадр при чанковом рендеринге. Может вызываться динамически после Load() и ограничивается верхним пределом, заданным через SetMaxBufferSplat. Вызов в режиме полного рендеринга SingleRender не имеет эффекта (записывает предупреждение в журнал и сразу возвращается).

ПараметрТипОписание
_countintКоличество Splat 3DGS, единица: десятки тысяч; минимум 100 тысяч, максимум не превышает размер буфера, заданный через SetMaxBufferSplat()

Пример использования:

lccManager.SetMaxRenderSplats(2000); // 20 миллионов точек

Описание:

  • Единица — «десятки тысяч»; переданное значение × 10000 = фактическое количество Splat.
  • Может динамически настраиваться во время выполнения.
  • Не должен превышать верхний предел ёмкости, заданный через SetMaxBufferSplat (при превышении он автоматически ограничивается и записывает предупреждение в журнал).
  • Настройка во время выполнения не поддерживается в режиме полного рендеринга SingleRender.

SetStartLod

// Возвращаемое значение: void
public void SetStartLod(int lod)

Задаёт начальную точку развёртывания LOD (с отсчётом от 0). 0 означает самое детальное; чем больше число, тем грубее уровень. Этот метод вступает в силу во время выполнения и должен вызываться после Load().

ПараметрТипОписание
lodintНачальный уровень LOD, диапазон [0, 10], 0 — самый детальный

Пример использования:

lccManager.SetStartLod(0);

Описание:

  • Действует только для чанкового рендеринга, диапазон [0, 10], при превышении автоматически ограничивается.
  • Фактический действующий верхний предел ограничен totalLevels данных.
  • SDK вступает в силу сразу после вызова.

SetDetailLevel

// Возвращаемое значение: void
public void SetDetailLevel(float sse)

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

ПараметрТипОписание
ssefloatКоэффициент подразбиения, диапазон [1, 100]. 1 = самый грубый (без уточнения даже на близком расстоянии), 100 = самый детальный (все уровни уточнены до самого низкого)

Пример использования:

lccManager.SetDetailLevel(50f); // Средняя точность

Описание:

  • Этот параметр используется для тонкой настройки детализации сцены, применяется только к чанковому рендерингу, по умолчанию 40, диапазон [1, 100], при превышении автоматически ограничивается.
  • Использует логарифмическое отображение: диапазон низких значений чувствителен к изменениям, а диапазон высоких значений изменяется плавно.
  • Может динамически настраиваться во время выполнения.

SetRenderAll

// Возвращаемое значение: void
public void SetRenderAll(bool _renderAll)

Метод класса Renderer. Задаёт, принудительно ли этот Renderer использует полный рендеринг, и должен вызываться до Load(). Используется только для режима SingleRender на PC/Mac: во время выполнения он сравнивает объём данных LOD0 с верхним пределом 44,5 миллиона; если LOD0 < 44,5 миллиона, для рендеринга напрямую используются полные данные LOD0; если LOD0 > 44,5 миллиона, эта настройка не действует (ограничена максимальным GBuffer Unity) и вместо этого используется чанковый рендеринг.

ПараметрТипОписание
_renderAllboolПринудительно ли использовать полный рендеринг

Пример использования:

renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Полностью загружено"));

Описание:

  • Поддерживается только на платформах PC/Mac; вызов на мобильных устройствах / VR записывает предупреждение в журнал и возвращается.
  • Настройка вступает в силу при следующем вызове Load() и не влияет на текущий загруженный набор данных.
  • Может использоваться вместе со свойством IsRenderAll для запроса текущего состояния.