Способ учета удаленности элемента изображения в компьютерной трехмерной графике

Обновлено: 03.07.2024

1971 год - Гольдштейн и Нагель впервые реализовали метод трассировки лучей с использованием логических операций для формирования трехмерных изображений.

Трассировка лучей — технология построения изображения трёхмерных моделей в компьютерных программах, при которых отслеживается обратная траектория распространения луча (от экрана к источнику).

1970 год - интенсивное развитие индустрии компьютерных игр, компьютерная графика начинает широко использоваться на телевидении и в киноиндустрии.

1974 год - Э.Кэтмул создает первые алгоритмы текстурирования криволинейных поверхностей.

Рельефное текстурирование — метод в компьютерной графике для придания более реалистичного и насыщенного вида поверхности объектов («эффект бугристой поверхности»).

Сфера без рельефной текстуры.

Сфера с наложенной рельефной текстурой

1975 год - появляется метод закрашивания Фонга.

1977 год - Дж.Блин предлагает алгоритмы реалистического изображения шероховатых поверхностей (микрорельефов).

1977 год - Ф.Кроу разрабатывает методы устранения ступенчатого эффекта при изображении контуров (антиэлайзинг).

1977 год - Дж.Брезенхем создает эффективные алгоритмы построения растровых образов отрезков, окружностей и эллипсов.

1978 год – развитие метода Z-буфера.

1978 год - Сайрус и Бэк развивают алгоритмы клиппирования (отсечения) линий.

1979 год - Кэй и Гринберг впервые реализуют изображение полупрозрачной поверхности.

1980 год - разрабатываются общие принципы трассировки лучей, включающие отражение, преломление, затенение и методы антиэлайзинга.

1980-е гг. - появляется целый ряд компаний, занимающихся прикладными разработками в области компьютерной графики. В 1982 г. Дж.Кларк создает Silicon Graphics, тогда же возникает Ray Tracing Corporation, Adobe System, в 1986 г. компания Pixar отделяется от Lukasfilm.

1990-е гг. - в связи с возникновением сети Internet у компьютерной графики появляется еще одна сфера приложения.

5. Этапы развития компьютерной графики.

І этап. 1960-1970-е годы.

Компьютерная графика формировалась как научная дисциплина.

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

І І этап. 1980-е годы.

Компьютерная графика развивается как прикладная дисциплина.

Разрабатываются методы ее применения в самых различных областях человеческой деятельности.

І І І этап. 1990-е годы.

Методы компьютерной графики становятся основным средством обеспечения диалога "человек-компьютер".

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.


Z-буферизация — в компьютерной трёхмерной графике способ учёта удалённости элемента изображения. Представляет собой один из вариантов решения «проблемы видимости». Очень эффективен и практически не имеет недостатков, если реализуется аппаратно. Программно же существуют другие методы, способные конкурировать с ним: Z-сортировка («алгоритм художника») и двоичное разбиение пространства (BSP), но они также имеют свои достоинства и недостатки. Основной недостаток Z-буферизации состоит в потреблении большого объёма памяти: в работе используется так называемый буфер глубины или Z-буфер.

Z-буфер представляет собой двумерный массив, каждый элемент которого соответствует пикселю на экране. Когда видеокарта рисует пиксель, его удалённость просчитывается и записывается в ячейку Z-буфера. Если пиксели двух рисуемых объектов перекрываются, то их значения глубины сравниваются, и рисуется тот, который ближе, а его значение удалённости сохраняется в буфер. Получаемое при этом графическое изображение носит название z-depth карта, представляющая собой полутоновое графическое изображение, каждый пиксель которого может принимать до 256 значений серого. По ним определяется удалённость от зрителя того или иного объекта трехмерной сцены. Карта широко применяется в постобработке для придания объёмности и реалистичности и создаёт такие эффекты, как глубина резкости, атмосферная дымка и т. д. Также карта используется в 3д-пакетах для текстурирования, делая поверхность рельефной.

Z-depth1.jpg

Z-depth2.jpg

Z-depth3.jpg

Z-depth4.jpg

Ниже представлен результат использования двух карт вместе. Здесь вторая карта снята из сцены, в которой первая выступила в качестве текстуры, выдавливающей поверхность.

Z-depth5.jpg

Z-depth6.jpg

Z-depth7.jpg

Обычно изобретателем z-буфера считают Эдвина Катмулла, хотя эту идею описал ещё Вольфганг Штрассер в своей диссертации (1974).

В Z-буфере в его классическом виде разрядная сетка буфера недостаточно точна на близких расстояниях. Для решения этой проблемы применяется w-буфер, в котором применяется не удалённость, а обратная ей величина ( w = 1 / z ). Что лучше применять — z-буфер или w-буфер — зависит от программы.

На современных видеоадаптерах работа с z-буфером отнимает немалую часть пропускной способности ОЗУ видеоадаптера. Для борьбы с этим применяют сжатие без потерь: сжатие/восстановление отнимает меньше ресурсов, чем обращение к памяти.

В начале кадра происходит заполнение буфера некоторым числом (например, числом 1,0). Это также отнимает некоторую долю машинного времени, поэтому часто поступают так: первый кадр буферизация настраивается так, чтобы глубина ближних объектов была 0,0, а дальних — 0,5. Второй кадр — от 1,0 до 0,5. Это снижает точность на 1 бит, но позволяет избавиться от очистки буфера.

Хотя Z-буфер предназначен именно для того, чтобы обойтись без сортировки видимых граней, скорость работы Z-буфера серьёзно зависит от сортировки объектов. Потому движок должен хотя бы приблизительно отсортировать объекты от дальних к ближним.

Если два объекта имеют близкую Z-координату, иногда, в зависимости от точки обзора, показывается то один, то другой, то оба полосатым узором. Это называется Z-конфликт (англ. Z fighting ). Чаще всего конфликты присущи спецэффектам (декалям), накладывающимся на основную текстуру, например, дырам от пуль.

Решаются Z-конфликты сдвигом одного объекта относительно другого на величину, превышающую погрешность Z-буфера.

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Что если я скажу, что мир не настоящий, а хорошо проработанная компьютерная графика, помещенная в виртуальную реальность? Тогда создатель этого мира по праву может считать себя богом. Звучит как сюжет фантастического фильма? Дайте CG десяток лет, и фантазии превратятся в пугающую реальность.

Однако, уже сейчас освоив компьютерную графику вы сможете использовать ее для веб-дизайна, 3D-игр, 3D-печати, анимации, виртуальной реальности, архитектурной визуализации, эффектов для кино и многого другого. В этой статье мы разберем основы компьютерной графики и ответим на два важных вопроса: “С чего начать?” и “Какой софт использовать?”. Сосредоточьтесь, мы начинаем.

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Двумерная графика

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

Это все очень интересно, теперь у вас есть базовое понимание о двумерной графике, которое пригодится веб-дизайнерам, 2D аниматорам, художникам. А теперь перейдем к графике будущего.

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Трехмерная графика

Независимо от того, в какой области вы хотите развиваться, базовое понимание 3D необходимо во всех, и то, что вы узнаете в одной области, часто можно применить в другой. Скажем, вы смоделировали персонажа. Можно нацепить на него скелет и анимировать, чтобы создать короткометражный мультик или же экспортировать его в игровой движок как персонажа. Его можно напечатать на 3D принтере, внедрить в виртуальную реальность, или просто сделать красивой отрендеренной картинкой. Так что начало работы с любой из этих областей требует базового понимания 3D. И что же это за основы? Ну, их можно сформулировать так:

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Вот и все основные пункты. Думаю, для начала этого будет достаточно. К нашему списку еще можно добавить еще два пункта, которые ближе к работе с видео и кино.

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

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

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

…мы ищем обширные художественные и технические навыки, а не способность запускать программы.
— Pixar, Careers Page

Чтобы стать хорошим специалистом в CG потребуется освоить много сложной, но не менее интересной информации. Вот небольшая подборка интернет ресурсов, которые могут вам помочь:

Компьютерная графика уже очень очень востребованная сфера, а в будущем станет еще более востребованной. Читайте книги по моделированию, смотрите видео (благо таких предостаточно). И когда-нибудь в будущем сможете создать свой мир с блэкджеком и анимированными мечами.

Основы компьютерной графики Компьютерная графика, Графика, Дизайн, 3D моделирование, Анимация, Гифка, Длиннопост

Компьютерная графика уже очень очень востребованная сфера, а в будущем станет еще более востребованной. Читайте книги по моделированию, смотрите видео (благо таких предостаточно). И когда-нибудь в будущем сможете создать свой мир с блэкджеком и анимированными мечами.

При работе с трехмерной графикой используется несколько видов систем координат. Для отображения двумерных объектов нам была нужна соответствующая система координат с двумя осями – горизонтальной осью X и вертикальной осью Y. Напомним, что экранная система координат для двумерной графики имеет начало (точку 0,0) в левом верхнем углу монитора, положительная часть оси X располагается справа от начала координат, положительная часть оси Y – снизу.

Для работы с трехмерными объектами нам понадобится еще одна ось – она называется ось Z. Существует несколько вариантов трехмерных систем координат, в частности, распространены так называемые правосторонняя и левосторонняя системы. Мы будем пользоваться правосторонней системой – она применяется в XNA Framework. Её схематичное изображение приведено на рис. 22.1.

Правосторонняя система координат

Особенность этой системы координат заключается в том, что начало координат можно сопоставить с левым нижним углом монитора, положительная часть оси X находится справа от начала координат, положительная часть оси Y – сверху, а положительная часть оси Z – спереди. А это значит, что видимая часть оси Z – это её отрицательная часть. Эта часть оси находится как бы "в глубине монитора", в то время, как положительная часть находится "спереди монитора". На рис. 22.1 пунктиром изображена отрицательная часть оси Z.

В двумерной системе координат существует понятие точки – ее координаты задаются двумя значениями – X и Y. Точки существуют и в трехмерной системе координат – они задаются уже тремя значениями – X, Y, Z.

Точки используют для того, чтобы задавать координаты вершин многоугольников (полигонов), в частности – треугольников. Так, треугольник, изображенный на рис. 22.1, задан тремя точками – A, B, C.

Как правило, более сложные трехмерные объекты строятся именно из треугольников.

В трехмерной графике существует такое понятие, как грань ( face ). Это – плоский объект , который определяют несколько вершин. В нашем случае обычный треугольник – это именно грань. Из нескольких плоских граней можно собрать объемный объект .

Чем больше треугольников использовано при построении модели – тем более детализированной она получается. Точки, соответствующие вершинам треугольника, который можно изобразить в трехмерном пространстве, называются вершинами. Работая с трехмерной графикой в XNA вам часто придется встречать английский вариант слова вершина – vertex . Возможно, вам встретится множественное число слова вершина : "вершины" выглядит по -английски как " vertices ". Иногда для обозначения вершин используют кальку с английского – вертекс.

Треугольник не случайно выбран в качестве базовой геометрической фигуры – во-первых – этот многоугольник всегда является выпуклым, во-вторых – невозможно расположить три точки таким образом, чтобы они не принадлежали одной плоскости. То есть, треугольник – это фигура, которая всегда является выпуклой и плоской, что позволяет с успехом использовать его в целях трехмерной графики.

Несколько граней, из которых состоит трехмерный объект , называются сетью (mesh). Сеть представляет собой набор треугольников.

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

Например, вектор с координатами (1,0,0) означает: "направление – вправо, скорость – 1". Если отложить этот вектор от начала координат, то хорошо видно, что он направлен именно вправо (рис. 22.2).

Направление вектора определяется положением второй точки относительно первой (в нашем случае – положение точки конца вектора, которой задается вектор относительно начала координат), а скорость – длиной вектора – то есть – разницей между начальной и конечной точкой. В нашем случае длина вектора совпадает с координатами его конца.

Вектор (1,0,0)

Существует особый вид векторов – нормали (normals). Нормали могут быть построены для граней и для вершин объекта. Нормали для граней перпендикулярны этим граням. Они используются при расчете цвета объекта.

22.2. Преобразования в трехмерном пространстве

Зная координаты вершин полигонов, из которых состоит объект , мы можем расположить его в пространстве. Теперь нужно разобраться с изменением положения объектов в пространстве. Существует несколько основных операций, которые могут использоваться для перемещения объектов в трехмерном пространстве. Это – перемещение ( translation ), вращение ( rotation ) и масштабирование ( scale ).

Результаты работы графической подсистемы трехмерной игры мы видим на плоском экране монитора – смоделированная компьютером трехмерная сцена проецируется на двумерную поверхность. При проецировании нужно выбрать точку, которая выполняет роль камеры, позволяющей видеть трехмерное пространство . В свою очередь , объекты в трехмерном пространстве могут перемещаться в соответствии с определенными правилами. Для управления всем этим используются несколько матриц. Это – мировая матрица (World Matrix ), матрица вида (View Matrix ) и матрица проекции (Projection Matrix ).

Матрицу можно представить в виде таблицы, состоящей из m строк и n столбцов. В компьютерной графике применяются матрицы 4х4. Первых три столбца этой матрицы отвечают за модификацию координат X, Y, Z вершин объекта, участвующего в трансформации.

Мировая матрица позволяет задавать преобразования – перемещения, вращения и трансформации объектов.

Матрица вида позволяет управлять камерой.

Матрица проекции служит для настройки проекции трехмерной сцены на экран.

Предположим, имеется треугольник, заданный следующими вершинами (табл. 22.1).

При перемещении этого треугольника на 10 позиций по оси X мы должны прибавить по 10 к каждой из координат X его вершин. В результате получится матрица такого вида (табл. 22.2).

Того же эффекта можно достичь, умножив координаты каждой из вершин на мировую матрицу. Для этого координаты вершины представляют в виде матрицы, состоящей из одной строки и четырех столбцов. В первых трех столбцах содержатся координаты X, Y, Z, в четвертом – 1. Мировая матрица представлена в виде таблицы 4х4. Вот как выглядит операция умножения матриц (формула 6.1.):

Умножение матрицы вершины и мировой матрицы

[\begin20 & 10&5 &1\\ \end] \times \left[ \begin 1 & 0&0 &0\\ 0 & 1&0 &0\\ 0 & 0&1 &0\\ 10 & 0&0 &1\\ \end\right] = [\begin 30 & 10&5 &1\\ \end]
( 22.1)

При преобразовании каждая из вершин умножается на мировую матрицу.

Каждое из преобразований в пространстве требует особой настройки мировой матрицы. В формуле 22.2. приведен шаблон мировой матрицы, которая позволяет перемещать объекты в пространстве.

Формула 22.2. Мировая матрица для перемещения объекта

 \left[ \begin1 & 0&0 &0\\ 0 & 1&0 &0\\ 0 & 0&1 &0\\ \Delta X & \Delta Y&\Delta Z &1\\ \end\right]
( 22.2)

Здесь, и - это приращения координат X, Y и Z.

Мировая матрица для вращения объектов вокруг оси Х выглядит так (формула 6.3.).

Формула 22.3. Мировая матрица для вращения по оси Х

\left[ \begin1 & 0&0 &0\\ 0 & cos (\alpha)&sin (\alpha) &0\\ 0 & -sin (\alpha)&cos (\alpha) &0\\ 10 & 0&0 &1\\ \end\right]
( 22.3)

\alpha

Здесь - угол поворота в радианах

Мировая матрица для вращения объектов по оси Y выглядит так (формула 6.4.)

Формула 22.4. Мировая матрица для вращения по оси Y

 \left[ \begincos (\alpha) & 0&-sin (\alpha) &0\\ 0 & 1& 0 &0\\ sin (\alpha)& 0&cos (\alpha) &0\\ 0 & 0&0 &1\\ \end\right]
( 22.4)

Матрица для вращения объектов вокруг оси Z приведена в формуле 22.5.

Формула 22.5. Мировая матрица для вращения по оси Z

 \left[ \begincos (\alpha) & sin (\alpha)&0 &0\\ -sin (\alpha) & cos (\alpha)& 0 &0\\ 0& 0&1 &0\\ 0 & 0&0 &1\\ \end\right]
( 22.5)

Формула 22.6. представляет матрицу, которая служит для трансформации объектов.

 \left[ \begin\varphi x & 0&0 &0\\ 0 & \varphi y&0 &0\\ 0 & 0&\varphi z &0\\ 10 & 0&0 &1\\ \end\right]
( 22.6)

Формула 22.5. Мировая матрица для вращения по оси Z

, , - это коэффициенты масштабирования, которые применяются к вершинам. Они позволяют "сжимать" или "растягивать" объекты.

Матрица вида влияет на положение камеры – точки, из которой осуществляется просмотр трехмерной сцены.

Матрица проекции позволяет управлять проецированием сцены на экран. В XNA существует два вида проекций .

Первый – это перспективная проекция ( Perspective projection). В этой проекции объекты выглядят так же, как мы привыкли их видеть в реальном мире. Объекты, которые расположены дальше, кажутся меньше объектов, расположенных ближе.

Второй вид проекции – это ортогональная проекция . Здесь объекты проецируются на плоскость экрана без учета перспективы.

Читайте также: