Введение

Алгоритм определения видимой поверхности в 3D-графике

Алгоритм живописца (также алгоритм сортировки по глубине и приоритетное заполнение) — это алгоритм определения видимой поверхности в 3D-компьютерной графике, который работает с многоугольниками по отдельности, а не с пикселями, строками или областями, как другие алгоритмы удаления скрытых поверхностей. Алгоритм живописца создает изображения, сортируя многоугольники в сцене по глубине и размещая каждый многоугольник в порядке от самых дальних до самых близких объектов. Впервые этот алгоритм был предложен Мартином Ньюэллом, Ричардом Ньюэллом и Томом Санчей в 1972 году как базовый метод решения проблемы определения видимой поверхности, когда все трое работали в CADCentre. Название "алгоритм живописца" отсылает к технике, используемой многими художниками, которые начинают с изображения дальних частей сцены, а затем переходят к более близким, перекрывая при этом некоторые области дальних объектов. Аналогично, алгоритм живописца сортирует все многоугольники в сцене по глубине и затем отрисовывает их в этом порядке, от самых дальних до самых близких. Он закрашивает части, которые обычно не видны, тем самым решая проблему видимости, но при этом закрашивает невидимые области дальних объектов. Порядок, используемый алгоритмом, называется "порядком глубины" и не обязан соответствовать числовым расстояниям до частей сцены: ключевым свойством этого порядка является то, что если один объект перекрывает часть другого, то первый объект отрисовывается после перекрываемого объекта.

Временная сложность

Временная сложность алгоритма живописца сильно зависит от алгоритма сортировки, используемого для упорядочивания многоугольников. При условии использования наиболее оптимального алгоритма сортировки, алгоритм живописца имеет наихудшую сложность O(n log n + m*n), где n — количество многоугольников, а m — количество пикселей для заполнения.

Сложность пространства

Наихудшая пространственная сложность алгоритма художника — O(n+m), где n — количество многоугольников, а m — количество пикселей для заливки.

Преимущества

Существует два основных технических условия, благоприятствующих использованию алгоритма художника.

Основная графическая структура

Алгоритм художника не так сложен по структуре, как другие алгоритмы глубинной сортировки. Такие компоненты, как порядок рендеринга, основанный на глубине, используемый в алгоритме художника, являются одним из самых простых способов определения последовательности графического вывода. Это требовало от программ максимально эффективного управления памятью для выполнения масштабных задач без сбоев. Алгоритм художника отдает приоритет эффективному использованию памяти, но ценой большей вычислительной нагрузки, поскольку необходимо отрисовать все части всех изображений. Даже в таких системах иногда применяется вариант алгоритма художника. Поскольку реализации Z-буфера обычно полагаются на аппаратные регистры буфера глубины с фиксированной точностью, существует вероятность возникновения проблем с видимостью из-за ошибок округления. Это проявляется в виде наложений или зазоров на стыках полигонов. Чтобы избежать этого, некоторые графические движки реализуют "дополнительную отрисовку", прорисовывая затронутые края обоих полигонов в порядке, определяемом алгоритмом художника. Это означает, что некоторые пиксели фактически отрисовываются дважды (как и в полном алгоритме художника), но это происходит лишь на небольших участках изображения и оказывает пренебрежимо малое влияние на производительность.