Картоделие KF2: что такое Precomputed Visibility
Вокруг Precomputed Visibility в картоделии для Killing Floor 2 много путаницы. Статья пересказывает короткий гайд, объясняющий, что это такое, зачем нужно и как настраивать в SDK.
Что это
Precomputed Visibility отсекает (выгружает) геометрию, объекты и источники света, которых игрок не видит. Например, когда игрок стоит перед стеной, всё за ней отсекается, что сокращает отрисовываемую геометрию в сцене и повышает производительность. В отличие от Dynamic Occlusion Culling, который делает это автоматически во время игры, Precomputed Visibility сохраняет информацию в самом уровне.
Зачем использовать
Dynamic Occlusion Culling автоматически отсекает невидимые объекты, но не бесплатно: каждый отсечённый объект требует инструкции, а чем их больше, тем дольше работает поток рендеринга и ниже частота кадров. При правильной настройке Precomputed Visibility отсекает примерно 50-80% скрытой геометрии, остальное доделывает Dynamic Occlusion Culling.
Настройка
Документация Unreal Engine 3 советует накрыть всю игровую зону одним Precomputed Visibility Volume. Для SDK KF2 автор обнаружил, что так результат плохой, а время построения света зря заметно растёт. Вместо этого используйте сочетание полос и боксов размером не менее 256x256x256, эффективно покрывающих всю игровую зону.
- Все места, куда может попасть игрок, должны быть полностью покрыты объёмами, иначе геометрия может отсекаться там, где не должна.
- Утапливайте объёмы на несколько единиц в пол или землю, чтобы система правильно определяла покрываемую поверхность.
- После расстановки объёмов убедитесь, что функция включена в World Properties.
Отладка и просмотр статистики
Консольные команды:
TogglePrecomputedVisibilityвключает и отключает использование данных precomputed visibility.ShowPrecomputedVisibilityвключает и отключает отладочную визуализацию ячеек.
Визуализация ячеек precomputed visibility.
Чтобы увидеть цифры:
- Откройте окно Log: View > Browser Windows > Log, чтобы видеть, включены ли ваши команды.
В окне Log видны результаты команд.
- Установите конфигурацию окна просмотра с вертикальным разделением: View > Viewport Configuration > 1x1 Vertical Split.
- Выполните
stat initviewsи нажмите Shift+L, чтобы вывести информацию InitViews.
Три значения, за которыми нужно следить.
Оставайтесь внутри ячеек Precomputed Visibility, иначе данные будут неточными. При правильной настройке значение "Statically occluded primitives" должно составлять 50-80% от значения "Occluded primitives".
Чтобы измерить, сколько времени рендеринга вы экономите на кадр, выполните ToggleOcclusion, отключив Precomputed Visibility: значение "Occlusion Result" вырастет. Выполните команду снова, чтобы включить, и вычтите. Даже экономия в 5-6 миллисекунд - хороший результат.
Включите Precomputed Visibility в World Properties и визуализацию отсечения в ортографических видах.
В оригинале также была ссылка на пример карты.
Вопросы и ответы
- Что такое Precomputed Visibility?
- Функция, которая сохраняет в уровне, какая геометрия, объекты и свет скрыты из каждой точки, и заранее отсекает их, уменьшая отрисовываемую геометрию и повышая производительность.
- Сколько она должна отсекать?
- При правильной настройке она отсекает 50-80% скрытой геометрии, остальное берёт на себя Dynamic Occlusion Culling.
- Какого размера делать объёмы?
- Автор использует полосы и боксы не меньше 256x256x256 единиц, покрывающие всю игровую зону и утопленные на несколько единиц в пол.