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

Renderer: экземпляр рендеринга

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

Пространство имёнLCCCore

Свойства

СвойствоТипДоступОписание
TransformTransformТолько чтениеКомпонент Transform, к которому прикреплён экземпляр рендеринга
IsEnableboolТолько чтениеАктивен ли экземпляр рендеринга; по умолчанию true
IsRenderAllboolТолько чтениеРендерятся ли полные данные LOD0 (в отличие от режима стриминга / обхода LOD); по умолчанию false

Методы

Методы сгруппированы по назначению:

  • Загрузка данных и жизненный цикл
  • Управление во время выполнения и запросы

Загрузка данных и жизненный цикл

Load

public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)

Загружает файл данных 3DGS. Поддерживает .lcc2 (локальный файл или удалённый по HTTP) и нативные форматы .ply / .sog / .spz / .splat / .ksplat (только локальные файлы).

ПараметрТипОписание
_filePathstringПуть к файлу данных (локальный путь или HTTP URL)
_onProgressAction<float>Обратный вызов прогресса загрузки, может быть null
_onCompleteActionОбратный вызов завершения загрузки, может быть null
_onErrorAction<string>Обратный вызов ошибки загрузки (необязательный), с описанием ошибки в качестве параметра

Примечания:

  • Обратный вызов _onComplete срабатывает после того, как данные фактически попадут на GPU.
  • Операции, такие как приём теней и запуск эффектов, должны вызываться внутри обратного вызова _onComplete.
  • Нативные форматы всегда используют путь полной загрузки SingleRender (без разбиения на LOD-чанки); прогресс сообщается через _onProgress, а ошибки — через _onError.
  • Режим MultiRender не допускает источники данных HTTP или нативные форматы.
  • HTTP поддерживает только .lcc2; нативные форматы — только локальные пути и только режим SingleRender.
  • SetPlatformType() / SwitchRenderPass() / SetMainCamera() и другие предварительные условия должны быть выполнены сначала.
  • Необходимо вызвать Unload() или Dispose() перед повторным вызовом Load(); вызов Load() во время выполняющейся загрузки отклоняется и вызывает _onError.

Пример:

renderer.Load("D:/data/scene.lcc2",
    p => Debug.Log($"Загрузка {p:P0}"),
    () => {
        Debug.Log("Загрузка завершена");
        lccManager.SetShadowReceive(true);
    });

Unload

public void Unload()

Освобождает текущие загруженные данные и возвращается в состояние «создан, но не загружен», сохраняя регистрацию экземпляра в менеджере. Один и тот же экземпляр Renderer можно переиспользовать, многократно выполняя цикл Load → Unload → Load.

Примечания:

  • Отличие от Dispose(): регистрация в менеджере не удаляется, и экземпляр можно переиспользовать.
  • После Unload() IsEnable равен false; повторный вызов Load() сбрасывает всё состояние данных.
  • Выполняется только когда данные завершили загрузку; возвращается сразу, когда данные не загружены или уже вызван Dispose().

Пример:

renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Перезагружено"));

Dispose

public void Dispose()

Уничтожает экземпляр рендеринга и освобождает все ресурсы GPU и память. После уничтожения экземпляр нельзя использовать, и все публичные методы автоматически становятся неэффективными.

Примечания:

  • После вызова автоматически уведомляет LCCManager об удалении ссылки.

Пример:

renderer.Dispose();
renderer = null;

Управление во время выполнения и запросы

SetEnable

public void SetEnable(bool _enable)

Задаёт состояние активации экземпляра рендеринга. При отключении он не участвует в рендеринге или выборе LOD.

ПараметрТипОписание
_enableboolАктивировать ли

Примечания:

  • Не освобождает ресурсы и может быть повторно активирован в любое время.

Пример:

renderer.SetEnable(false); // Скрыть
renderer.SetEnable(true);  // Показать

SetAlpha

public void SetAlpha(float alpha)

Задаёт независимую непрозрачность текущего Renderer. В отличие от глобальной альфы уровня процесса LCCManager.SetAlpha(), этот API влияет только на текущий Renderer. Итоговая альфа = покрытие сплата × глобальная альфа LCCManager × альфа этого Renderer.

ПараметрТипОписание
alphafloatНезависимая непрозрачность текущего Renderer, диапазон [0, 1], при превышении автоматически ограничивается

Примечания:

  • Действует только на пути MultiRender / RenderCore (PC / Mac); на этом пути каждый сплат несёт renderID, и шейдер индексирует массив альф по Renderer через renderID.
  • Путь FullRender / Mobile не имеет renderID, поэтому этот API там ничего не делает (значение кэшируется и автоматически применяется при последующем переключении на путь RenderCore).

Пример:

renderer.SetAlpha(0.5f);

SetRenderAll

public void SetRenderAll(bool _renderAll)

Задаёт, использовать ли режим полного рендеринга (полный рендеринг данных LOD0). Он вступает в силу при следующем вызове Load() и не влияет на текущий загруженный набор данных.

ПараметрТипОписание
_renderAllboolРендерить ли полностью

Примечания:

  • Поддерживается только на платформах PC / Mac; на mobile / VR не действует.
  • Текущее состояние можно запросить через свойство IsRenderAll.

Пример:

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

SetColliderEnable

// Возвращаемое значение: bool, true=установлено успешно, false=данные не имеют коллайдера или экземпляр неактивен
public bool SetColliderEnable(bool _enable)

Переключает функцию коллайдера. После включения IntersectsSphere() / IntersectsCapsule() и RaycastMesh() становятся доступными.

ПараметрТипОписание
_enableboolВключать ли коллайдер

Примечания:

  • Данные должны содержать узел Collider, иначе возвращается false.
  • Renderer должен быть активен.

Пример:

bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("Данные не содержат коллайдера");

SetEnvironment

public void SetEnvironment(bool _env)

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

ПараметрТипОписание
_envboolРендерить ли данные окружения

Примечания:

  • Данные должны содержать узлы окружения.
  • Данные окружения независимы от системы LOD основных данных.

Пример:

renderer.SetEnvironment(true);

GetBounds

public void GetBounds(out Vector3 max, out Vector3 min)

Получает выровненный по осям ограничивающий параллелепипед (мировые координаты) отрендеренных данных.

ПараметрТипОписание
maxout Vector3Максимальная точка ограничивающего параллелепипеда (мировые координаты)
minout Vector3Минимальная точка ограничивающего параллелепипеда (мировые координаты)

Примечания:

  • Возвращает Vector3.zero, когда данные загружены не полностью.
  • Может использоваться для позиционирования камеры и расчёта угла обзора.

Пример:

renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;

GetSourceType

// Возвращаемое значение: SourceType
public SourceType GetSourceType()

Получает тип источника загруженных данных; см. SourceType.

Примечания:

  • Возвращает SourceType.None, когда данные не загружены.

GetDataType

// Возвращаемое значение: DataType
public DataType GetDataType()

Получает тип формата загруженных данных; см. DataType.

Примечания:

  • Возвращает DataType.None, когда данные не загружены.

GetMeta (по пути к файлу)

// Возвращаемое значение: bool, true=прочитано успешно
public bool GetMeta(string _filePath, out SplatMeta _metaData)

Читает метаданные данных 3DGS по указанному пути к файлу без полной загрузки данных.

ПараметрТипОписание
_filePathstringПуть к файлу данных
_metaDataout SplatMetaВыходные метаданные

Примечания:

  • Поддерживает локальные пути и HTTP URL.
  • Читает только метаданные заголовка файла и не загружает данные облака точек.
  • Возвращает false, когда путь пуст или файл не существует.

Пример:

if (renderer.GetMeta(filePath, out SplatMeta meta))
{
    Debug.Log(meta.source);
    Debug.Log(meta.dataType);
}

GetMeta (по загруженным данным)

// Возвращаемое значение: bool, true=прочитано успешно
public bool GetMeta(out SplatMeta _metaData)

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

ПараметрТипОписание
_metaDataout SplatMetaВыходные метаданные

Пример:

if (renderer.GetMeta(out SplatMeta meta))
{
    Debug.Log(meta.source);
}

GetMeshBlockInfos

// Возвращаемое значение: List<LCCMeshBlockInfo>, метаданные блоков коллизионного Mesh; null при отсутствии Mesh или недоступности
public List<LCCMeshBlockInfo> GetMeshBlockInfos()

Возвращает метаданные всех коллизионных блоков Mesh (id, мировой / локальный ограничивающий параллелепипед, количество вершин, количество граней). Без I/O и без разбора — только читает метаданные, уже находящиеся в памяти. См. LCCMeshBlockInfo.

Примечания:

  • Только платформа PC / Mac + локальный источник данных; должен вызываться в основном потоке.
  • Типичное использование: сначала получить мировой ограничивающий параллелепипед каждого блока, выбрать нужные id, затем вызвать GetMeshes(ids) для чтения только этих блоков.
  • Нативные форматы (PLY / SOG / SPZ / splat / ksplat) не имеют Mesh и возвращают null (нормально, без журнала).

Пример:

var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
    Debug.Log($"{info.id}: вершин={info.vertexCount}, граней={info.faceCount}");
}

GetMeshes

// Возвращаемое значение: List<LCCMeshBlock>, все геометрические данные коллизионного Mesh; null при недоступности
public List<LCCMeshBlock> GetMeshes()

Синхронно возвращает геометрические данные всех коллизионных блоков Mesh (вершины + индексы треугольников, в локальных координатах). Это тяжёлая операция (синхронное чтение с диска + разбор + выделение), поэтому вызовите её один раз и кэшируйте самостоятельно — никогда не вызывайте каждый кадр. См. LCCMeshBlock.

Примечания:

  • Только платформа PC / Mac + локальный источник данных; должен вызываться в основном потоке.
  • Для больших сцен используйте GetMeshBlockInfos() для выбора id + GetMeshes(ids), чтобы избежать выделения огромного объёма управляемой памяти сразу.
  • Один блок может иметь более 65535 вершин, поэтому перед построением Mesh необходимо задать mesh.indexFormat = IndexFormat.UInt32.

Пример:

var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
    // block.vertices / block.triangles находятся в локальной системе координат объекта
}

GetMeshes (по id)

// Возвращаемое значение: List<LCCMeshBlock>, геометрические данные коллизионного Mesh для указанных id; null при отсутствии попаданий
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)

Синхронно возвращает геометрические данные коллизионных блоков Mesh (в локальных координатах) для указанных id. id предоставляются методом GetMeshBlockInfos().

ПараметрТипОписание
_idsIEnumerable<string>Набор id целевых блоков (предоставляется GetMeshBlockInfos())

Примечания:

  • Неизвестные id пропускаются с предупреждением; дублирующиеся id дедуплицируются (без повторного чтения с диска); порядок возврата — это порядок обхода id (после дедупликации).
  • Возвращает null с предупреждением, когда ввод равен null, пуст или не имеет попаданий.
  • Остальные ограничения такие же, как у GetMeshes().

Пример:

var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);