Видимость и буфер глубины
Камера видит не всю сцену целиком: объекты перекрывают друг друга. Задача видимости — для каждого пикселя выбрать ближайшую к камере поверхность (или линию в 2.5D). От выбранного метода зависят и скорость, и артефакты.
Конвейер растеризации — 3D-графика и анимация.
OpenGL depth test — OpenGL и шейдеры.
BSP для уровней — Пространственные структуры и ускорение.
Видимость и буфер глубины
Лицевые грани и отсечение по нормали
★ Back-face culling — не рисовать треугольники, чья нораль "смотрит" от камеры (знак скалярного произведения нормали и вектора взгляда). Работает для замкнутых водонепроницаемых мешей; для открытых поверхностей (лист, лента) culling отключают.
Буфер глубины (z-buffer)
Самый распространённый метод в real-time 3D.
- Для каждого пикселя хранят глубину ближайшего пока что нарисованного фрагмента.
- Новый фрагмент сравнивают с записью; если он ближе — перезаписывают цвет и глубину.
- Тест выполняет GPU (depth test); порядок отрисовки объектов не важен (для непрозрачной геометрии).
Проблемы: fighting z (близкие coplanar поверхности), нужна согласованность near/far плоскостей камеры. Полупрозрачность обычно рисуют после непрозрачного, сортировкой back-to-front — z-buffer один не решает смешивание альфы.
Иерархический z-buffer (Hi-Z) — пирамида минимальных глубин по блокам экрана; отсекает целые треугольники до растеризации. Используется в GPU и occlusion culling.
Методы без z-buffer (история и ниши)
| Метод | Идея | Минус |
|---|---|---|
| Алгоритм художника | Сортировка полигонов от дальних к ближним | O(n log n), ошибки при пересечениях |
| Робертс / Аппель | Аналитическое удаление невидимых рёбер | Дорого для сложных мешей |
| Ray casting на пиксель | Луч из камеры, первое пересечение | Без ускорения — медленно |
| BSP-дерево | Порядок обхода даёт правильную перерисовку для статичной indoor-сцены | Долгое построение, плохо для динамики |
В современных API z-buffer включён по умолчанию; художник и BSP остаются в учебниках и level design.
Порталы и PVS
В коридорных уровнях (шутеры, квесты) комнаты соединены порталами — полигонами-"окнами". Если камера в комнате A, рисуют только комнаты, достижимые через видимые порталы.
★ PVS (Potentially Visible Set) — для каждой зоны заранее (offline) считают множество потенциально видимых зон. В runtime лишние комнаты не отправляют в GPU. Классика 1990–2000-х; в открытых мирах чаще streaming + occlusion + Hi-Z.
BSP из пространственных структур помогает и сортировке, и построению порталов.
Сводка
| Задача | Практичный выбор |
|---|---|
| Игра, general mesh | Z-buffer + back-face cull + frustum cull |
| Прозрачность | Сортировка + blend после opaque pass |
| Indoor, мало динамики | Порталы / PVS + z-buffer |
| Офлайн качество | Ray tracing / path tracing (3D-графика и анимация) |