Руководство по настройке параметров производительности рендеринга
Обзор
Для адаптации к устройствам с разным уровнем производительности LCC Unity SDK предоставляет несколько параметров конфигурации производительности рендеринга. Они распределены между классом LCCManager и классом Renderer и в основном связаны со следующими методами:
| Класс | Метод | Назначение | Момент вызова |
|---|---|---|---|
LCCManager | SetMaxBufferSplat | Задаёт максимальную ёмкость Buffer (выделяется один раз на GPU) | Должен вызываться перед любым Renderer.Load() |
LCCManager | SetFullRenderSplat | Задаёт пороговое количество Splat между полным/чанковым рендерингом | Должен вызываться перед Load() |
LCCManager | SetMaxRenderSplats | Задаёт общее количество Splat, отображаемых на экране при чанковом рендеринге | В любое время во время чанкового рендеринга |
LCCManager | SetStartLod | Задаёт начальный уровень LOD | Вступает в силу во время выполнения, после Load() |
LCCManager | SetDetailLevel | Задаёт уровень детализации рендеринга (тонкая настройка точности рендеринга) | Может динамически настраиваться во время выполнения |
Renderer | SetRenderAll | Задаёт, принудительно ли использовать полный рендеринг | Должен вызываться перед 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 и путями полного / чанкового рендеринга
Полный рендеринг против чанкового рендеринга:
- Полный рендеринг: загружает и рендерит полные данные LOD0 за один раз, наилучшее качество изображения; включается только в режиме SingleRender на PC/Mac, когда объём данных LOD0 соответствует условиям.
- Чанковый рендеринг: динамически загружает данные уровня LOD в соответствии с фрустумом камеры рендеринга, контролирует количество Splat на экране и адаптируется к аппаратным средам с ограниченной видеопамятью и производительностью.
Значения SDK по умолчанию
Значения по умолчанию, минимально допустимые значения и максимально допустимые значения для каждой платформы приведены ниже (единица: десятки тысяч):
| Параметр | Значение по умолчанию | Минимально допустимое значение | Максимально допустимое значение | Примечания |
|---|---|---|---|---|
| Глобальный буфер | PC/Mac: 3000 Mobile: 300 VR: 100 | 100 | PC/Mac: 4450 Mobile: 600 VR: 200 | Управляется через SetMaxBufferSplat() |
| Порог полного рендеринга | 2500 | 100 | 4450 | Управляется через SetFullRenderSplat(); действует только для режима SingleRender на PC/Mac |
| Количество чанкового экранного рендеринга | PC/Mac: 2000 Mobile: 200 VR: 60 | 10 | —— | Управляется через SetMaxRenderSplats(); максимальное значение ограничено объёмом глобального буфера |
| Принудительно ли использовать полный | Нет | —— | —— | Действует только на PC/Mac и только для режима SingleRender |
Стратегия конфигурации для PC/Mac
Для PC/Mac рекомендуется настраивать параметры в соответствии со следующими уровнями качества (единица количества Splat: десятки тысяч):
| Уровень | Глобальный буфер | Порог полного рендеринга | Чанковое экранное количество | StartLOD | Принудительный полный |
|---|---|---|---|---|---|
| Очень низкий | 300 | 300 | 300 | 2 | Нет |
| Низкий | 1000 | 1000 | 1000 | 1 | Нет |
| Средний | 3000 | 1900 | 1900 | 1 | Нет |
| Высокий | 3000 | 2500 | 2500 | 0 | Нет |
| Очень высокий | 3000 | 3000 | 3000 | 0 | Нет |
Примечания о переключении уровней во время выполнения
- При переключении между уровнями Medium / High / Very high можно оставить глобальный буфер без изменений, и логика обработки очень проста: вам нужно задать только порог полного рендеринга, количество экранного рендеринга и StartLOD.
- При переключении между уровнями Very low / Low и другими уровнями ситуация сложнее: поскольку глобальный буфер может уже быть выделен, сначала необходимо уничтожить исходный глобальный буфер, а затем создать новый. Эта операция требует освобождения всех Renderer с помощью
Dispose()и освобождения буфера, затем повторного получения Renderer черезGetRender(). - Текущая рекомендация: задайте уровень по умолчанию High; при переключении уровней оставляйте глобальный буфер без изменений, но всё же обрабатывайте переключение полного/чанкового рендеринга.
Примечания
SetMaxBufferSplat()должен задаваться в самом начале, в идеале доGetRender(). Если вы задаёте это значение после того, как сцена уже запущена, для вступления в силу необходимо освободить все Renderer с помощьюDispose(), а затем повторно получить Renderer.SetFullRenderSplat()действует только для режима SingleRender на PC/Mac и должен задаваться доLoad().SetMaxRenderSplats()применяется ко всему чанковому рендерингу и может задаваться в любое время, но должен вызываться позжеSetMaxBufferSplat()(если этот метод вызывается).
API производительности рендеринга
SetMaxBufferSplat
// Возвращаемое значение: void
public void SetMaxBufferSplat(int _count)
Задаёт максимальную ёмкость буфера GPU (количество Splat). В пути RenderCore (чанк MultiRender / SingleRender) он определяет размер общего глобального буфера; в режиме полной загрузки SingleRender он выделяется в соответствии с фактическим объёмом данных и не ссылается на это значение. Выделяется один раз и не может изменяться динамически.
| Параметр | Тип | Описание |
|---|---|---|
_count | int | Глобальный единый размер буфера в количестве 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); в противном случае используется путь чанкового рендеринга.
| Параметр | Тип | Описание |
|---|---|---|
_count | int | Количество 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 не имеет эффекта (записывает предупреждение в журнал и сразу возвращается).
| Параметр | Тип | Описание |
|---|---|---|
_count | int | Количество Splat 3DGS, единица: десятки тысяч; минимум 100 тысяч, максимум не превышает размер буфера, заданный через SetMaxBufferSplat() |
Пример использования:
lccManager.SetMaxRenderSplats(2000); // 20 миллионов точек
Описание:
- Единица — «десятки тысяч»; переданное значение × 10000 = фактическое количество Splat.
- Может динамически настраиваться во время выполнения.
- Не должен превышать верхний предел ёмкости, заданный через
SetMaxBufferSplat(при превышении он автоматически ограничивается и записывает предупреждение в журнал). - Настройка во время выполнения не поддерживается в режиме полного рендеринга SingleRender.
SetStartLod
// Возвращаемое значение: void
public void SetStartLod(int lod)
Задаёт начальную точку развёртывания LOD (с отсчётом от 0). 0 означает самое детальное; чем больше число, тем грубее уровень. Этот метод вступает в силу во время выполнения и должен вызываться после Load().
| Параметр | Тип | Описание |
|---|---|---|
lod | int | Начальный уровень LOD, диапазон [0, 10], 0 — самый детальный |
Пример использования:
lccManager.SetStartLod(0);
Описание:
- Действует только для чанкового рендеринга, диапазон
[0, 10], при превышении автоматически ограничивается. - Фактический действующий верхний предел ограничен
totalLevelsданных. - SDK вступает в силу сразу после вызова.
SetDetailLevel
// Возвращаемое значение: void
public void SetDetailLevel(float sse)
Задаёт уровень детализации рендеринга, используемый для тонкой настройки точности рендеринга. Чем больше значение, тем детальнее рендеринг и тем выше затраты на производительность.
| Параметр | Тип | Описание |
|---|---|---|
sse | float | Коэффициент подразбиения, диапазон [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) и вместо этого используется чанковый рендеринг.
| Параметр | Тип | Описание |
|---|---|---|
_renderAll | bool | Принудительно ли использовать полный рендеринг |
Пример использования:
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Полностью загружено"));
Описание:
- Поддерживается только на платформах PC/Mac; вызов на мобильных устройствах / VR записывает предупреждение в журнал и возвращается.
- Настройка вступает в силу при следующем вызове
Load()и не влияет на текущий загруженный набор данных. - Может использоваться вместе со свойством
IsRenderAllдля запроса текущего состояния.