Еженедельник Свет в Интернет

Главная

Новости

Статьи и обзоры
  Горожанин
  Обнинск в Internet
  Web Design
  Hardware
  Software
  Безопасность
  Серфинг
  Игродром
  Relax
  Технологии
  Web-обзор
  Интернет-ликбез
  Опросник
  УП-Технологии
  ART.net

Ссылки

Архив

О нас

Контакты

Форумы


Основатель:
К.Николаенко

Главный Редактор:
С.Коротков

Web Design:
Neutron


Наш спонсор






Порт POPULAR.RU
POPULAR.RU RegionalBanner Network.






Океан


НПП Метра - промышленные электронные автомобильные вагонные весы
Goldy Interior - салон офисной мебели: кабинеты руководителей, мебель для персонала

= Hardware =

Алексей Чигирев aka Hard

#10(83)/ 05.03.2002

3D-ГРАФИКА: ПРОШЛОЕ, НАСТОЯЩЕЕ И БУДУЩЕЕ

 

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

С момента своего рождения в далеких 70-х одной из задач персонального компьютера было всяческое увеселение пользователя. В самом начале компьютеры справлялись с ней посредством простейших игр вроде Арканоида, Диггера и разных текстовых квестов. Но пользователь хотел, как можно точнее приблизить действие игр к реальности. Прогресс тоже не стоял на месте, и так появились первые игры из абсолютно нового для того времени жанра 3d-action games (сегодня более известен как FPS – First Person Shooter): Wolfenstein 3D, Corridor-VII, DooM... Трехмерными те игры можно было назвать лишь условно – на самом деле ничего общего с тем, что мы видим своими глазами в окружающем мире, в них не было. Но были известны способы достижения хотя бы малейшего сходства – и все они требовали немало аппаратных ресурсов, которые во времена засилья 386-ых машин казались лишь мечтой. С приходом 486 появилась первая игра, которая действительно погружала игрока в свой мир – это был Quake от IDSoftware. Это была первая игра, в которой использовался метод т.н. векторной графики – т.е. когда все объекты формируются из огромного числа цветных треугольников (полигонов) и программой задаются лишь их координаты в пространстве и цвет. Такой способ представления трехмерных объектов позволял поднимать качество картинки и скорость вывода кадров (fps – frames per second) прямо пропорционально мощности компьютера. Это очень быстро поняла неизвестная до тех пор (1996г.) фирма 3Dfx Interactive, занимавшаяся разработкой и производством графических чипсетов для Вооруженных Сил США и игровых автоматов – она выпустила легендарный чипсет Voodoo с собственным 3D API (Application Programming Interface) – Glide (для тех, кто не знает, что такое 3D API – см. №61, 63). Чипсет состоял из двух дискретных (раздельных) процессоров – PMU (Pixel Mapping Unit - пиксельный блок) и TMU (Texture Mapping Unit - текстурный блок); каждый со своей памятью (по 2Мб на процессор). Voodoo предназначался для компьютеров на базе процессора Pentium (и лучше). Карты на базе Voodoo выпустили Diamond Multimedia (Monster 3D), Creative Technologies, Canopus, Quantum 3D и многие другие. С прихода Voodoo принято вести историю 3D-графики на персональных компьютерах. Теперь немного отвлечемся от практики и перейдем к теории. Большинство игр, а также множество более серьезных приложений следуют довольно стандартной схеме построения трехмерных изображений (далее мы будем называть этот процесс конвейером). Причем некоторые программы реализуют все стадии этого конвейера, некоторые же перекладывают часть работы на плечи аппаратных устройств, специальных библиотек программ, другие программы или даже на пользователя. Итак, конвейер состоит из следующих стадий:

    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) – обработка всей результирующей картинки как единого целого какими-либо двумерными эффектами.

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

Copyright © Свет в Internet   Designed by Свет в Internet