Растеризация Tiled: второй путь растеризации в LCC2
Конвейер LCC2 предлагает два способа растеризации, выбираемых свойством Rasterizer у Actor: способ по умолчанию Pipeline использует собственный конвейер рендеринга движка, а Tiled — реализованный плагином вычислительный путь на основе тайлов.
Сейчас Tiled является экспериментальным и относится к редакции Pro. Он действует только после регистрации App Key, см. Редакции и лицензирование.
В большинстве плотных сцен он заметно повышает частоту кадров, но выигрыш зависит от содержимого изображения и от того, где находится узкое место. В некоторых сценах выигрыш небольшой, а в других изменений нет вовсе. После включения подтвердите результат измерениями, как описано в разделе Как определить, есть ли выигрыш. Не считайте, что он всегда быстрее.
Примечание: «тайл» здесь означает тайлы пикселей экрана, и это не то же самое, что «рендеринг по частям» из раздела Рендеринг, где узлы загружаются по видимости из камеры. Первое определяет, как рисуются данные, уже находящиеся в видеопамяти, второе — как данные попадают в видеопамять. Они независимы и могут действовать одновременно.
Различия двух способов растеризации
| Pipeline (по умолчанию) | Tiled | |
|---|---|---|
| Растеризация | Передаётся конвейеру рендеринга движка; каждый splat разворачивается в квад, и движок заполняет пиксели | Собственная вычислительная отправка плагина; видимые splat сначала распределяются по экранным тайлам, затем шейдинг и композитинг идут тайл за тайлом |
| Сортировка | Одна глобальная сортировка по всем видимым splat | Сегментированная сортировка по каждому экранному тайлу; каждый сегмент сортирует только те splat, которые попадают в этот тайл |
| Зрелость | Давно существующий путь по умолчанию | Экспериментальный |
| Лицензирование | Доступно в бесплатной редакции | Редакция Pro |
Выигрыш возникает по двум причинам: диапазон сортировки сужается с глобального до одного экранного тайла, и пиксели обрабатываются только в тех тайлах, которые их действительно покрывают, что сокращает лишнее заполнение в перекрывающихся областях.
Поэтому выигрыш связан с содержимым изображения: он очевиден при высокой плотности splat и сильном экранном перекрытии, и незаметен, когда изображение разрежено или когда узкое место частоты кадров изначально не в сортировке и заполнении пикселей.
Визуальный результат в обоих случаях одинаков. Переключение Rasterizer не требует изменения других параметров и не влияет на загрузку данных, LOD, объёмы обрезки, освещение и настройки цвета.
Как включить
В категории XGrids панели Details у Actor задайте Rasterizer значение Tiled. Свойство расположено сразу после Render Mode и появляется только тогда, когда Render Mode равен 3DGS.
Вызов сеттера из Blueprint или C++:
LCC2Component->SetRasterizer(ELCC2Rasterizer::Tiled);
Есть два геттера с разным назначением:
| Метод | Что возвращает |
|---|---|
GetRasterizer() | Выбор, сохранённый в панели |
GetEffectiveRasterizer() | Фактически действующую растеризацию с учётом проверки лицензии |
Используйте GetEffectiveRasterizer(), чтобы убедиться, что путь рендеринга действительно проходит через Tiled.
Как определить, есть ли выигрыш
Поскольку выигрыш не гарантирован, измеряйте до и после переключения. Методика совпадает с Руководством по производительности:
- Зафиксируйте условия теста: тот же вид или траектория камеры, то же разрешение и Screen Percentage, все остальные параметры без изменений.
- Сначала выполните прогревочный проход, чтобы начальная компиляция шейдеров и первое чтение с диска не попали в измерения.
- Запишите время кадра GPU при
Pipelineс помощьюstat unitкак базовое значение. - Измените только
Rasterizerи измерьте тот же вид снова. - Повторите для нескольких характерных видов, особенно для изображений с наибольшей плотностью splat и самым сильным перекрытием.
Если время кадра GPU не снижается, текущее узкое место лежит за пределами того, что покрывает этот путь. Оставьте Pipeline и продолжайте искать реальное узкое место по руководству по производительности.
Область применения
| Пункт | Примечания |
|---|---|
| Конвейер | Только конвейер LCC2. У ALCCActor (.lcc) этого свойства нет |
| Форматы | .lcc2 / .sog / .spz / .ply — все работают |
| Режим отображения | Только режим 3DGS. Режим облака точек игнорирует свойство и всегда использует Pipeline |
| Движок и RHI | Тот же диапазон поддержки, что и у самого плагина; работают и D3D12, и Vulkan |
| Несколько видов | Стереорендеринг VR, nDisplay, разделение экрана и SceneCapture — всё поддерживается |
Поведение без лицензии
Установка Rasterizer в Tiled без зарегистрированного App Key не вызывает ошибки и не приводит к сбою загрузки. Путь рендеринга автоматически откатывается к Pipeline. Выбор, сохранённый в панели, никогда не перезаписывается, поэтому он начинает действовать сразу после регистрации лицензии, без необходимости задавать его снова.
Чтобы понять, действительно ли используется Tiled, прочитайте возвращаемое значение GetEffectiveRasterizer(): при откате он возвращает Pipeline, тогда как GetRasterizer() по-прежнему возвращает Tiled.
Примечание: перед упаковкой релиза убедитесь, что лицензия действительна, иначе упакованная сборка следует поведению бесплатной редакции и использует Pipeline.
Когда оставить Pipeline
- Используется режим отображения облака точек. Свойство там не действует, поэтому настраивать нечего.
- Загружены данные
.lcc. В конвейере LCC этого пути нет. - Проекты на бесплатной редакции. Значение
Tiledвсё равно откатится, поэтому вариант по умолчанию понятнее. - Измерения не показывают улучшения времени кадра.
- Проект перешёл к приёмочной проверке, где экспериментального пути лучше избегать.
Tiled снижает стоимость этапа рендеринга; он не уменьшает работу по загрузке и обходу. Когда узкое место на стороне загрузки данных, сначала разберитесь с загрузкой и LOD по Руководству по производительности.