Графика › Кадр
Буфер глубины: кто ближе к камере
Нужно знать заранее: Шейдер: функция для каждого пикселя, Пространства: где находится точка
Видеокарта рисует треугольники по одному и в том порядке, в каком их прислал движок. Как она понимает, что стена закрывает дерево, а не наоборот? Разберём буфер глубины: как он решает это для каждого пикселя, почему глубина хранится неравномерно и откуда мерцание совпавших поверхностей. А ещё — как ранняя проверка экономит работу пиксельного шейдера и как та же глубина, прочитанная в материале, делает мягкую кромку воды. Это третий урок курса «Как движок рисует кадр».
Зачем это
В уроке про шейдер путь треугольника заканчивался строкой «тест глубины: если на этом месте уже нарисовано что-то ближе, результат выбрасывается». За этой строкой стоит механизм, с которым художник окружения сталкивается постоянно, даже если не знает его имени:
- наклейка на стене или разметка на дороге вдали рябит полосами;
- дальние горы начинают мерцать, когда камеру научили подходить к стенам вплотную;
- вода, туман и дым режут землю жёсткой линией там, где её касаются;
- трава и листва стоят дороже, чем «должны» по числу пикселей;
- частицы пропадают за стеклом, будто оно сплошное.
Всё это одна тема: как видеокарта решает, что ближе к камере, и что ещё умеет глубина.