Возможности графических карт, 3D – графика.
“Глубина-гпубина, я не твой”, — говорил герой книги Сергея Лукьяненко “Лабиринт Отражений”. Кто том чей, вопрос, конечно, интересный, но малость спорный, и является темой особого разговора. Сегодня же мы попытаемся прояснить понятие “глубина” и то, как она создается. Если спуститься из фантастических виртуальных миров но плоский экран монитора, то глубина — это ничто иное, как правдоподобное изображение на нем трехмерных объектов — ЗD-графика.
... С древнейших времен народ требовал хлеба и зрелищ. В XX веке хлеб также насущен. Зрелища же прониклись духом техногенного века. В случае компьютерных технологий “хлебом” можно назвать общую производительность, а “зрелищами” — производительность подсистем, критичных для компьютерных игр с использованием ЗD-графики. Практика показывает, что зрелища частенько становятся важнее хлеба: во всяком случае, о Voodoo знает намного больше людей, чем об Ultra SPARC (высокопроизводительные процессоры фирмы Sun). Однако вернемся к нашим баронам — трехмерной компьютерной графике, которую сегодня иначе как “зрелищем” и не назовешь. Сегодня трехмерная графика — увлекательная, впечатляющая, но и достаточно сложная область практического применения компьютера.
Так вот ты какой, “третий D”
Условно компьютерную графику можно разделить на две категории. Первая - это имитация естественных способов рисования, например “холст, масло”, самая известная программа — Fractal Design Painter. Вторая категория - это программы моделирования, в которых художник уже не контролирует каждый элемент изображения, лишь определяет композицию и общие законы построения рисунка. О последних и пойдет разговор. Как известно, существуют программы, которые по одному лишь числу могут выдать завораживающую абстрактную картину, однако здесь от художника ничего не зависит. Совсем другое дело — генераторы ландшафтов (landscape generators). На основании сложных математических процедур они позволяют моделировать реальный мир. В отличие от большинства пакетов трехмерной графики, генераторы ландшафтов оперируют понятиями близкими к геодезии и метеорологии. Облака, положение солнца, поверхность суши или гладь моря — вот составляющие, благодаря которым строятся картины с помощью пакетов такого рода. Пользователь контролирует только время суток, рельеф местности или направление ветра, а программа сама воспроизводит обстановку, которая бы сложилась в реальном мире при данных погодных условиях. Базисом для таких пакетов являются фракталы, описанные ученым из исследовательского центра IBM Бенуа Маидельбротом.
Фракталы - это фигура или часть фигуры, которая может быть разбита на элементы, каждая из которых — уменьшенная копия целого. “Облака - это не сферы, а береговая линия - не прямая”. Это цитата из книги “Фрактальная геометрия природы” Мандельброта, Осталось только применить фрактальную геометрию к построению реалистических пейзажей.
Один из простейших алгоритмов был разработан довольно давно подразделением Lucas Films — Industrial Light & Magic, фирма делала спецэффекты во многих современных фильмах “Терминатор 2”, “Газонокосильщик”, “Бездна”, “Годзилла”. Но это современные разработки, фрактальные же технологии стали использоваться на заре компьютерной графики. Почему именно фракталы “пришлись ко двору” при генерации ландшафтов, демонстрирует удивительно простой пример построения горы при помощи разбиения базового треугольника на элементы и их случайного смещения. Просто и со вкусом, — не правда ли?
Любому человеку, хоть раз пытавшемуся изобразить на листе бумаги нечто в трех измерениях, известно, что искомый эффект получается путем соответствующих проекций характерных линий объекта на плоскость и использованием плавных цветопереходов (тени). В данном отношении черный экран монитора ничем не отличается от белого листа бумаги. Единственная сложность состоит в том, что анреально квакающий монстрик должен иметь несколько более сложные очертания, чем куб, и быстро перемещаться по экрану, желательно интенсивно размахивая несколькими конечностями. Причем большинству монстров присущ инстинкт коллективизма, — стадами любят ходить. С этой, кок оказалось, достаточно нетривиальной задачей любимый “писюк” справляется следующим образом. Собственно “третий D” (D от Dimension — “измерение”) объекта непростой формы получают путем создания его полигональной модели. В ней поверхность подопытного разбивается на многоугольники (Poligons), путем сопряжения которых и вырисовывается каркас объекта, от тиранозавра до хлопка взрыва. Вообще говоря, “многоугольник” — это слишком громко сказано. В подавляющем большинстве случаев за основу берут всего лишь треугольники (достигается максимально возможная стандартизация обработки разнообразных каркасов).
За создание каркаса отвечает центральный процессор: он вычисляет вершины треугольников, а затем соединяет их прямыми отрезками. Расчет производится от точки зрения наблюдателя, которая не всегда совпадает с центром экрана. От размера стороны треугольника зависит и точность, реалистичность прорисовки элемента сцены. Перемещение любого объекта осуществляется путем переопределения координат вершин. Эта операция требует огромных вычислительных ресурсов процессора: чем более реальное пытаемся получить изображение, тем больше точек приходится рассчитывать. Все такие расчеты выполняются над действительными число-ми (числами с плавающей точкой) в специальном блоке процессора — FPU (Floating Point Unit). Именно от производительности этого блока в основном зависит скорость прорисовки объекта.
Поскольку за зрелища народ платит довольно охотно, фирмы-разработчики процессоров именно в этой области особо рекламируют достоинства своих детищ. Сегодня реально существует лишь одна технология, разработанная с предельным вниманием к проблеме вычислений для 3D— 30now! от AMD. Intel пока только усиленно анонсирует процессор с подобной технологией — Katmai. Однако процессоры Pentium изначально превосходили своих конкурентов в области “плавающих” вычислений, что позволяет им прекрасно справляться со всеми расчетами.
Чтобы король не был голым
Однако “проволочные” герои в “проволочной” обстановке создают некоторые неудобства при стрельбе. Можно долго и уверенно изничтожать безобидное самодвижущееся дерево, в то время как нечто тихо подкрадется и откушает подствольный гранатомет. Это в лучшем случае. В худшем — просто откушает. Ну а если мишень выбрана правильно, то гораздо приятнее наблюдать действенность своего огня не в виде отлетающих треугольников, а в виде зелено-кровавых частей чуда-юда. Именно для достижения подобных спецэффектов первоначальный каркас покрывается особыми рисунками — текстурами. Сама процедура нанесения называется Texture Mopping.
Вообще говоря, с этой операцией справился бы и процессор, но ему пришлось бы работать весьма долго. Во-первых, хорошие текстуры занимают достаточно много места в памяти, а во-вторых, собственно их нанесение связано с большими объемами специфических вычислений. Для ускорения этой процедуры созданы специальные ЗD-ускорители (акселераторы), которые могут хранить текстуры в своей собственной памяти, а все вычисления реализуются особой микросхемой (такой здоровенный чип, делающий всего несколько операций, но очень быстро, почему и нагревается).
Собственно на уровне текстур и начинается самое интересное в трехмерной графике: к текстурам применяются различные эффекты для увеличения степени реалистичности изображения.
Эффекты
Наверное, одним из самых важных эффектов является возможность реакции объекта на источники света (с учетом точки расположения наблюдателя). За освещенность отвечают сразу несколько эффектов, имеющих собственные названия.
Расчет тени — Shading — возможен как применительно к площади, так и для каждой вершины отдельно. Последний вариант, естественно, при больших затратах ресурсов дает лучшие результаты. Собственно “тень” получается путем изменения яркости цвета. При повершинном ее расчете цветопереходы будут более плавными.
Однако поверхности в реальной жизни не только поглощают свет, создавая тени, но и отражают его, блестят. В 3D аналогичного результата достигают при помощи эффекта Environment Mapping. Перемещение затененных и блестящих участков по поверхности объекта позволяет создать более реалистичное изображение движения. Поскольку определенный “блеск” может соответствовать каждой текстуре, то комбинирование таких текстур создаст еще более впечатляющие эффекты.
Для придания изображению поверхности объекта рельефности, используют эффект Bump Mapping. Его сущность заключается в вычислении для точек поверхности значений их углубления/выпуклости относительно общего уровня. При расчете освещенности после этого эффекта выступающие точки получаются более ярким цветом, а во впадинах, соответственно, более темными. Добавление каждой точке дополнительного признака при вычислениях достаточно сильно их замедляет.
За влияние источников света