Что такое occlusion culling?
Что проверяют
Понимаете ли, за что платит кадр, и различаете ли виды отсечения. За вопросом стоит не кнопка в редакторе, а умение объяснить, где экономия настоящая, а где работа просто переехала с видеокарты на процессор.
Как отвечать
Occlusion culling это отказ от отрисовки объектов, которые попали в пирамиду видимости, но полностью закрыты другой геометрией. Соседние механизмы: frustum culling отсекает то, что вне пирамиды, backface culling отбрасывает обратные грани, LOD не убирает объект, а упрощает его.
Как определяют видимость:
- предрасчёт: сцена делится на ячейки и порталы, для каждой считается набор потенциально видимого, результат запекается в сборку. В рантайме почти бесплатно, но требует статичной геометрии;
- аппаратные запросы: на видеокарте рисуется ограничивающий объём и запрашивается число фрагментов, прошедших тест глубины. Точно, но ответ забирают с задержкой на кадр, иначе конвейер встанет на синхронизации;
- программное отсечение: упрощённые окклюдеры растеризуются процессором в маленький буфер глубины, по нему и проверяется видимость.
Стоит добавить, что буфер глубины сам по себе не отсечение: он отбрасывает фрагменты, когда вершины уже обработаны, а вызов отрисовки уже отправлен.
Где спотыкаются
Называют окклюзией проверку ограничивающих объёмов на попадание в поле зрения камеры. Это frustum culling, другая стадия и другая цена; окклюзия начинается там, где объект в кадре, но невидим.
Считают, что включать нужно всегда. В открытой сцене без крупных загораживающих объектов отсечение только тратит время и память под предрасчёт; выигрыш дают коридоры и плотная застройка.
Забывают про движение и про то, что камера не одна. Динамические объекты в запечённые данные не попадают, слишком агрессивные настройки дают мигание геометрии, а тени и отражения строятся из другой точки, и отсечение по основной камере для них неверно.