Оптимизация 3D: видимость, границы и группы
Не рисуйте лишнюю геометрию и не теряйте нужную из-за неправильного AABB.
Разные способы сократить работу
Frustum culling исключает объект по границам камеры; occlusion culling использует данные перекрытия другими объектами. Это разные механизмы. Один Z-buffer не означает, что вся скрытая геометрия перестала требовать CPU-подготовку, вершины и команды.
Дистанционное упрощение, ограничение видимости, более простые тени и разбиение уровня решают разные задачи. Изменяйте их по измеренному ограничению и проверяйте переходы. Видимость на расстоянии не загружает и не освобождает части мира автоматически.
Учитывать размер группы
В MultiMesh индивидуальные положения находятся в буфере, а видимость группы определяется общими границами. Группа на весь город может оставаться видимой, когда камера видит лишь небольшой участок. Разбейте её по пространственным областям, если выигрыш от отсечения оправдывает дополнительные группы и команды.
| Ситуация | Проверить |
|---|---|
| Объект исчезает при движении камеры | Границы, преобразование, слой и диапазон видимости |
| Пропадает хвост или край эффекта | GPU-деформацию и запас в AABB |
| Видим малый участок большой стаи | Общие границы и размер группы |
| После оптимизации изменились силуэт или тени | Не удалена ли нужная визуальная работа |
Границы для GPU-анимации
MultiMesh-пример задаёт CustomAabb. Частицы используют VisibilityAabb с запасом на движение. Вершинная деформация на GPU сама по себе не обновляет подходящий CPU AABB на каждую возможную позу.
CaptureAabb у частиц — оценка текущего состояния с возможным отставанием и чтением GPU-буфера. Для известной ограниченной анимации явные безопасные границы проще и не требуют чтения каждый кадр. Не назначайте бесконечно большой AABB как универсальное исправление исчезновения объектов.
Проверить реальную стоимость
Пример использует непрозрачный unshaded-материал без теней. Это не замена проверке освещённой модели с прозрачностью, тенями и эффектами. Настройки depth prepass и доступность отдельных приёмов зависят от рендерера; не считайте их одинаковой гарантией для Forward+, Mobile и Compatibility.