3 дек. 2010 г.

Просто о сложном №0. Вступление.


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

1. Геометрия.
Всё, что мы видим на экране вьюпорта, все наши геометрические объекты - это ГМТ, геометрическое место точек, заданное тем или иным путём. Например куб. Чтобы его нарисовать достаточно знать один параметр - длину ребра. Чтобы нарисовать шар - достаточно знать радиус.
Сложные модели описываются более сложным способом, например для описания стакана надо сначала описать уравнением кривую, а потом задать ось вращения. Это будут параметрические объекты. Так же объекты могут быть заданы с помощью координат вершин. Примером таких объектов может послужить геометрия editable mesh/poly в 3ds max. Всякий раз, когда мы выбираем "Convert to editable mesh" в меню мы превращаем параметрический объект в объект прямо заданный координатами.
Видны воксели, созданные плагином FumeFX
Модификаторы геометрии - всё те же математические функции, которые применяются к готовой геометрии. Если модификаторы можно выстроить в цепочку (например стэк модификаторов в 3ds max или нодовые цепочки в других редакторах), то это называется процедурализм.
Надо понимать, что никаких мощностей компьютера не хватит, чтобы хранить координаты каждой точки поверхности геометрического объекта. Такие методы существуют и применяются в некоторых областях, но не слишком широко из-за ограничений производительности вычислительной техники на данный момент. Как пример - расчёт эффектов флюидов (жидкостей и газообразных сред) или воксельная графика в играх (Voxelstein3D).

.


Edit poly в 3ds max. Пунктиром обозначены треугольники.
Поэтому независимо от способа создания и моделирования, вся геометрия разбивается на треугольные полигоны. (Только не путайте, пожалуйста их с полигонами, которые используются в моделировании. Тот же полигон в editable poly может иметь хоть сколько вершин.)


2. Трансформации.
Итак, у нас уже есть какой-то объект. Пусть все точки его рассчитываются от начала координат (0, 0, 0). А что если мы хотим добавить второй объект в сцену? Наверное было бы удобно тоже откладывать все его точки от начала координат?
В сущности так оно и происходит в компьютерной графике. Все объекты создаются от нулевой точки отсчёта и только потом переносятся в новое место.
Куб стоит в (0, 0, 0) мировой с.к. Чайник себе на уме)


Таким образом у каждого объекта есть своя система координат, где создана вся геометрия, а уже эта система координат в свою очередь расположена в пространстве мировой системы координат. Чтобы рассчитать точки геометрии относительно мировой системы координат используются матрицы преобразований.
Именно поэтому не рекомендуется применять scale в 3ds max к объектам, если мы хотим сделать их больше. В этом случае мы меняем масштаб локальной системы координат относительно мировой с.к., но не размер самой геометрии. Чтобы изменить размер параметрических объектов, надо поменять их параметры в соответствующей вкладке, чтобы поменять размер edit poly/mesh нужно выбрать сами точки и применить к ним scale.

3. Текстуры.
Текстуры бывают параметрические и растровые, двухмерные и трёхмерные. Параметрические текстуры создаются с помощью функций «прямо на ходу». Это могут быть клеточки, шум, градиенты и т.п. Как понять, что такое трёхмерная текстура? Представьте, что уравнение с помощью которого она генерируется создаёт не плоскую картинку, а заполняет комнату каким-то наполнителем. В случае с клеточками (checker) это будут чёрно-белые кирпичи, в случае шума (noise) - это будут клочья «тумана». Если мы наложим такую текстуру на нашу геометрию - мы увидим клетки или пятна в местах пересечения поверхности геометрии с тем самым «наполнителем».
Растровые текстуры - это уже обычные изображения, представляющие из себя набор точек в координатной сетке. Эти точки принято называть пикселями (пикселами, англ. - pixel). Но как наложить плоскую картинку, скажем, на шар? Для этого нам надо преобразовать пиксели в тексили - точки на поверхности объекта и придумать закон по которому их расположить. Делается это с помощью преобразований текстурных координат либо проекцией, либо развёрткой. В первом случаем можно вообразить проектор, который проецирует нашу текстуру на объект (разными способами), во втором - выкройку, когда объект развёрнут на плоскости. Способ наложения текстуры на объект обычно храниться в данных самого объекта и называется UV map. (UVW - это те самые координаты текселей на поверхности объекта, по аналогии с XYZ - координатами вершин в пространстве). Проекция сгодится для простых объектов вроде шара, столешницы стола, но для персонажей придётся использовать текстурную развёртку.

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


5. Рендер.
По сути сейчас рендер, то есть просчёт изображения, сводится к трассировке лучей света (ray tracing).
Лучи в компьютерной графике - это упрощенная модель того, что происходит в реальном мире. А происходит следующее. Есть источники света, которые испускают фотоны. Эти самые фотоны при столкновением с поверхностью ведут себя тремя (для симуляции достаточно) известными способами.
1) поглощается
2) отражается
3) проходит сквозь вещество

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


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

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




На сегодня всё. Дальше будет интересней.

Mustang shot 2 by Jeff Patton
3ds max, mental ray, Photoshop
Изображение, использованное в заставке - визуализация Jeff Patton, замечательного специалиста по mental ray. Клик по изображению откроет оригинальную страницу. Клик по имени - собственный сайт Джеффа.

2 комментария:

Поиск по блогу