Скачать презентацию Удаление невидимых поверхностей и линий Содержание Скачать презентацию Удаление невидимых поверхностей и линий Содержание

II-4. Удаление невидимых поверхностей и линий.pptx

  • Количество слайдов: 70

Удаление невидимых поверхностей и линий Удаление невидимых поверхностей и линий

Содержание • • • Постановка проблемы Алгоритм Робертса Алгоритм Варнока Алгоритм Вейлера-Азертона Алгоритм плавающего Содержание • • • Постановка проблемы Алгоритм Робертса Алгоритм Варнока Алгоритм Вейлера-Азертона Алгоритм плавающего горизонта Метод Z-буфера Алгоритм Художника Алгоритм Ньюэла-Санча Алгоритм трассировки лучей. 2

Удаление невидимых поверхностей и линий Постановка проблемы Задача удаления невидимых линий и поверхностей – Удаление невидимых поверхностей и линий Постановка проблемы Задача удаления невидимых линий и поверхностей – одна из наиболее сложных в компьютерной графике. Алгоритмы удаления заключаются в определении линий ребер, поверхностей или объемов, которые видимы или невидимы для наблюдателя, находящегося в заданной точке пространства.

Удаление невидимых поверхностей и линий Постановка проблемы Алгоритмы выбираются в зависимости от решаемой задачи: Удаление невидимых поверхностей и линий Постановка проблемы Алгоритмы выбираются в зависимости от решаемой задачи: • для моделирования в реальном времени – быстрые алгоритмы • для формирования сложных реалистичных изображений – более медленные, но «качественные» алгоритмы Единого универсального алгоритма отсечения пока не существует. Существует несколько различных вариантов классификации методов удаления невидимых линий и поверхностей.

Удаление невидимых поверхностей и линий Классификация методов Методы удаления невидимых частей сцены можно классифицировать: Удаление невидимых поверхностей и линий Классификация методов Методы удаления невидимых частей сцены можно классифицировать: • По выбору удаляемых частей: удаление невидимых линий, ребер, поверхностей, объемов. • По порядку обработки элементов сцены: § удаление в произвольном порядке § удаление в порядке определяемом процессом визуализации. По системе координат: § алгоритмы работающие в пространстве объектов, когда каждая из N граней объекта сравнивается с остальными N-1 гранями § алгоритмы работающие в пространстве изображения, когда для каждого пикселя изображения определяется какая из N граней объекта видна

Удаление невидимых поверхностей и линий Классификация методов Также алгоритмы можно классифицировать по способу выбора Удаление невидимых поверхностей и линий Классификация методов Также алгоритмы можно классифицировать по способу выбора системы координат или пространства в котором они работают: • Алгоритмы, работающие в объектном пространстве. § Работают с физической системой, в которой описаны объекты – высокая точность. § Для определения видимости данной поверхности сравнивается ее взаимное расположение с остальными поверхностями объекта в трехмерной сцене. • Алгоритмы, работающие в пространстве изображения (экрана). Они основаны на нахождении точки ближайшей поверхности, которую пересекает луч зрения, проходящий через заданную точку на растре. • Алгоритмы, формирующие список приоритетов, работают попеременно в обеих системах координат (объекта и изображения).

Удаление невидимых поверхностей и линий Алгоритм Робертса (1963 г. ) работает с только выпуклыми Удаление невидимых поверхностей и линий Алгоритм Робертса (1963 г. ) работает с только выпуклыми телами в пространстве объектов. Каждый объект сцены представляется многогранным телом, полученным в результате пересечения плоскостей. Тело описывается списком граней, состоящих из ребер, которые в свою очередь образованы вершинами. Вначале из описания каждого тела удаляются нелицевые плоскости, которые скрываются самим телом. Затем каждое из видимых ребер сравнивается с каждым из оставшихся тел для определения видимости или невидимости. Вычисляются новые ребра, полученные при «протыкании» телами друга. Предполагается, что тела состоят из плоских граней, которые состоят из ребер. Ребра составлены из отдельных вершин.

Удаление невидимых поверхностей и линий Алгоритм Робертса Выпуклый многогранник однозначно определяется набором плоскостей, образующих Удаление невидимых поверхностей и линий Алгоритм Робертса Выпуклый многогранник однозначно определяется набором плоскостей, образующих его грани, поэтому исходными данными для алгоритма являются многогранники, заданные списком своих граней. Грани задаются в виде плоскостей, заданных в канонической форме в объектной системе координат:

Удаление невидимых поверхностей и линий Алгоритм Робертса Каждая плоскость определяется четырехмерным вектором а каждая Удаление невидимых поверхностей и линий Алгоритм Робертса Каждая плоскость определяется четырехмерным вектором а каждая точка , заданная в однородных координатах, также представляет собой четырехмерный вектор: Принадлежность точки плоскости можно установить с помощью скалярного произведения, т. е. если то точка принадлежит плоскости, если же нет, то знак произведения показывает, по какую сторону от плоскости эта точка находится.

Удаление невидимых поверхностей и линий Алгоритм Робертса В алгоритме плоскости строятся таким образом, что Удаление невидимых поверхностей и линий Алгоритм Робертса В алгоритме плоскости строятся таким образом, что внутренние точки многогранника лежат в положительной полуплоскости. Это означает, что вектор (abc) является внешней нормалью к многограннику. Из векторов плоскостей строится прямоугольная матрица порядка которая называется обобщенной матрицей описания многогранника: Умножая столбцы матрицы на вектор , получаем n-мерный вектор, если все его компоненты неотрицательны, то точка принадлежит многограннику. Это условие будем запишем в виде

Удаление невидимых поверхностей и линий Алгоритм Робертса Из обобщенной матрицы можно получить информацию о Удаление невидимых поверхностей и линий Алгоритм Робертса Из обобщенной матрицы можно получить информацию о том, какие грани многогранника пересекаются в вершинах. Если вершина принадлежит граням то она удовлетворяет уравнениям или в матричном виде: где - матрица, составленная из вектор-столбцов координаты вершины определяются соотношением Это значит, что если для каких-либо трех плоскостей обратная матрица существует, то плоскости имеют общую вершину.

Удаление невидимых поверхностей и линий Алгоритм Робертса Каждое из видимых ребер каждого многогранника сравнивается Удаление невидимых поверхностей и линий Алгоритм Робертса Каждое из видимых ребер каждого многогранника сравнивается с каждым из оставшихся многогранников для определения того, какая его часть или части, если таковые есть, экранируются этими телами. Для этого в каждую точку ребра проводится отрезок луча, выходящего из точки расположения наблюдателя. Если отрезок не пересекает ни одного из многогранников, то точка видима. Для решения этой задачи используются параметрические уравнения прямой, содержащей ребро, и луча. Так как объем вычислений растет с увеличением числа многоугольников, то желательно по мере возможности сокращать их число, т. е. если мы аппроксимируем некоторую поверхность многогранником, то в качестве граней можно использовать не треугольники, а более сложные многоугольники. Вычислительная трудоемкость алгоритма Робертса растет теоретически, как квадрат числа объектов в сцене.

Удаление невидимых поверхностей и линий Алгоритм Варнока Варнок в 1968 г. предложил алгоритм, работающий Удаление невидимых поверхностей и линий Алгоритм Варнока Варнок в 1968 г. предложил алгоритм, работающий не в объектном пространстве, а в пространстве изображения. Он также нацелен на изображение многогранников, а главная идея его основана на гипотезе о способе обработки информации, содержащейся в сцене, глазом и мозгом человека: тратится очень мало времени и усилий на обработку тех областей, которые содержат мало информации. Большая часть времени и труда затрачивается на области с высоким информационным содержимым. В алгоритме Варнока и его вариантах делается попытка воспользоваться тем, что большие области изображения однородны. Такое свойство называют когерентностью, имея в виду, что смежные области (пиксели) вдоль обеих осей х и у имеют тенденцию к однородности.

Удаление невидимых поверхностей и линий Алгоритм Варнока В пространстве изображения рассматривается окно и решается Удаление невидимых поверхностей и линий Алгоритм Варнока В пространстве изображения рассматривается окно и решается вопрос о том, пусто ли оно, или его содержимое достаточно просто для визуализации. Если это не так, то окно разбивается на фрагменты до тех пор, пока содержимое фрагмента не станет достаточно простым для визуализации или его размер не достигнет требуемого предела разрешения. В последнем случае информация, содержащаяся в окне, усредняется, и результат изображается с одинаковой интенсивностью или цветом. Конкретная реализация алгоритма Варнока зависит от метода разбиения окна и от деталей критерия, используемого для того, чтобы решить, является ли содержимое окна достаточно простым. В оригинальной версии алгоритма каждое окно разбивалось на четыре одинаковых подокна.

Удаление невидимых поверхностей и линий Алгоритм Варнока Многоугольник, входящий в изображаемую сцену, по отношению Удаление невидимых поверхностей и линий Алгоритм Варнока Многоугольник, входящий в изображаемую сцену, по отношению к окну будем называть • внешним, если он целиком находится вне окна; • внутренним, если он целиком расположен внутри окна; • пересекающим, если он пересекает границу окна; • охватывающим, если окно целиком расположено внутри него.

Удаление невидимых поверхностей и линий Алгоритм Варнока Для каждого окна: 1. Если все многоугольники Удаление невидимых поверхностей и линий Алгоритм Варнока Для каждого окна: 1. Если все многоугольники сцены являются внешними по отношению к окну, то оно пусто; изображается фоновым цветом и дальнейшему разбиению не подлежит. 2. Если только один многоугольник сцены имеет общие точки с окном и является по отношению к нему внутренним, то окно заполняется фоновым цветом, а сам многоугольник заполняется своим цветом. 3. Если только один многоугольник сцены имеет общие точки с окном и является по отношению к нему пересекающим, то окно заполняется фоновым цветом, а часть многоугольника, принадлежащая окну, заполняется цветом многоугольника.

Удаление невидимых поверхностей и линий Алгоритм Варнока 4. Если только один многоугольник охватывает окно Удаление невидимых поверхностей и линий Алгоритм Варнока 4. Если только один многоугольник охватывает окно и нет других многоугольников, имеющих общие точки с окном, то окно заполняется цветом этого многоугольника. 5. Если существует хотя бы один многоугольник, охватывающий окно, то среди всех таких многоугольников выбирается тот, который расположен ближе всех к точке наблюдения, и окно заполняется цветом этого многоугольника. 6. В противном случае производится новое разбиение окна. Шаги 1– 4 рассматривают ситуацию пересечения окна только с одним многоугольником. Они используются для сокращения числа подразбиений. Шаг 5 решает задачу удаления невидимых поверхностей. Многоугольник, находящийся ближе всех к точке наблюдения, экранирует все остальные.

Удаление невидимых поверхностей и линий Алгоритм Варнока Для реализации алгоритма необходимы функции, определяющие взаимное Удаление невидимых поверхностей и линий Алгоритм Варнока Для реализации алгоритма необходимы функции, определяющие взаимное расположение окна и многоугольника, которые достаточно легко реализуются в случае прямоугольных окон и выпуклых многоугольников. Для определения, является ли многоугольник охватывающим, внешним или внутренним, можно воспользоваться, например, погружением многоугольника в прямоугольную оболочку. Для определения наличия пересечений можно использовать опорные прямые. Если же многоугольник невыпуклый, то задача усложняется. Существуют различные реализации алгоритма Варнока.

Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Алгоритм Вейлера и Азертона – модификация алгоритма Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Алгоритм Вейлера и Азертона – модификация алгоритма Варнока. Алгоритм был оптимизирован для уменьшения числа выполняемых разбиений: вместо прямоугольных разбиений используются разбиения вдоль границ многоугольников. Для этого использовался ими же разработанный алгоритм отсечения многоугольников. Алгоритм работает в объектном пространстве, и результатом его работы являются многоугольники.

Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона В самом общем виде он состоит из Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона В самом общем виде он состоит из четырех шагов: • Предварительная сортировка по глубине. • Отсечение по границе ближайшего к точке наблюдения многоугольника, называемое сортировкой многоугольников на плоскости. • Удаление многоугольников, экранируемых более близкими к точке наблюдения многоугольниками. • Если требуется, то рекурсивное разбиение и новая сортировка. В процессе предварительной сортировки создается список приблизительных приоритетов, причем близость многоугольника к точке наблюдения определяется расстоянием до ближайшей к ней вершины. Затем выполняется отсечение по самому первому из многоугольников.

Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Отсечению подвергаются все многоугольники из списка, причем Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Отсечению подвергаются все многоугольники из списка, причем эта операция выполняется над проекциями многоугольников на картинную плоскость. При этом создаются списки внешних и внутренних фигур. Все попавшие в список внешних не экранируются отсекающим многоугольником. Затем рассматривается список внутренних многоугольников и выполняется сортировка по расстоянию до отсекающего многоугольника. Если все вершины некоторого многоугольника оказываются дальше от наблюдателя, чем самая удаленная из вершин экранирующего, то они невидимы, и тогда они удаляются. После этого работа алгоритма продолжается с внешним списком.

Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Если какая-то из вершин внутреннего многоугольника оказывается Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Если какая-то из вершин внутреннего многоугольника оказывается ближе к наблюдателю, чем ближайшая из вершин экранирующего многоугольника, то такой многоугольник является частично видимым. В этом случае предварительный список приоритетов некорректен, и тогда в качестве нового отсекающего многоугольника выбирается именно этот многоугольник. При этом используется именно исходный многоугольник, а не тот, что получился в результате первого отсечения. Такой подход позволяет минимизировать число разбиений.

Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Этот алгоритм в дальнейшем был обобщен Кэтмулом Удаление невидимых поверхностей и линий Алгоритм Вейлера-Азертона Этот алгоритм в дальнейшем был обобщен Кэтмулом (1974) для изображения гладких бикубических поверхностей. Его подход заключался в том, что разбиению подвергалась поверхность. Коротко этот алгоритм можно описать так: • Рекурсивно разбивается поверхность до тех пор, пока проекция элемента на плоскость изображения не будет покрывать не больше одного пикселя. • Определить атрибуты поверхности в этом пикселе и изобразить его. Эффективность такого метода, как и алгоритм Варнока, зависит от эффективности разбиений. В дальнейшем этот алгоритм был распространен на сплайновые поверхности.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта относится к классу алгоритмов, работающих в Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта относится к классу алгоритмов, работающих в пространстве изображения. Алгоритм чаше всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде Главная идея метода заключается в сведении трехмерной задачи к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z. Секущие плоскости с постоянной координатой

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Функция сводится к последовательности кривых, лежащих Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Функция сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например к последовательности или где z постоянно на каждой из заданных параллельных плоскостей. Теперь поверхность представляется набором последовательности кривых, лежащих в каждой из этих плоскостей.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Предполагается, что полученные кривые являются однозначными Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Предполагается, что полученные кривые являются однозначными функциями независимых переменных. Спроецируем полученные кривые на плоскость z = 0 Проекция кривых на плоскость z = 0

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм сначала упорядочивает плоскости z = Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т. е. для каждого значения координаты x в пространстве изображения определяется соответствующее значение y. Алгоритм удаления невидимой линии: Если на текущей плоскости при некотором заданном значении x соответствующее значение у на кривой больше значения y для всех предыдущих кривых при этом значении x, то текущая кривая видима в этой точке; в противном случае она невидима.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм достаточно прост в реализации. Для Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм достаточно прост в реализации. Для хранения максимальных значений y при каждом значении x используется массив, длина которого равна числу различимых точек (разрешению) по оси x в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения "горизонта". Поэтому по мере рисования каждой очередной кривой этот горизонт "всплывает". Фактически этот алгоритм работает каждый раз с одной линией.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм работает очень хорошо до тех Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых: Подобные кривые видимы и представляют собой нижнюю сторону исходной поверхности, однако алгоритм будет считать их невидимыми.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Модифицируем алгоритм, включив в него нижний Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Модифицируем алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Реализуем его при помощи второго массива, длина которого равна числу различимых точек по оси x в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения x. Теперь алгоритм имеет вид: если на текущей плоскости при некотором заданном значении x соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом значении x, то текущая кривая видима; в противном случае кривая невидима.

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Предполагается, что значение функции, т. е. Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Предполагается, что значение функции, т. е. y, известно для каждого значения x в пространстве изображения. Однако если для каждого значения x нельзя указать (вычислить) соответствующее ему значение y, то невозможно поддерживать массивы верхнего и нижнего плавающих горизонтов. В таком случае используется линейная интерполяция значений y между известными значениями для того, чтобы заполнить массивы верхнего и нижнего плавающих горизонтов.

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

Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Результат работы алгоритма плавающего горизонта для Удаление невидимых поверхностей и линий Алгоритм плавающего горизонта Результат работы алгоритма плавающего горизонта для функции в интервале

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Алгоритм, использующий z-буфер, удаления невидимых поверхностей Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Алгоритм, использующий z-буфер, удаления невидимых поверхностей является одним из простейших алгоритмов. Был предложен Эдом Кэтмулом. Алгоритм работает в пространстве изображения. Идея z-буфера является простым обобщением идеи о буфере кадра. Буфер кадра используется для запоминания атрибутов (интенсивности) каждого пикселя в пространстве изображения, z-буфер - это отдельный буфер глубины, используемый для запоминания координаты z или глубины каждого видимого пикселя в пространстве изображения.

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер В процессе работы глубина или значение Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер В процессе работы глубина или значение z каждого нового пикселя, который нужно занести в буфер кадра, сравнивается с глубиной того пикселя, который уже занесен в z-буфер. Если это сравнение показывает, что новый пиксель расположен впереди пикселя, находящегося в буфере кадра, то новый пиксель заносится в этот буфер и, кроме того, производится корректировка z-буфера новым значением z. Если же сравнение дает противоположный результат, то никаких действий не производится. По сути, алгоритм является поиском по x и y наибольшего значения функции z(x, y).

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Формальное описание алгоритма z-буфера : 1. Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Формальное описание алгоритма z-буфера : 1. Заполнить буфер кадра фоновым значением интенсивности или цвета. 2. Заполнить z-буфер минимальным значением z. 3. Преобразовать каждый многоугольник в растровую форму в произвольном порядке. 4. Для каждого Пикселя (x, y) в многоугольнике вычислить его глубину z(x, y). 5. Сравнить глубину z(x, y) со значением Zбуфер(x, y), хранящимся в z-буфере в этой же позиции. Если z(x, y) > Zбуфер(x, y), то записать атрибут этого многоугольника (интенсивность, цвет и т. п. ) в буфер кадра и заменить Zбуфер(x, y) на z(x, y). В противном случае никаких действий не производить.

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Основное преимущество алгоритма - его простота. Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Основное преимущество алгоритма - его простота. Алгоритм, использующий z-буфер решает задачу об удалении невидимых поверхностей и делает тривиальной визуализацию пересечений сложных поверхностей. Время работы алгоритма не зависит от сложности сцены. Поскольку габариты пространства изображения фиксированы, оценка вычислительной трудоемкости алгоритма не более чем линейна. Поскольку элементы сцены или картинки можно заносить в буфер кадра или в z-буфер в произвольном порядке, их не нужно предварительно сортировать по приоритету глубины. Это экономит вычислительное время, затрачиваемое на сортировку по глубине.

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Основной недостаток алгоритма – большой объем Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Основной недостаток алгоритма – большой объем требуемой памяти. Если сцена подвергается видовому преобразованию и отсекается до фиксированного диапазона значений координат z, то можно использовать z-буфер с фиксированной точностью. Информацию о глубине нужно обрабатывать с большей точностью, чем координатную информацию на плоскости z(x, y), обычно бывает достаточно 20 -ти бит. Например буфер кадра размером 512´ 24 бит в комбинации с z-буфером размером 512´ 20 бит требует почти 1. 5 мегабайт памяти.

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Другой недостаток алгоритма z-буфера состоит в Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Другой недостаток алгоритма z-буфера состоит в трудоемкости и высокой стоимости устранения лестничного эффекта, а также реализации эффектов прозрачности и просвечивания. Поскольку алгоритм заносит пиксели в буфер кадра в произвольном порядке, то нелегко получить информацию, необходимую для методов устранения лестничного эффекта, основывающихся на предварительной фильтрации. При реализации эффектов прозрачности и просвечивания пиксели могут заноситься в буфер кадра в некорректном порядке, что ведет к локальным ошибкам.

Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Уменьшение требуемой памяти может достигаться разбиением Удаление невидимых поверхностей и линий Алгоритм, использующий z–буфер Уменьшение требуемой памяти может достигаться разбиением пространства изображения на 4, 16 или больше квадратов или полос. В предельном варианте используется буфер размером в одну строку развертки. Для последнего случая был разработан алгоритм построчного сканирования. Поскольку каждый элемент сцены обрабатывается много раз, то сегментирование Z-буфера, вообще говоря, приводит к увеличению времени, необходимого для обработки сцены.

Удаление невидимых поверхностей и линий Алгоритм художника Метод художника относится к алгоритмам использующие список Удаление невидимых поверхностей и линий Алгоритм художника Метод художника относится к алгоритмам использующие список приоритетов. Такие алгоритмы пытаются получить преимущество посредством предварительной сортировки по глубине или приоритету. Цель такой сортировки в том, чтобы получить окончательный список элементов сцены, упорядоченных по приоритету глубины, основанному на расстоянии от точки наблюдения. Если такой список окончателен, то никакие два элемента не будут взаимно перекрывать друга. Тогда все элементы можно записать в буфер кадра поочередно, начиная с элемента, наиболее удаленного от точки наблюдения. Более близкие к наблюдателю элементы будут затирать информацию о более далеких элементах в буфере кадра. Эффекты прозрачности можно включить в состав алгоритма путем не полной, а частичной корректировки содержимого буфера кадра с учетом атрибутов прозрачных элементов.

Удаление невидимых поверхностей и линий Алгоритм художника Данный метод называют алгоритмом художника, поскольку он Удаление невидимых поверхностей и линий Алгоритм художника Данный метод называют алгоритмом художника, поскольку он аналогичен тому способу, которым художник создает картину. Вначале рисуется фон, затем предметы, лежащие на среднем расстоянии, наконец, передний план: т. е. элементы сцены изображаются в последовательности от наиболее удаленных от наблюдателя к более близким. Если такой список окончателен, то никакие два элемента не будут взаимно перекрывать друга. Тогда можно записать все элементы в буфер кадра поочередно, начиная с элемента, наиболее удаленного от точки наблюдения. Более близкие к наблюдателю элементы будут затирать информацию о более далеких элементах в буфере кадра. Тем самым задача удаления невидимых поверхностей (задача видимости) решается путем построения картины в порядке обратного приоритета.

Удаление невидимых поверхностей и линий Алгоритм художника Рассмотрим применение этого метода на примере изображения Удаление невидимых поверхностей и линий Алгоритм художника Рассмотрим применение этого метода на примере изображения поверхности, заданной в виде однозначной функции двух переменных. Пусть поверхность задана уравнением: В качестве картинной плоскости используется плоскость XOY. Зададим сетку узлов на осях координат Тогда представляют собой набор "высот" для данной поверхности по отношению к плоскости XOY.

Удаление невидимых поверхностей и линий Алгоритм художника Аппроксимируем поверхность посредством треугольников с вершинами в Удаление невидимых поверхностей и линий Алгоритм художника Аппроксимируем поверхность посредством треугольников с вершинами в точках так, что каждому прямоугольнику сетки узлов будут соответствовать два треугольника: Если способ закрашивания треугольников определен, то процесс изображения поверхности будет представлен в виде последовательной отрисовки треугольников и

Удаление невидимых поверхностей и линий Алгоритм художника Результат работы алгоритма: поверхность прямоугольников сетки и Удаление невидимых поверхностей и линий Алгоритм художника Результат работы алгоритма: поверхность прямоугольников сетки и поверхность аппроксимируемая треугольниками.

Удаление невидимых поверхностей и линий Алгоритм художника При изображении правильного многогранника можно легко упорядочить Удаление невидимых поверхностей и линий Алгоритм художника При изображении правильного многогранника можно легко упорядочить его грани по глубине; Для произвольного многогранника такая сортировка возможна не всегда. Для простой сцены окончательный список приоритетов может быть получен непосредственно. Многоугольники P, Q, R можно упорядочить по их максимальному или минимальному значению координаты z.

Удаление невидимых поверхностей и линий Алгоритм художника Рассмотрим более сложную сцену: Окончательный список приоритетов Удаление невидимых поверхностей и линий Алгоритм художника Рассмотрим более сложную сцену: Окончательный список приоритетов по глубине невозможно получить простой сортировкой по z. Если P и Q упорядочены по минимальному значению координаты z (zmin), окажется, что P в списке приоритетов по глубине будет стоять перед Q. При их записи в буфер кадра в таком порядке Q частично закрывает P. Однако фактически P частично закрывает Q.

Удаление невидимых поверхностей и линий Алгоритм художника Также проблемы возникают при циклическом перекрывании многоугольниками Удаление невидимых поверхностей и линий Алгоритм художника Также проблемы возникают при циклическом перекрывании многоугольниками друга. Треугольник P находится впереди Q, Прямоугольник который лежит впереди R, который, в многоугольником Q, и наоборот. свою очередь, находится впереди P. P экранируется

Удаление невидимых поверхностей и линий Алгоритм художника Аналогичные проблемы возникают и при «протыкании» многоугольников Удаление невидимых поверхностей и линий Алгоритм художника Аналогичные проблемы возникают и при «протыкании» многоугольников В обоих примерах окончательный список приоритетов невозможно установить сразу.

Удаление невидимых поверхностей и линий Алгоритм художника Разрешение этой проблемы заключается в циклическом разрезании Удаление невидимых поверхностей и линий Алгоритм художника Разрешение этой проблемы заключается в циклическом разрезании многоугольников по линиям, образованным пересечениями их плоскостей, до тех пор, пока не будет получен окончательный список приоритетов.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча В связи с проблемами существовавшими у алгоритма Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча В связи с проблемами существовавшими у алгоритма художника Ньюэл М. , Ньюэл Р. и Санча предложили специальный метод сортировки для разрешения конфликтов, возникающих при создании списка приоритетов по глубине. Алгоритм динамически вычисляет новый список приоритетов перед обработкой каждого кадра сцены. При этом не накладывается никаких ограничений на сложность сцены и на тип многоугольников, используемых для описания элементов сцены. Первоначальный алгоритм Ньюэла - Санча был предназначен для обработки трехмерных тел. Его модификация не ограничена рамками многогранников и может обрабатывать тела смешанных типов в рамках одной сцены.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Рассмотрим алгоритм Ньюэла-Санча для случая многоугольников: I. Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Рассмотрим алгоритм Ньюэла-Санча для случая многоугольников: I. Сформировать предварительный список приоритетов по глубине, используя в качестве ключа сортировки значение zmin для каждого многоугольника. Первым в списке будет многоугольник с минимальным значением zmin. Этот многоугольник лежит дальше всех от точки наблюдения, расположенной в бесконечности на положительной полуоси z. Обозначим его через P, а следующий в списке многоугольник - через Q. Для каждого многоугольника P из списка надо проверить его отношение с Q.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если ближайшая вершина P (Pzmax) будет дальше Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если ближайшая вершина P (Pzmax) будет дальше от точки наблюдения, чем самая удаленная вершина Q (Qzmin), т. е. Qzmin ≥ Pzmax никакая часть P не может экранировать Q. P заносится в буфер кадра.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если Qzmin < Pzmax, то P потенциальное Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если Qzmin < Pzmax, то P потенциальное экранирует не только Q, но также и любой другой многоугольник типа Q из списка, для которого Qzmin < Pzmax. Тем самым образуется множество {Q}. Однако P может фактически и не экранировать ни один из этих многоугольников. Если последнее верно, то P можно заносить в буфер кадра.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Для ответа на этот вопрос используется серия Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Для ответа на этот вопрос используется серия тестов, следующих по возрастанию их вычислительной сложности, сформулированные в виде вопросов. Если ответ на любой вопрос будет положительным, то P не может экранировать {Q}. Поэтому P сразу же заносится в буфер кадра. 1. Верно ли, что прямоугольные объемлющие оболочки P и Q не перекрываются по x? 2. Верно ли, что прямоугольные оболочки P и Q не перекрываются по y?

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча 3. Верно ли, что P целиком лежит Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча 3. Верно ли, что P целиком лежит по ту сторону плоскости, несущей Q, которая расположена дальше от точки наблюдения (а)? 4. Верно ли, что Q целиком лежит по ту сторону плоскости, несущей P, которая ближе к точке наблюдения (b)? 5. Верно ли, что проекции P и Q не перекрываются? Каждый из этих тестов применяется к каждому элементу {Q}. Если ни один из них не дает положительного ответа и не заносит P в буфер кадра, то P может закрывать Q.

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча II. Поменять P и Q местами, пометив Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча II. Поменять P и Q местами, пометив позицию Q в списке. Повторить тесты с новым списком. Это дает положительный результат для сцены:

Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если сделана попытка вновь переставить Q, значит, Удаление невидимых поверхностей и линий Алгоритм Ньюэла-Санча Если сделана попытка вновь переставить Q, значит, обнаружена ситуация циклического экранирования. В этом случае P разрезается плоскостью, несущей Q, исходный многоугольник P удаляется из списка, а его части заносятся в список. Затем тесты повторяются для нового списка. Этот шаг предотвращает зацикливание алгоритма.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Главная идея этого алгоритма была предложена Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Главная идея этого алгоритма была предложена в 1968 г. А. Аппелем, а первая реализация была выполнена в 1971 г. Наблюдатель видит любой объект посредством испускаемого неким источником света, который падает на этот объект, отражается или преломляется согласно законам оптики и затем каким-то путем доходит до глаза наблюдателя. Из огромного множества лучей света, выпущенных источником, лишь небольшая часть дойдет до наблюдателя. Следовательно, отслеживать пути лучей в таком порядке неэффективно с точки зрения вычислений.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Аппель предложил отслеживать (трассировать) лучи в Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Аппель предложил отслеживать (трассировать) лучи в обратном направлении, т. е. от наблюдателя к объекту. Алгоритмы работает в пространстве изображения. В первой реализации этого метода трассировка прекращалась, как только луч пересекал поверхность видимого непрозрачного объекта; т. е. луч использовался только для обработки скрытых или видимых поверхностей. Впоследствии были реализованы алгоритмы трассировки лучей с использованием более полных моделей освещения с учетом эффектов отражения одного объекта от поверхности другого, преломления, прозрачности и затенения.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Удаление невидимых поверхностей и линий Алгоритм трассировки лучей

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей В этом алгоритме предполагается, что сцена Удаление невидимых поверхностей и линий Алгоритм трассировки лучей В этом алгоритме предполагается, что сцена уже преобразована в пространство изображения. Если используется ортографическая проекция, то точка зрения или наблюдатель находится в бесконечности на положительной полуоси OZ. В этом случае все световые лучи, идущие от наблюдателя, параллельны оси. Каждый луч проходит через пиксель растра до сцены. Траектория каждого луча отслеживается, чтобы определить, какие именно объекты сцены, если таковые существуют, пересекаются с данным лучом. Необходимо проверить пересечение каждого объекта сцены с каждым лучом. Если луч пересекает объект, то определяются все возможные точки пересечения луча и объекта.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Трассировка параллельными лучами Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Трассировка параллельными лучами

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Можно получить большое количество пересечений, если Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Можно получить большое количество пересечений, если рассматривать много объектов. Эти пересечения упорядочиваются по глубине. Пересечение с максимальным значением z представляет видимую поверхность для данного пикселя. Если точка зрения находится не в бесконечности (перспективная проекция), алгоритм трассировки лучей лишь незначительно усложняется. Здесь предполагается, что наблюдатель по-прежнему находится на положительной полуоси OZ. Наиболее важным и трудоемким элементом этого алгоритма является процедура определения пересечений, поскольку эта задача отнимает наибольшую часть времени всей работы алгоритма.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Трассировка с центральной точкой Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Трассировка с центральной точкой

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Объекты сцены могут состоять из набора Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Объекты сцены могут состоять из набора плоских многоугольников, многогранников или тел, ограниченных замкнутыми параметрическими поверхностями. Для ускорения поиска важно иметь эффективные критерии, позволяющие исключить из процесса заведомо лишние объекты. Одним из способов сокращения числа пересекаемых объектов является погружение объектов в выпуклую оболочку. Поиск пересечения с такой оболочкой очень прост, и если луч не пересекает оболочки, то не нужно больше искать пересечений этого объекта с лучом.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Особенно просто выполняется тест на пересечение Удаление невидимых поверхностей и линий Алгоритм трассировки лучей Особенно просто выполняется тест на пересечение со сферической оболочкой. Несколько большего объема вычислений требует задача о пересечении с прямоугольным параллелепипедом, поскольку необходимо проверить пересечение луча по меньшей мере с тремя бесконечными плоскостями, ограничивающими прямоугольную оболочку. Т. к. точки пересечения могут оказаться вне граней этого параллелепипеда, для каждой из них следует, кроме того, произвести проверку на попадание внутрь. Следовательно, для трех измерений тест с прямоугольной оболочкой оказывается более медленным, чем тест со сферической оболочкой.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей После выполнения этих первичных тестов начинается Удаление невидимых поверхностей и линий Алгоритм трассировки лучей После выполнения этих первичных тестов начинается процесс поиска пересечений с объектами, попавшими в список потенциально видимых. При этом задача формирования изображения не исчерпывается нахождением самой точки пересечения: если мы учитываем эффекты отражения и преломления, необходимо отслеживать дальнейший путь луча, для чего, как правило, требуется восстановить нормаль к поверхности, а также определить направление отраженного или преломленного луча. В связи со всеми этими задачами важно выбрать достаточно удобные аппроксимации поверхностей, составляющих сцену. Определение атрибутов пикселя, выводимого в конечном итоге на экран, зависит от выбора модели освещения.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей для простых непрозрачных поверхностей можно представить Удаление невидимых поверхностей и линий Алгоритм трассировки лучей для простых непрозрачных поверхностей можно представить следующим образом. Создать список объектов, содержащий: • полное описание объекта: тип, поверхность, характеристики, тип оболочки и т. п. ; • описание оболочки: центр и радиус для сферы или шесть значений для параллелепипеда. Для каждого трассируемого луча: • Выполнить для каждого объекта трехмерный тест на пересечение с оболочкой. Если луч пересекает эту оболочку, то занести объект в список активных объектов. • Если список активных объектов пуст, то изобразить данный пиксель с фоновым значением цвета и продолжать работу.

Удаление невидимых поверхностей и линий Алгоритм трассировки лучей В противном случае для каждого объекта Удаление невидимых поверхностей и линий Алгоритм трассировки лучей В противном случае для каждого объекта из списка активных объектов: • Найти пересечения со всеми активными объектами. • Если список пересечений пуст, то изобразить данный пиксель с фоновым значением цвета. • В противном случае в списке пресечений найти ближайшее к наблюдателю (с максимальным значением z) и определить атрибуты точки. • Изобразить данный пиксель, используя найденные атрибуты пересеченного объекта и соответствующую модель освещенности. В настоящее время алгоритм трассировки, несмотря на вычислительную сложность, стал очень популярен. Кроме того, существует множество модификаций этого алгоритма.