2.   Как придать реалистичность объекту

2.1. Создание формы.

2.2. Поверхностные текстуры (surface textures).

2.3.  Освещение.

2.4.  Перспектива.

2.5.  Глубина резкости.

2.6.  Сглаживание (anti-aliasing).

2.7.  Сколько кадров в секунду?

2.8.  Создавая "размазывание".

2.9.   Реализация движения.

2.10.    Трансформация.

2.11.    Критерии скорости.

2.12.    Критерии качества.

         2.13.    Перспективы развития графики в играх.

Как заставить это выглядеть настоящим?

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

Прежде чем изображение станет реалистичным, объекты проходят несколько стадий обработки. Самые важные стадии это создание формы (shape), обтягивание текстурами, освещение, создание перспективы, глубины резкости (depth of field) и сглаживания (anti-aliasing).

Создание формы.

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


Каркас руки, изготовленный из малого количества полигонов - всего 862
На иллюстрации показан каркас руки, изготовленный из малого количества полигонов - всего 862


Здесь замыкающие объект линии выглядят более естественными и закругленными. Но это требует большего количества полигонов: уже 3444
Здесь замыкающие объект линии выглядят более
естественными и закругленными. Но это требует большего
количества полигонов: уже 3444.

Поверхностные текстуры (surface textures).

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

Цвет: Какого поверхность цвета? Однородно ли она окрашена?

Текстура: Ровная ли поверхность или на ней есть вмятины, бугры, рихтовка или что-то подобное?

Отражающая способность: Отражает ли поверхность свет? Четкие ли отражения или они размазаны?

Один из способов придания "реальности" объекту и состоит в подборе комбинации этих трех составляющих в различных частях изображения. Посмотрим вокруг себя:  компьютерная клавиатура имеет отличающийся цвет/текстуру/отражающую способность от стола, который в свою очередь отличается цветом/текстурой/отражающей способностью от  руки. Для того чтобы цвет изображения был похож на настоящий, важно чтобы компьютер мог выбирать цвет пикселя из палитры в миллионы различных цветов. Разнообразие текстур зависит как от математической модели поверхности (от кожи лягушки до желеобразного материала) так и от карт текстур (texture maps), которые накладываются на поверхности. Также необходимо заложить в объекты те качества, которые нельзя увидеть: мягкость и твердость, теплоту и холод с помощью различных комбинаций цвета, текстуры и отражающей способности. Если ошибиться хотя бы в одном из этих параметров, ощущение реальности мгновенно рассеется.


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

Освещение.

Когда вы входите в темную комнату, вы включаете свет. Вы не задумываетесь, как же свет, выходя из лампочки, распределяется по всей комнате. Но при разработке 3D графики необходимо постоянно это учитывать, потому что все поверхности, окружающие каркас, должны быть откуда-нибудь освещены. Один метод, называемый методом бегущего луча (ray-tracing), вычерчивает путь, который воображаемый луч пройдет после выхода из лампы, отражения от зеркальных поверхностей и который, в конце концов, закончится на предмете. Луч осветит его с различной интенсивностью под различными углами. Метод кажется достаточно сложным даже при построении лучей от одной лампы, но в большинстве комнат существует множество источников света: несколько ламп, окон, свечей и т.д.

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


Подсветка изображения не только добавляет глубину объекту через затенение, но и 'привязывает' объект к земле посредством тени
 Подсветка изображения не только добавляет глубину объекту через затенение, но и "привязывает" объект к земле посредством тени.
 

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

Перспектива.

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


Пример перспективы: точка исчезновения

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

Z-буфер присваивает каждому полигону номер в зависимости от того, насколько близко к переднему краю сцены располагается объект, содержащий этот полигон. Обычно меньшие номера присваиваются ближайшим к экрану полигонам, а большие номера - полигонам, примыкающим к горизонту. Например, 16-битный Z-буфер присвоит ближайшему к экрану объекту номер -32.768, а самому удаленному - 32.767.

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

Глубина резкости.

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

Вторая причина использования этого эффекта заключается в привлечении  внимания к нужным предметам или актерам. Например, для усиления вашего внимания к герою фильма, режиссер будет использовать эффект малой глубины резкости (shallow depth of field), когда только один актер будет находиться в фокусе. С другой стороны, сцены, которые должны потрясти вас величием природы, используют эффект большой глубины резкости (deep depth of field) чтобы дать как можно больше предметов в фокусе.


Глубина резкости в перспективе

Сглаживание (anti-aliasing).

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


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


Прорисовка серых пикселей вокруг линий несколько их размывает. Эффект помогает убрать
Прорисовка "серых" пикселей вокруг линий
несколько их размывает. Эффект помогает убрать
"лесенки" и делает объект более реалистичным.



 

Сколько кадров в секунду?

Когда человек смотрит фильм, на самом деле он видит последовательность изображений, называемых кадрами, меняющихся с частотой 24 кадра в секунду. Так как сетчатка глаза удерживает изображение чуть дольше 1/24 доли секунды, глаза большинства людей смешивают последовательность кадров в один, непрерывный видеопоток.

Если посмотреть на этот процесс с другой стороны, каждый кадр является фотографией из фильма, снятой с экспозицией 1/24 секунды. Такая экспозиция намного превышает экспозицию обычной фотографии, при которой движущиеся объекты кажутся "застывшими в полете". В результате, если вы посмотрите на кадр фильма, показывающего гонки, вы увидите, что некоторые машины кажутся смазанными (blurred), так как они двигались в то время как затвор камеры был открыт. Это размазывание быстродвижущихся объектов мы и видим в реальной жизни. Поэтому изображение на экране выглядит реальным.

Однако цифровые трехмерные изображения не являются фотографиями, и движущиеся объекты в кадрах не "смазаны". Для придания реалистичности движущимся объектам, программисты специально добавляют "смазывание". Некоторые дизайнеры преодолевают нехватку естественного "смазывания" увеличением числа кадров  с 30 до 60 кадров в секунду. При этом каждый кадр детально прорисовывается, движение показывается через меньшие приращения, но это очень сильно увеличивает количество кадров, которые должны быть прорисованы для какого-либо движения. Например, представьте себе скачки, которые продолжаются шесть с половиной минут. В фильме потребуется 25 (кадра в секунду) x 60 (секунд) x 6,5 (минут) или 9360 кадров для скачек. Цифровая трехмерная графика должна прорисовывать 60 кадров в секунду, что потребует 60x60x6,5 или 23400 кадров для того же отрезка времени.

Создавая "размазывание".

Эффект смазывания, который программисты добавляют для увеличения реализма движущихся изображений, называется "смазывание движения" (motion blur), или "пространственное сглаживание" (spatial anti-aliasing). Если включить мышиный след (mouse trails) в Windows, то можно достаточно грубо представить себе эту технологию. Копии движущегося объекта прорисовываются позади текущего положения. Причем, четкость и интенсивность создаваемых копий уменьшается по мере удаления объекта от них. Длина следа от объекта, скорость "растворения" копий и другие детали могут изменяться в зависимости от скорости движения объекта, расстояния до наблюдателя и фокуса наблюдателя. Как видно, необходимо запрограммировать множество параметров и деталей, прежде чем создать реалистично движущийся объект.

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

Реализация движения.

Все вышесказанное, только усложняет процесс вывода 3D изображения на экран. Постоянное движение сложно реализовать на компьютере.

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

Сегодня, разрешение 1024x768 считается минимальным "высоким разрешением". Это означает что 786.432 элемента изображения, или пикселя, должны быть прорисованы на экране. Если каждый элемент использует 32-битную цветовую палитру, то 25.165.824 бита должны быть обработаны для прорисовки одного изображения. Движение с частотой 60 кадров в секунду требует, чтобы компьютер обрабатывал 1.509.949.440 бит информации в секунду для прорисовки изображений. И это все без учета работы компьютера по наполнению игры содержанием, цветами, формами, освещением и всем тем, что необходимо, чтобы изображение выглядело так, как требуется. Если представить себе весь масштаб вычислений, которые требуется произвести для прорисовки изображения, то можно понять , почему графические карты перетягивают на себя все больше и больше вычислительных задач от центрального процессора. Центральному процессору нужна такая помощь.

Трансформация.

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

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

-X = 758 - высота мира, на который мы смотрим.

-Y = 1024 - ширина мира, на который мы смотрим.

-Z = 2 - глубина (от переднего края до заднего) мира, на который мы смотрим.

-Sx - высота нашего окна в этот мир

-Sy - ширина нашего окна в этот мир

-Sz - значение глубины, которое определяет, какие объекты видны, а какие - закрыты другими объектами.

-D = 0,75 - расстояние между нашими глазами и окном в этот воображаемый мир.

Вначале,  посчитаем размер окон в этот мир.


Формулы - испугаем чайников!!!

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


Формулы - испугаем чайников по-настоящему!!!

Итак, точка (X, Y, Z, 1.0) в трехмерном воображаемом мире изменит свои координаты на (X', Y', Z', W'), что и демонстрируют следующие вычисления.


Формулы - испугаем чайников-3

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

Критерии скорости.

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

В компьютерных играх хорошей считается средняя скорость отображения свыше 50 кадров (экранов) в секунду (Frame per Second, FPS). Однако отдельные кадры могут выпадать из этого ряда. Если при «торможении» скорость падает ниже 25-30 кадров в секунду, отображение считается недостаточно быстрым. Поэтому при оценке возможностей компьютерной системы важно знать не только пиковую среднюю скорость отображения в стандартных трехмерных тестах, но и минимальную в реальных приложениях.

 

Критерии качества.

В зависимости от предназначения программы существенно различаются методы построения трехмерных сцен. В профессиональной rpaфике для дизайна и анимации широко используют объекты, “честно” построенные на основе поверхностей, описываемых сложными математическими формулами; физические модели освещения; технологии " требующие громадных вычислительных ресурсов. Очевидно, что качество представления сцен достигает фотореалистичного уровня. Однако  их обработка занимает значительное время.

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

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

Существует эмпирическое правило, согласно которому при среднем числе 10 000 полигонов в сцене обеспечивается приемлемое по современным меркам качество изображения, 500 000 полигонов обеспечивают качество, близкое к бытовому видео, свыше 1 000 000 полигонов в сцене позволят приблизиться к фотореализму. Например, при разрешении экрана 1600x1200 точек число пикселов в изображении составит 

1 920 000. Очевидно, что если на переднем плане будет находиться около двух миллионов треугольников, в среднем каждый займет пиксел. В этом случае фотореалистичность обеспечена индивидуальной обработкой каждого пиксела. Сегодняшний день в мире компьютерных трехмерных игр — это в среднем 15 000—20 000 полигонов сцене, которые современный 3D-видеоадаптер способен отображать со скоростью 30 и более кадров в секунду. В ближайшие годы ожидаются игры, использующие до 100 000 полигонов в сцене. Нет сомнения, что на наших глазах произойдет и переход к стадии фотореализма.

Перспективы развития графики в играх.

Часть графических адаптеров умеет на аппаратном уровне обраба­тывать гладкие трехмерные поверхности (сплайны), основанные на кривых, задаваемых контрольными точками. Модели, построенные с использованием сплайнов, описываются сравнительно компактным набором формул и не требуют передачи по шине AGP огромного мас­сива геометрических данных. Впервые поддержка гладких трехмер­ных поверхностей (технология получила название Surface Engine) реализована фирмой nVidia в графическом чипсете GeForce3.

Поверхности на основе сплайнов часто называют параметрическими, поскольку их форма определяется параметрами контрольных точек, а изменение параметров приводит и к изменению формы поверхно­сти. Можно встретить и другие названия таких объектов: поверхности Безье (по фамилии французского математика, придумавшего фор­мулы для их описания), поверхности высокого порядка (High Order Surface), би-сплайны (B-Spline), полиномиальные поверхности. В неда­лекой перспективе следует ожидать применения параметрических поверхностей в играх. Внедрение этой технологии станет революци­онным этапом развития компьютерной графики реального времени.

Другим перспективным методом улучшения качества представления объектов является «выдавливание» треугольников в третье измере­ние. Эта технология фирмы ATI получила название TruForm. Ее основ­ное преимущество заключается в совместимости с уже существую­щими программами. Для адаптации игры к требованиям TruForm разработчикам достаточно выпустить небольшое дополнение, разре­шающее графическому адаптеру обрабатывать треугольники в сцене, придавая им выпуклость.

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

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

 

Hosted by uCoz