Трехмерные графики: Трёхмерная графика — Википедия – Построить трехмерный график онлайн

Содержание

Построение поверхности 3D, заданной уравнением — Контрольная Работа РУ

Введите уравнение

Построим поверхность, заданную уравнением f(x, y, z) = 0, где a < x < b, c < y < d, m < z < n.

Примеры:

  • y = x^2
  • z = x^2 + y^2
  • 0.3 * z^2 + x^2 + y^2 = 1
  • z = sin((x^2 + y^2)^(1/2))
  • x^4+y^4+z^4-5.0*(x^2+y^2+z^2)+11.8=0
Канонический вид кривой и поверхности

Вы можете определить вид кривой и поверхности 2-го порядка онлайн с подробным решением:

Вид кривой или поверхности второго порядка
Правила ввода выражений и функций
Выражения могут состоять из функций (обозначения даны в алфавитном порядке):
absolute(x)
Абсолютное значение x
(модуль x или |x|)
arccos(x)
Функция — арккосинус от x
arccosh(x)
Арккосинус гиперболический от x
arcsin(x)
Арксинус от x
arcsinh(x)
Арксинус гиперболический от x
arctg(x)
Функция — арктангенс от x
arctgh(x)
Арктангенс гиперболический от x
e
e число, которое примерно равно 2.7
exp(x)
Функция — экспонента от x (что и e^x)
log(x) or ln(x)
Натуральный логарифм от x
(Чтобы получить log7(x), надо ввести log(x)/log(7) (или, например для log10(x)=log(x)/log(10))
pi
Число — «Пи», которое примерно равно 3.14
sin(x)
Функция — Синус от x
cos(x)
Функция — Косинус от x
sinh(x)
Функция — Синус гиперболический от x
cosh(x)
Функция — Косинус гиперболический от x
sqrt(x)
Функция — квадратный корень из x
sqr(x) или x^2
Функция — Квадрат x
tg(x)
Функция — Тангенс от x
tgh(x)
Функция — Тангенс гиперболический от x
cbrt(x)
Функция — кубический корень из x
В выражениях можно применять следующие операции:
Действительные числа
вводить в виде 7.5, не 7,5
2*x
— умножение
3/x
— деление
x^3
— возведение в степень
x + 7
— сложение
x — 6
— вычитание

Другие функции:
floor(x)
Функция — округление x в меньшую сторону (пример floor(4.5)==4.0)
ceiling(x)
Функция — округление x в большую сторону (пример ceiling(4.5)==5.0)
sign(x)
Функция — Знак x
erf(x)
Функция ошибок (или интеграл вероятности)
laplace(x)
Функция Лапласа

Многомерные графики в Python — от трёхмерных и до шестимерных / Habr

Примеры многомерных графиков

Введение

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

Plotly — это питоновская библиотека с открытым исходным кодом для разнообразной визуализации, которая предлагает гораздо больше настроек, чем известные matplotlib и seaborn. Модуль устанавливается как обычно — pip install plotly. Его мы и будем использовать для рисования графиков.


Давайте подготовим данные

Для визуализации мы используем простые данные об автомобилях от UCI (Калифорнийский университет в Ирвине — прим. перев.), которые представляют собой 26 характеристик для 205 машин (26 столбцов на 205 строк). Для визуализации шести измерений мы возьмём такие шесть параметров.


Здесь показаны только 4 строки из 205

Загрузим данные из CSV с помощью pandas.

import pandas as pd
data = pd.read_csv("cars.csv")

Теперь, подготовившись, начнем с двух измерений.


Двухмерная диаграмма рассеяния

Диаграмма рассеяния — весьма простой и распространенный график. Из 6 параметров, price и curb-weight используются ниже как Y и X соответственно.

# Импорт необходимых модулей
import plotly
import plotly.graph_objs as go

# Создаём figure
fig1 = go.Scatter(x=data['curb-weight'],
                  y=data['price'],
                  mode='markers')

# Создаём layout
mylayout = go.Layout(xaxis=dict(title="curb-weight"),
                     yaxis=dict( title="price"))

# Строим диаграмму и сохраняем HTML
plotly.offline.plot({"data": [fig1],
                     "layout": mylayout},
                     auto_open=True)

В plotly процесс немного отличен от аналогичного в Matplotlib. Мы должны создать layout и figure, передав их в функцию offline.plot, после чего результат будет сохранён в HTML файл в текущей рабочей директории. Вот скриншот того, что получится. В конце статьи будет ссылка на GitHub репозиторий с готовыми интерактивными HTML-графиками.


Двухмерная диаграмма рассеяния

Диаграмма рассеяния в 3D

Мы можем добавить третий параметр horsepower (количество лошадиных сил) на ось Z. Plotly предоставляет функцию Scatter3D для построения интерактивных трёхмерных графиков.


3D график

Вместо того чтобы вставлять код сюда каждый раз, я добавлял его в репозиторий.

(Удобнее всего смотреть релевантный код в соседней вкладке параллельно со чтением — прим. перев.)


Добавление четвёртого измерения

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

Здесь, наряду с тремя предыдущими характеристиками, мы будем использовать пробег в городских условиях — city-mpg как четвертое измерение, за которое будет отвечать параметр markercolor функции Scatter3D. Более светлый оттенок маркера будет означать меньший пробег.

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


4D график с оттенками в качестве 4-го измерения

Добавление пятого измерения

Размер маркера можно использовать для визуализации 5-го измерения. Мы используем характеристику engine-size (размер двигателя) для параметра markersize функции Scatter3D.

Наблюдения: размер двигателя связан с некоторыми из предыдущих параметров. Чем выше цена, тем больше двигатель. Ра́вно как и: ниже пробег — больше двигатель.


5D график с величиной маркера в качестве пятого измерения (размер двигателя)

Добавление шестого измерения

Форма маркера отлично подходит для визуализации категорий. Plotly даёт на выбор 10 различных фигур для 3D графика (звёздочка, круг, квадрат и т.д.). Таким образом, в качестве формы можно показать до 10 различных значений.

У нас есть характеристика num-of-doors, которая содержит целые числа — количество дверей (2 или 4). Преобразуем эти значения в фигуры: квадрат для 4 дверей, круг для 2 дверей. Используется параметр markersymbol функции Scatter3D.

Наблюдения: такое чувство, что у всех самых дешёвых машин по 4 двери (круги). Продолжая изучать график, можно будет сделать больше предположений и выводов.


6D график с формой маркера в качестве шестого измерения (количество дверей)

Можем ли мы добавить больше измерений?

Конечно можем! У маркеров есть больше свойств, таких как непрозрачность и градиенты, которые можно задействовать. Но чем больше измерений мы добавляем, тем труднее удержать их все в голове.


Исходный код

Код на Python и интерактивные графики для всех фигур доступны на GitHub здесь.

Трехмерная графика в вебе / Habr

Веб-технологии прочно вошли в нашу повседневную жизнь. Мы проводим во всемирной паутине достаточно большое количество времени — смотрим новости, совершаем покупки, общаемся и работаем. Индустрия услуг и развлечений в сети Интернет стремительно развивается, ведущие разработчики программного обеспечения улучшают поддержку трехмерной графики в своих продуктах. Традиционно ее поддержка ограничивалась высокопроизводительными компьютерами или специализированными игровыми консолями, а программирование требовало применения сложных алгоритмов. Однако благодаря росту производительности персональных компьютеров и расширению возможностей браузеров стало возможным создание и отображение трехмерной графики с применением веб-технологий.

В отличие от других технологий для работы с трехмерной графикой (таких как OpenGL и Direct3D), WebGL предназначена для использования в веб-страницах и не требует установки специализированных расширений или библиотек. Одно из преимуществ WebGL — приложения конструируются как веб-страницы, то есть одна и та же программа будет успешно выполняться на самых разных устройствах (к примеру, на смартфонах, планшетных компьютерах и игровых консолях). Это означает, что WebGL будет оказывать все более усиливающееся влияние на сообщество разработчиков и станет одним из основных инструментов программирования графики.


Достоинства WebGL

С развитием HTML разработчики получили возможность создавать все более сложные веб-приложения. На заре своего развития язык HTML предлагал только возможность отображения статического контента, но с добавлением поддержки JavaScript стало возможным реализовывать более сложные взаимодействия элементов и отображения динамического контента. Внедрение стандарта HTML5 позволило использовать новые возможности, включая поддержку двухмерной графики в виде тега canvas. Создание технологии WebGL позволило отображать и манипулировать трехмерной графикой на веб-страницах с помощью JavaScript. При помощи WebGL разработчики могут создавать совершенно новые пользовательские интерфейсы, трехмерные игры и использовать трехмерную графику для визуализации различной информации. Несмотря на внушительные возможности, WebGL отличается от других технологий доступностью и простотой использования, что способствует ее быстрому распространению.

Поддержка браузерами

В настоящий момент WebGL поддерживается следующими браузерами:

Десктопные браузеры

  • Mozilla Firefox (с 4-й версии)
  • Google Chrome (с 9-й версии)
  • Safari (с 6-й версии, по умолчанию поддержка WebGL отключена)
  • Opera (с 12-й версии, по умолчанию поддержка WebGL отключена)
  • IE (с 11-й версии, для других версий можно воспользоваться сторонними плагинами, например, IEWebGL)

Мобильные браузеры и платформы
  • Android-браузер (поддерживает WebGL только на некоторых устройствах)
  • Opera Mobile (начиная с 12-й версии и только для ОС Android)
  • IOS (полная поддержка с версии 8.1)
  • Firefox for mobile (с 4-й версии)
  • Google Chrome для Android (с 25-й версии)

Преимущества использования WebGL:
  • Кроссбраузерность и отсутствие привязки к определенной платформе. Windows, MacOS, Linux — все это неважно, главное, чтобы ваш браузер поддерживал WebGL.
  • Использование языка JavaScript, который достаточно распространен.
  • Автоматическое управление памятью. В отличие от OpenGL, в WebGL не надо выполнять специальные действия для выделения и очистки памяти.
  • Поскольку WebGL для рендеринга графики использует графический процессор на видеокарте (GPU), для этой технологии характерна высокая производительность, которая сравнима с производительностью нативных приложений.

История создания

Наиболее распространенными технологиями отображения компьютерной графики на персональных компьютерах являются Direct3D и OpenGL.

Direct3D — составная часть пакета технологий Microsoft DirectX.

Альтернативная ей технология OpenGL, благодаря ее открытости, получила гораздо более широкое распространение. Реализации OpenGL доступны для различных операционных систем и аппаратных платформ. Спецификация OpenGL была разработана компанией Silicon Graphics Inc. и опубликована как открытый стандарт в 1992 году. Технология оказала огромное влияние на развитие трехмерной графики.

WebGL уходит корнями в OpenGL, однако назвать его прямым потомком нельзя. Непосредственным прототипом WebGL принято считать OpenGL ES (for Embedded Systems для встраиваемых систем), создана в 2003—2004 годах и обновлена в 2007-м (ES 2.0) и в 2012-м (ES 3.0) годах. Переход к версии OpenGL 2.0 обозначился появлением новой важной особенности — поддержкой программных шейдеров. Эта поддержка была перенесена в OpenGL ES 2.0 и стала одним из основных элементов спецификации WebGL 1.0.

В начале 2009 года консорциум Khronos Group (некоммерческий промышленный консорциум, образованный для разработки, публикации и продвижения различных открытых стандартов) учредил рабочую группу WebGL и запустил процесс стандартизации WebGL на основе OpenGL ES 2.0. В 2011-м под его эгидой была выпущена первая версия WebGL. Однако в июне того же года корпорация Microsoft выразила свою обеспокоенность безопасностью технологии WebGL, сославшись на чрезмерные права доступа к оборудованию и ненадежность механизмов защиты. Вице-президент Mozilla Марк Шавер отверг критику Microsoft, назвав опасения преувеличенными. В то время корпорация Microsoft обладала собственной 3D веб-технологией Silverlight 5, основанной на тех же принципах, что и WebGL, которую, тем не менее, корпорация считала достаточно надежной. Позднее Microsoft изменила своё отношение к технологии WebGL, реализовав её поддержку в своем браузере Internet Explorer 11. Корпорация Apple приняла решение о поддержке WebGL в браузере Safari на конференции WWDC в 2014 году.

Обзор фреймворков для разработки на WebGL

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

Библиотека WebGLU

Первой общедоступной библиотекой стала WebGLU — набор утилит низкого и высокого уровня для разработки приложений на WebGL. WebGLU сконструирован таким образом, что разработчик может сосредоточиться на конечном результате с минимумом суеты и кода, но библиотека не ограничивает разработчиков, которые хотят больше контроля. Это достигается за счет возможности использования низкоуровневых функций для работы с WebGL API.

Неполный список функций:

  • Можно загрузить шейдеры непосредственно из .frag / .vert / .vp / .fp файлов
  • Автоматическая загрузка и настройка шейдера
  • Все компиляции и компоновки обрабатываются автоматически
  • Автоматическая установка любой проекции и вида модели
  • Обеспечивает проекции и матрицы-стеки вида модели, которые примерно соответствуют режимам матрицы в OpenGL
  • Автоматически создает при необходимости массив / элемент буферов и связывает их по мере необходимости во время рендеринга
  • Каждому объекту может быть назначена отдельная шейдерная программа
  • Хранение данных атрибутов шейдера, простой вызов
  • Частичный .obj анализатор реализован для загрузки объектов
  • Поддерживает иерархии объектов
  • Статические изображения и видео текстуры
  • Поддержка процедурной анимации
  • Поддержка покадровой анимации
  • Возможность смешивать типы анимации и иерархию объектов
  • GameGLU — библиотека компаньон обеспечивает легкое отслеживание событий клавиатуры

Библиотека GLGE

Достаточно именитая библиотека для разработки приложений с использованием WebGL. Библиотека ориентирована больше на динамическое изменение сцены. Однако последние изменения в репозитории датированы 2014 годом, поэтому есть причины усомниться в актуальности библиотеки на сегодняшний день.

Неполный список функций:

  • Покадровая анимация
  • Поддержка общего освещения, направленного освещения (spot) и точечных источников света
  • Поддержка карты нормалей
  • Анимирование материалов
  • Скелетная анимация
  • Поддержка формата Collada
  • Поддержка карт смещения
  • Рендеринг текста
  • Туман
  • Глубина теней
  • Карты окружения
  • Отражение / преломление
  • Анимация Collada
  • 2d фильтры
  • Culling — удаления скрытых частей сцены из процесса обработки
  • Поддержка LOD — уровни детализации объекта
  • Физика

Библиотека Three JS

Наиболее популярная и активно развивающаяся библиотека на сегодняшний день. Подробная и доступная документация и огромное количество рабочих примеров делают эту библиотеку одним из лидеров среди аналогичных систем.

Неполный список функций:

  • Рендереры — Canvas, SVG или WebGL
  • Добавление и удаление объектов в режиме реального времени
  • Туман
  • Перспективная или ортографическая камеры
  • Каркасная анимация, различные виды кинематики, покадровая анимация
  • Несколько типов источников света — внешний, направленный, точечный
  • Брошенные и полученные тени
  • Шейдеры (GLSL)
  • Объекты — сети, частицы, спрайты, линии, скелетная анимация и так далее
  • Множество предустановленных типов геометрии — плоскость, куб, сфера, тор, 3D текст и так далее
  • Активная поддержка модификаторов — ткань, выдавливание
  • Возможность загрузки множества типов данных — двоичный, изображения, JSON и сцена
  • Экспорт и импорт обьектов Blender, openCTM, FBX, 3D Studio Max и Wavefront .obj файл

Библиотека Babylon JS

Библиотека с открытым исходным кодом для создания полноценных 3D приложений и игр, работающих в веб-браузере без использования сторонних плагинов и расширений. Babylon JS по своим возможностям близок к ThreeJS, однако имеет в своем арсенале некоторые встроенные функции, недоступные в Three JS из коробки. К таким приятным особенностям относятся встроенный физический движок oimo.js — достаточно простой способ создать реалистичный ландшафт, используя карту высот. Разумеется, в three js также присутствуют такие возможности, но реализованы они при помощи различных дополнительных приложений. Однако за функциональность библиотеки приходиться платить нескромным весом в 800 кб.

Список функций:

  • Сцена — использование готовых мешей, туман, скайбоксы
  • Физический движок (модуль oimo.js)
  • Сглаживание
  • Анимационный движок
  • Звуковой движок
  • Система частиц (партиклов)
  • Аппаратное масштабирование
  • Поддержка LOD-ов
  • Пошаговая загрузка сцены
  • Автоматическая оптимизация сцены
  • Панель отладки
  • 4 источника освещения — точечный, излучаемый повсюду, прожектор и реалистичное
  • Пользовательские материалы и шейдеры
  • Широкие возможности текстурирования
  • SSAO
  • Блики
  • 9 видов камеры, в том числе и для сенсорного управления
  • Экспортеры для 3ds Max, Blender, Unity3D, Cheetah 3d
  • Карта высот

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

Каждый разработчик может выбрать библиотеку под свои конкретные нужды — кому-то важна скелетная анимация, кому-то — реалистичный свет или физика, а кто-то является действительно ортодоксальным профессионалом, который не признает ничего кроме чистейшего WebGL API и пишет шейдеры в блокноте. Однако всех объединяет желание создать качественные, легкие и производительные веб-приложения, активно использующие возможности трехмерной графики.

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

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

Трёхмерная компьютерная графика позволяет создавать объёмные трёхмерные сцены с моделированием условий освещения и установкой точек зрения.

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

Трёхмерная компьютерная графика, как и векторная, является объектно-ориентированной, что позволяет изменять как все элементы трёхмерной сцены, так и каждый объект в отдельности. Этот вид компьютерной графики обладает большими возможностями для поддержки технического черчения. С помощью графических редакторов трёхмерной компьютерной графики, например Autodesk 3D Studio, можно выполнять наглядные изображения деталей и изделий машиностроения, а также выполнять макетирование зданий и архитектурных объектов, изучаемых в соответствующем разделе архитектурно-строительного черчения. Наряду с этим может быть осуществлена графическая поддержка таких разделов начертательной геометрии, как перспектива, аксонометрические и ортогональные проекции, т.к. принципы построения изображений в трёхмерной компьютерной графике частично заимствованы из них.

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

К средствам работы с трёхмерной графикой,относят такой графический редактор как 3D Studio MAX. Это один из самых известных трёхмерных редакторов, он часто используется при создании фильмов. Разработка программы 3D Studio МАХ была начата в 1993 году. Версия 3D Studio МАХ 1.0 вышла в 1995 году на платформе Windows NT.

Уже тогда некоторые эксперты осторожно высказывали мнение, что МАХ может конкурировать с другими пакетами трехмерной графики. Осенью 2003 года discreet выпускает ЗD MAX 6. Новые инструменты анимации частиц в связке с модулями позволяют создавать фотореалистичные атмосферные эффекты. Появились встроенная поддержка капельно-сетчатых объектов, полноценная сетевая визуализация, импорт данных из САD-приложений, новые возможности для моделирования. Но кроме 3D Studio MAX есть и другие, не менее популярные программы трёхмерного моделирования, например Maya. Maya – это программа-аналог 3D Studio MAX, но она предназначена, в первую очередь, для анимации и для передачи мимики на лице трёхмерного актёра. Кроме того, в Maya удобнее рисовать. 3D Studio MAX направлен в первую очередь на качественную визуализацию предметов, ещё в нём можно выполнять примитивные чертежи.

Вообще для черчения существуют свои программы трёхмерного моделирования, самые известные из них AutoCAD, ArhiCAD. AutoCAD предназначен, в первую очередь, для машиностроительного черчения, а ArhiCAD для архитектурного моделирования.

Что же требует трехмерная графика от человека?

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

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

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

Трехмерная графика — это что такое?

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

трехмерная графика программы

Что это такое?

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

Трехмерную графику часто называют 3D-моделями. Помимо визуализированного изображения, модель содержится в графическом файле данных. Однако есть различия: трехмерная модель — это математическое представление какого-либо трехмерного объекта. Она технически не является графикой, пока не отображается. Она может отображаться визуально в виде двумерного изображения посредством процесса, называемого 3D-рендерингом, или использоваться в неграфических компьютерных симуляциях и вычислениях.

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

История технологии

Система трехмерной графики имеет довольно длительную историю. Уильяму Феттеру приписывают термин «компьютерная графика» с 1961 года для описания его работы в Boeing. Одной из первых работ в стиле компьютерной анимации являлась Futureworld (1976), которая включала анимацию человеческого лица и руки. Эта технология первоначально появилась в экспериментальной короткометражке A Computer Animated Hand 1972 года, созданной студентами Университета Юты Эдвином Кэтмаллом и Фредом Парке. С того момента трехмерная графика – это прорывная технология, которая стала развиваться очень активно по настоящее время.

производительность трехмерной графики и игр

ПО для трехмерной графики стало появляться для домашних компьютеров в конце 1970 годов. Самым ранним известным примером является 3D Art Graphics — набор трехмерных компьютерных графических эффектов, написанный Kazumasa Mitazawa и выпущенный в июне 1978 года для Apple II.

Как это делается?

Создание трехмерной графики делится на три основных этапа:

  • 3D-моделирование — представляет собой процесс создания компьютерной модели, отображающей форму объекта.
  • Макет и анимация — размещение и перемещение объектов внутри сцены.
  • 3D-рендеринг — компьютерные вычисления, которые на основе расположения света, типов поверхности и других качеств генерируют изображение.

Моделирование

Моделирование описывает процесс создания формы объекта. Двумя наиболее распространенными источниками трехмерных моделей являются следующие:

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

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

построить трехмерный график

Многоугольник — это область, образованная как минимум из трех вершин (треугольник). В свою очередь, многоугольник из n-точек — это n-угольник. Целостность модели в общем, и ее пригодность для анимации зависят от ее структуры. Чтобы она была функциональной, требуется правильно построить трехмерный график.

Процесс моделирования

Существует три распространенных метода представления модели. Они отличаются так:

  • Полигональное — точки в трехмерном пространстве, называемые вершинами, соединяются отрезками, образуя полигональную сетку. Большинство современных трехмерных моделей построены как текстурированные полигональные, потому что они гибкие и компьютеры могут отображать их очень быстро. Однако многоугольники являются плоскими и могут только приблизиться к кривым поверхностям, используя много многоугольников.
  • Моделирование кривых — поверхности определяются кривыми, на которые влияют взвешенные контрольные точки. Кривая следует (но не обязательно интерполирует) точки. Увеличение веса для точки притянет кривую ближе к ней. Типы кривых включают в себя неоднородный рациональный B-сплайн (NURBS), патчи, сплайны и геометрические примитивы.
  • Цифровое — до сих пор относительно новый метод моделирования. Оно стало очень популярным за последние несколько лет.

Сегодня существует три типа цифрового моделирования:

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

Моделирование может выполняться с помощью специальной программы (например, Cinema 4D, 3ds Max, Maya, Blender, Modo, LightWave) или прикладного компонента (Shaper, Lofter в 3ds Max), либо с помощью некоторого языка описания сцены (как в POV-Ray). Иногда нет строгого различия между этими фазами. В данных случаях моделирование трехмерной графики — это только часть процесса создания сцены.

построение трехмерных графиков

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

Материалы и текстуры

Материалы и текстуры — это свойства, которые движок рендеринга использует для создания модели. В несмещенном механизме рендеринга, таком как циклы блендера, можно дать указание движку по материалам модели. Например, так можно настроить, как обрабатывать свет, когда он попадает на поверхность.

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

Макет и анимация

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

Что такое рендеринг?

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

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

трехмерная компьютерная графика

Как правило, данный шаг выполняется с использованием программного обеспечения для компьютерной 3D-графики или API-интерфейса для нее. Изменение сцены в подходящую для рендеринга форму также включает в себя трехмерную проекцию, отображающую 3-мерное изображение в двух измерениях. Хотя ПО 3D-моделирования и САПР также могут выполнять 3D-рендеринг (например, Autodesk 3DS Max или Blender), также существует эксклюзивное программное обеспечение 3D-рендеринга.

Программное обеспечение

Программы для трехмерной графики создают компьютерные изображения (CGI) с помощью 3D-моделирования и рендеринга. Или создают модели для аналитических, научных и промышленных целей.

Приложения для 3D-моделирования — это класс ПО для компьютерной трехмерной графики, используемой для создания трехмерных моделей. Отдельные программы данного класса называются сервисами моделирования или разработчиками моделей.

Такие сервисы позволяют пользователям реализовать и изменять модели с помощью 3D-сетки. Так художники могут вычитать, добавлять, растягивать и прочим образом изменять сетку по своему усмотрению. Модели можно просматривать под разными углами, обычно одновременно. Их можно вращать, а вид — увеличивать и уменьшать.

производительность трехмерной графики

Большинство 3D-программ включают в себя ряд связанных опций, например, трассировщики лучей и другие альтернативы рендеринга и средства наложения текстур. Некоторые из также предлагают функции, которые поддерживают или разрешают анимацию моделей. Ряд из них могут быть в состоянии генерировать видео с полным движением из серии визуализированных сцен (то есть анимации).

Системы автоматизированного проектирования

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

Дополнительные инструменты

После производства видео студии затем редактируют или комбинируют его, используя такие программы, как Adobe Premiere Pro или Final Cut Pro на среднем уровне, или Autodesk Combustion, Digital Fusion либо Shake на высоком уровне. Программное обеспечение для сопоставления движущихся изображений обычно используется для монтажа в реальном времени с видео, сгенерированным компьютером, и синхронизирует их по мере движения камеры.

Сообщества

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

создание трехмерной графики

Отличия от других видов компьютерной графики

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

Однако настоящий режим трехмерной графики в видео и анимации чаще всего требует специального оборудования (очков) для лучшего просмотра.

Псевдо-3D и настоящее 3D

В некоторых видеоиграх используются ограниченные проекции трехмерных сред, таких как изометрическая графика или виртуальные камеры с фиксированными углами, созданные для повышения производительности игрового движка либо для стилистических и игровых задач. Считается, что такие игры используют псевдо-3D графику.

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

Популярно о компьютерной 3D графике, часть 1 / Habr


Все мы слышали о 3D графике (далее просто 3D, не путать со способом отображения — голограммами, 3D-мониторами и т.п.), многие прекрасно знают, что такое 3D и с чем его едят. Но, все же, есть и те, кто смутно себе представляет, что кроется под этой короткой аббревиатурой. Статья рассчитана на тех, кто не имеет представления о компьютерной графике. Также будет немного экскурса в историю компьютерной графики (в следующих планируемых частях).
Почему именно 3D? Как нетрудно догадаться, речь идет о 3 Dimension, или о трех измерениях. И не обязательно при этом, чтобы и отображение было в 3D. Речь идет о способе построения картинки.

Часть 1. Собственно, моделирование
Традиционно рисуют в 2D (по осям X и Y) — на бумаге, холсте, дереве и т.п. При этом отображают какую-то одну из сторон предмета. Картинка сама по себе плоская. Но если мы хотим получить представление обо всех сторонах предмета, то необходимо нарисовать несколько рисунков. Так поступают в традиционной рисованной анимации. Но, вместе с тем, существует, (кстати, в СССР была довольно хорошо развита) т.н. кукольная анимация. Один раз изготовленную куклу снимают в необходимых позах и ракурсах, получая серию «плоских картинок». 3D (к X и Y добавляется координата глубины Z) визуализация — это те же «куклы», только существующие в цифровом виде. Другими словами, в специальных программах (Blender, 3ds Max, Maya, Cinema 4D и т.п.) создается объемное изображение, например авто.

Преимущество данного метода в том, что в распоряжении, скажем, аниматора есть объемная модель, необходимо лишь поместить ее должным образом в кадр, анимировать (задать траекторию передвижения или рассчитать с помощью симулятора) при необходимости, а уж отображение авто в финальной картинке ложится на специальную программу называемую визуализатором (render). Еще одно преимущество в том, что модель достаточно нарисовать один раз, а потом использовать в других проектах (скопировав), изменять, деформировать и т.п. по своему усмотрению. Для обычного 2D рисунка, в общем случае, такое невозможно. Третье преимущество — можно создавать практически бесконечно детализированные модели, например смоделировать даже винтики на часах и т.п. На общем плане этот винтик может быть и неразличим, но стоит нам приблизить камеру, программа-визуализатор сама рассчитает, что видно в кадре, а что — нет.

Существует несколько способов моделирования, но самым популярным является полигональное моделирование. Нередко можно увидеть в роликах о 3D или фантастических фильмах как тот или иной объект представляется в виде т.н. сетки. (см. рисунок выше) Это и есть пример полигонального моделирования. Суть его в том, что поверхности представляются в виде простых геометрических двумерных примитивов. В компьютерных играх это треугольники, для других целей обычно используют четырехугольники и фигуры с большим кол-вом углов. Эти примитивы, из которых состоит модель, называют полигонами. Но при создании 3D объекта стараются обойтись, как правило, четырехугольниками. При необходимости четырехугольники (полигоны) без проблем превращаются в треугольники при экспорте в игровой движок, а при необходимости сглаживания или тесселяции модель из четырехугольников получается, как правило, без артефактов.
Что такое тесселяция? Если какой-то объект представляется в виде полигонов (особенно органические объекты, например человек), то понятно, что чем меньше размер полигонов, чем их больше, тем более близкой может быть модель к оригиналу. На этом основан метод тесселяции: сначала изготавливают грубую болванку из небольшого кол-ва полигонов, затем применяют операцию тесселяции, при этом каждый полигон делится на 4 части. Так вот, если полигон четырехугольный (а еще лучше, близок к квадрату) то алгоритмы тесселяции дают более качественный и предсказуемый результат. Также операция сглаживания, а это та же тесселяция, только с изменением углов на более тупые, при близких к квадрату полигонах, позволяет получить хороший результат.

Как было сказано выше, чем больше полигонов, тем более модель может (может, потому, что модель должна быть еще похожа на оригинал, а это вопрос мастерства моделера, а не полигонов) походить на оригинал. Но у большого кол-ва полигонов есть обратная сторона: понижение производительности. Чем больше полигонов, тем больше точек по которым они строятся, тем больше данных приходится обрабатывать процессору. Поэтому 3D графика — это всегда компромисс между детализацией модели и производительностью. В связи с этим даже возникли термины: hight poly и low poly, соответственно высоко полигональная модель и низко полигональная модель. В играх применяются низко полигональные модели, так как в них выполняется визуализация в реальном времени. Кстати, модели в играх представлены треугольниками для повышения производительности: графические процессоры умеют на аппаратном уровне быстро обрабатывать сотни миллионов треугольников за секунду.

Как правило, полигональное моделирование относится к пустотелому моделированию, где объект имеет только объем, но внутри пустой. Это означает, что если мы смоделируем куб, а потом удалим одну из стенок, то увидим внутри пустоту. Также имеются программы для твердотельного моделирования, где тот же самый куб представлен в виде монолитного объекта. В таких программах (к примеру, Autodesk Inventor) применяются математические модели отличные от тех, что в полигональном моделировании. Алгоритмы твердотельного моделирования лучше подходят для моделирования механизмов при разработке техники. Программы вроде Autodesk Inventor имеют средства для моделирования с учетом особенностей технологического процесса, как то фаски, сверление отверстий, проставление размеров, допусков и т.п. Получаемые модели можно сразу отправить на подходящий станок для получения изделия в металле или другом материале.
Также существуют так называемые программы 3D лепки (ZBrush, Autodesk Mudbox) в которых моделирование сводится (грубо говоря) к созданию углублений или выпуклостей. Такая техника похожа на то, как скульпторы лепят из глины — убирая ненужное и добавляя необходимое. С помощью таких программ можно добиться реалистичного рельефа поверхности, например морщин на коже или складок ткани. В настоящее время высокополигональные (а для лепки модель должна обладать солидным кол-вом полигонов) реалистичные модели людей и вообще животного мира выполняются, в большинстве своем, с применение программы лепки. Распространена практика когда заготовка модели создается с помощью полигонального моделирования, а затем в программе лепки тесселируется и добавляются мелкие детали.

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

В общем случае текстура — это двумерный рисунок который накладывается на 3D модель. Текстура может быть как процедурной — сгенерированной при помощи алгоритма, так и нарисованная в графическом редакторе, или фотографией реального объекта. С помощью текстуры задается рисунок и цвет модели, но реальная поверхность обладает и другими параметрами: отражающей способностью, преломлением, рельефом, позрачностью и т.п. Все эти параметры задаются в свойствах материала. Т.е. материал с точки зрения 3D графики — это некая математическая модель описывающая параметры поверхности. Например, для воды обязательно необходимо указать прозрачность и преломляющую, отражающую способности.
Перед «нанесением» материала на 3D модель необходимо создать ее развертку, т.е. представить все (несколько, одну) поверхности в виде проекции на плоскость. Это необходимо для того, чтобы затем двумерная текстура правильно «лягла» на модель.
Таким образом изготовление 3D модели в общем случае состоит из следующих стадий:
1. Получение изображений референса (т.е. того, с чего будет моделироваться) или самого референса. Или отрисовка экскиза.
2. Моделирование геометрии на основе референса.
3. Создание развертки.
4. Отрисовка текстур или получение их другим способом в виде файлов.
5. Настройка параметров материала (текстуры, преломление, отражение, прозрачность).
Теперь 3D модель готова для визуализации — получении картинки.
Первый и четвертый пункт могут быть быть опущены если модель простая, но, как правило, хороших результатов без всех 5 шагов не добиться.
Подытожим.
Между обычным рисунком, скажем, на бумаге, и построением 3D изображения есть существенные различия в самом процессе. Двумерный рисунок, как правило, создается в два этапа: эскиз и раскрашивание. В 3D графике после изготовления модели ее необходимо поместить в сцену к другим объектам (или в так называемую студию), добавить освещение, камеру и лишь затем можно надеяться получить финальную картинку. Изображение в 3Dграфике просчитывается на основе физической модели, как правило, это модель распространения луча света с учетом отражения, преломления, рассеивания и т.п. Рисуя красками мы сами отрисовываем тени, блики и т.д., а в трехмерной графике мы подготавливаем сцену с учетом освещения, материалов, геометрии, свойств камеры, программа рассчитывает итоговую картинку сама.

Вот, на сегодня пока и все. Комментарии, а особенно вопросы и замечания по существу приветствуются.

P.S. В следующих частях (если Хабрабществу будет интересно) мы более подробно поговорим о трехмерном моделировании для игр, будет затронута визуализация, моделирование динамических сред, таких как вода, разрушение объекта и затронем динамическое взаимодействие между 3D объектами, историю 3D графики.

3D графика. Теория

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

3D-конвейер

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

  1. Определение состояния объектов (Situation modeling) — эта часть программы не имеет прямого отношения к компьютерной графике, она моделирует тот мир, который будет отображаться в дальнейшем. Например в случае Quake это — правила игры и физические законы перемещения игрока, искусственный интеллект монстров и т.д.
  2. Определение соответствующих текущему состоянию геометрических моделей (Geometry generation) — эта часть конвейера создает геометрическое представление текущего момента нашего маленького «виртуального мира».
  3. Разбиение геометрических моделей на примитивы (Tesselation) — эта первая действительно зависимая от «железа» стадия. На ней создается внешний вид объектов в виде набора определенных примитивов, разумеется, на основе информации из предыдущего шага конвейера. Наиболее распространенным примитивом в наше время является треугольник, и большинство современных программ и ускорителей работают именно с треугольниками. Не вдаваясь в математические подробности скажу, что на треугольники всегда можно разбить любой плоский многоугольник, и именно тремя точками можно однозначно задать плоскость в пространстве. К тому же, все мы знаем, что у Царя было три сына, а у Горыныча — три головы.
  4. Привязка текстур и освещения (Texture and light definition) — на этой стадии определяется, как будут освещены геометрические примитивы (треугольники), а также какие и как на них в дальнейшем будут наложены текстуры (Textures: изображения, передающие внешний вид материала объекта, т.е. негеометрическую визуальную информацию. Хороший пример текстуры — песок на абсолютно ровном пляже). Как правило, на этой стадии информация вычисляется только для вершин примитива.
  5. Видовые геометрические преобразования (Projection) — здесь определяются новые координаты для всех вершин примитивов исходя из положения наблюдателя и направления его взгляда. Сцена как бы проецируется на поверхность монитора, превращаясь в двухмерную, хотя информация о расстоянии от наблюдателя до вершин сохраняется для последующей обработки.
  6. Отбрасывание невидимых примитивов (Culling) — на этой стадии из списка примитивов исключаются полностью невидимые (оставшиеся позади или сбоку от зоны видимости).
  7. Установка примитивов (Setup) — здесь информация о примитивах (координаты вершин, наложение текстур, освещение и т.д.) преобразуется в вид, пригодный для последующей стадии. (Например: координаты точек буфера экрана или текстур — в целые числа фиксированного размера, с которыми работает аппаратура).
  8. Закраска примитивов (Fill) — на этой стадии, собственно, и происходит построение в буфере кадра (памяти, отведенной под результирующее изображение) картинки на основе информации о примитивах, сформированной предыдущей стадией конвейера, и прочих данных. Таких, как текстуры, таблицы тумана и прозрачности и пр. Как правило, на этой стадии для каждой точки закрашиваемого примитива определяется ее видимость, например, с помощью буфера глубин (Z-буфера) и, если она не заслонена более близкой к наблюдателю точкой (другого примитива), вычисляется ее цвет. Цвет определяется на основе информации об освещении и наложении текстур, определенной ранее для вершин этого примитива. Большинство характеристик ускорителя, которые можно почерпнуть из его описания, относятся именно к этой стадии, так как в основном именно эту стадию конвейера ускоряют аппаратно (в случае недорогих и доступных плат).
  9. Финальная обработка (Post processing) — обработка всей результирующей картинки как единого целого какими-либо двумерными эффектами.

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

3D API

Хорошо, теперь у нас есть последовательность действий. Но для получения результата надо определится с двумя вещами — кто какие стадии будет выполнять и как он это будет делать. У нас есть три основных кандидата на работу — сама программа (как правило, начальные стадии конвейера), библиотека прикладного программирования (интерфейс, API) и сам ускоритель. Впрочем, программы, не использующие ускоритель (Doom, Quake в программном режиме и т.д.), все стадии конвейера выполняют самостоятельно. В понятие библиотеки в данном контексте можно (без особого зазрения совести) поместить драйвера данного ускорителя, т.к., с точки зрения программы, они становятся частью библиотеки. Программ и ускорителей существует великое множество, а вот число общепризнанных библиотек весьма ограничено. Наиболее часто игры используют следующие библиотеки

  • OpenGL — созданная первоначально для профессиональных графических станций и программ трехмерного моделирования библиотека. Постепенно она пришла на платформу PC, в основном благодаря стремительному прогрессу в области «железа» и игре Quake, использовавшей урезанный вариант этой библиотеки. Наличие поддержки этой библиотеки у ускорителя крайне желательно из-за большого числа новых игр, ориентированных на нее. Библиотека является в некотором роде высокоуровневой, так как берет на себя все действия, начиная с середины 4-ой ступени нашего конвейера. С одной стороны, это здорово облегчает работу программистам, с другой — способно несколько осложнить ее же, особенно при реализации нестандартных эффектов или необходимости использовать новые возможности ускорителя, выходящие за рамки OpenGL. Хороший пример полезности подобного подхода — возможность выпустить версию OpenGL, значительно ускоряющую (конкретно — геометрические преобразования) работу игр на новых процессорах с SIMD наборами команд — AMD 3Dnow! и Intel Katmai New Instructions (MMX2). Очевидным достоинством также является переносимость программ на другие, не Wintel-платформы. Существенным, но быстро исправляемым недостатком — отсутствие ее полного варианта для некоторых распространенных ускорителей.
  • Direct3D — библиотека, являющаяся частью Microsoft DirectX и поддерживаемая сейчас практически всеми ускорителями. Фактически представляет собой две библиотеки — низкоуровневую (начиная с 7 стадии) и высокоуровневую (с 5-ой). Результат — большая гибкость для программиста в реализации его идей и, как следствие, головная боль для него же из-за множества связанных с конкретной реализацией ускорителя параметров. Сейчас идет бурное развитие этого продукта Microsoft, и, судя по всему, версия 6 Direct3D (которая уже официально вышла) будет вполне достойным конкурентом OpenGL по своим возможностям и скорости.
  • Glide — собственная низкоуровневая библиотека (стадия 7 конвейера и далее) фирмы 3Dfx, добившаяся популярности благодаря большому распространению первых, действительно успешных ускорителей (на базе набора чипов Voodoo). Но, скорее всего, эта библиотека уйдет со сцены в ближайшие несколько лет. Она не поддерживается другими ускорителями и не будет ими поддерживаться (без разрешения 3Dfx это является незаконным), к тому же все новые игры, рассчитанные на нее, работают, как минимум, еще с одной из ранее описанных библиотек. Создатели неприятного исключения из этого правила (а именно, игры Unreal) уже анонсировали дополнение к игре с поддержкой Direct3D и OpenGL.

Еще существует около 10 библиотек низкого уровня, созданных разработчиками различных ускорителей; таких как: R-Redline фирмы Rendition, S3D Toolkit фирмы S3 и т.д. Как и следовало ожидать, программы, написанные специально для них, постепенно исчезают.

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

3D акселерация

Итак, самый общий ускоритель состоит из геометрического процессора (Geometry Processor, пока практически всегда отсутствует), механизма установки (Setup engine, стадия 7 конвейера) и механизма отрисовки примитивов — закраски (Fill engine, стадии 8 и 9), который при детальном рассмотрении оказывается комбинацией двух блоков — обработки текстур (Texel engine) и обработки буфера кадра (Pixel engine). Производительность ускорителя зависит от процессора, производительности памяти, шины и самих обрабатывающих блоков. Как правило, приводятся два числа — максимальная пропускная способность (треугольников в секунду, triangle throughput) и максимальная производительность закраски (точек в секунду, fill rate). Такой подход возможен, но не очень корректен. Да и все мы знаем, что лучшим тестом является скорость игры, в которую мы любим играть (fps, кадров в секунду на каком-то стандартном наборе действий) и качество изображения (в цифрах не измерить). Именно эти параметры и необходимо узнать в первую очередь в Internet или, может быть, у соседа в подъезде, но не стоит при этом забывать о сильной зависимости числа кадров от объема памяти и мощности процессора компьютера этого самого соседа.

Если не вдаваться в глубокие технические подробности, закраска происходит следующим образом: блок обработки буфера кадра определяет, видна ли закрашиваемая точка, например, с помощью буфера глубин (Z Buffer). Если она видна, блок обработки текстур вычисляет цвет текстуры, соответствующий этой точке примитива. Здесь есть несколько важных моментов — интерполяция (filtering, сглаживание) и выбор уровня текстуры (mip-mapping). Первый обеспечивает изображение без резких прямоугольных пикселей, даже когда вы находитесь вблизи предмета и разрешение текстуры явно недостаточное. Второй устраняет искажения (странные узоры), возникающие при чрезмерном удалении от текстуры, выбирая аналог текстуры с меньшим разрешением. Фактически, существует несколько режимов комбинирования этих двух методов. Сейчас наиболее распространены билинейная фильтрация (bilinear filtering — вначале определяется необходимая для этого расстояния текстура, а затем значение цвета линейно интерполируется между четырьмя соседними точками текстуры, по каждой из координат на поверхности выбранной текстуры) и трилинейная (trilinear — две билинейных для двух текстур, с меньшим и большим разрешениями, затем результат интерполируется между ними). Последняя выглядит более приятно, но и требует больших затрат, так как не реализуется за один такт на современных ускорителях с одним блоком обработки текстур и, в результате, вдвое понижает скорость закраски. Сейчас появились первые ускорители с анизотропной (anisotropic — внутри куба, из двух наборов по 4 соседних точки текстур, итого по 8 точкам) фильтрацией, которая выглядит совсем хорошо, но и занимает еще вдвое больше времени. Затем вычисленный с помощью одного из вышеописанных методов цвет текстуры помещается в буфер кадра, заменяя находившееся там ранее значение, либо комбинируется с ним по какому-либо правилу (combination, blending, alpha-blending). Как минимум, ускоритель должен поддерживать режимы Источник*Приемник (Src*Dest) и Источник+Приемник (Src+Dest). Подобные возможности позволяют реализовать цветное освещение, эффекты типа металла или отражения, реализовывать трилинейную фильтрацию там, где она не поддерживается аппаратно и т.д. (так называемое многопроходное построение изображения, multipass rendering).

Как правило, для каждой точки текстуры, кроме RGB цвета, можно задать степень ее прозрачности (alpha, RGBA формат текстуры), которая будет использоваться ускорителем для регулирования воздействия источника на приемник. Подобным образом закрашиваются, например, полупрозрачные по краям взрывы и ореолы вокруг источников света в Unreal.

Не является жизненно необходимой, но очень ускоряет работу программ, использующих многопроходное построение изображения (например, Quake2 или Unreal), возможность мультитекстурирования (multitexturing). Фактически, это наличие двух (или даже более) блоков обработки текстур, способных одновременно вычислять два цвета по двум текстурам для одной точки примитива, а затем комбинировать их между собою. Подобной возможностью обладает Vоodoo2, RivaTNT и еще несколько пока «недоделанных» чипов.

Важны также точность представления цветов (16 бит — Hi-Color или 32 бита — True-Color, последний гораздо лучше) и точность буфера глубин (Z-Buffer, 16 бит хуже, 24 и 32 лучше), используемого для определения видимости отдельных точек примитива. Ошибки в определении глубины способны приводить к странным эффектам, например, к проглядывающим сквозь постамент ногам статуи в игре Unreal.

И последнее действие блока обработки буфера кадра — наложениие глобальных эффектов на готовую картинку. Например, туман, дымка или темнота (с точки зрения ускорителя это одно и то же), т.е. эффект, известный как fogging. Или используемый в RivaZX метод полноэкранного сглаживания (full screen antialiasing), когда изображение рассчитывается с большим разрешением, чем показывается пользователю, причем соседние точки изображения суммируются, и именно суммарное значение демонстрируется пользователю как одна точка. Подобным образом устраняются резкие границы между полигонами, изображению придается приятный «монолитный» вид. Существует также краевое сглаживание примитивов, приводящее к практически идентичному (чуть хуже) результату (edge antialiasing), но требующее гораздо меньше затрат на построение изображения.

Резюме

Займемся подведением итогов. Хороший ускоритель на ближайшее будущее это:

  • Поддержка OpenGL и Direct3D 5.X и 6.0
  • Достаточно большой fill rate (около 100 миллионов точек в секунду)
  • Достаточно большой triangle throughput (около 1 миллиона треугольников в секунду)
  • Аппаратная трилинейная фильтрация (tri-linear filtering)
  • Режимы alpha-blending, Src*Dest, Src+Dest
  • Хорошая глубина цвета — True-Color 32 бита
  • Хорошая точность Z-Buffer — 32 бита
  • Желателен multitexturing
  • Желательно сглаживание — antialiasing, full screen или edge
  • Достаточное количество памяти — не менее 8 Мб для карты на шине PCI или не менее 4 Мб на шине AGP

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *