Ликбез по 3D

 

Илья Башкиров (ivb)

Всеволод Медведев (ScorpionVM)

5.08.2005

 

 

- Мам, а мам! А кто победит: слон или танк?
- О-о-о!!! Не могу больше!!!
(из воспоминаний родителей)

 

Часть первая - практическая.

 

Предисловие.

 

Будем исходить из того, что у вас либо нет видеокарты, либо вы собираетесь купить новую. Тогда последовательность действий будет примерно такая:

  • посмотреть характеристики разных карт в магазинах, прочитать обзоры сайтов и журналов, которым вы доверяете, сделать выбор;
  • купить карту, установить;
  • настроить видеокарту - советую скачать помощь к программе ATI Tray Tools Рея Адамса (Ray Adams). Там всё очень хорошо написано. А программа - из класса must have (должна быть).

Когда-то при покупке своего первого Voodoo я был просто ошарашен совершенно непонятной информацией по видеокартам (тогда они назывались видеоакселераторами) и по 3D. И купил её, в конце концов, просто по совету друзей, о чём никогда не жалел. Свою же первую карту от ATI (Radeon 8500) я покупал уже сознательно, зная, что от неё ждать, а чего - не стоит. В этой статье я попытаюсь решить нелёгкую задачу - помочь ничего не смыслящим в современных видеокартах людям сделать свой правильный выбор между ATI и ATI . Обсуждаться будут только новые платы (начиная с 2004 года).

Материал будет строиться от простого к сложному. Вы всегда сможете дойти до любой страницы, закрыть ее и побежать в магазин. А можете дочитать до конца, тогда и в конференции "не ударите в грязь лицом", и в компании не будете молчать с глубокомысленным видом.

Ну-с, приступим. (И зачем я за это взялся?..)

Когда вы исследуете прайс-листы магазинов, то видите примерно следующее:

 

Графический чип ATI Radeon X800 XT.

Сам чип представляет собой небольшую по размерам микросхему, расположенную на видеоплате. Однако именно в чипе GPU (Graphic Processor Unit) заложены все инструменты для работы с графикой и её вывода на экран, поэтому при выборе видеокарты на название чипа стоит обратить первостепенное внимание. Если выбор чипа вы решили начать с просмотра его спецификаций, тогда вам сюда. Можно задать вопрос в конференции: "У меня такой-то компьютер (подробно!), чего бы мне купить?". Можно почитать какой-нибудь популярный журнал, там обычно пишут просто: "вот это - круто потому, что круто". В любом случае, подумайте, потянет ли ваша нынешняя конфигурация, включая блок питания, новую видеокарту, и на какой промежуток времени вы собираетесь купить видеокарту. А ещё лучше - дочитайте эту статью до конца, это избавит вас в конференции от постоянных посылов в FAQ.

 

Память Samsung.

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

 

Частота чипа / памяти: 500 МГц / 1000 МГц.

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

 

Объём и тип памяти 256 МБ GDDR3.

С объёмом всё просто. Он показывает, какое максимальное количество информации может одновременно находиться в видеопамяти. Для большинства современных игрушек вполне хватает 128 МБ, хотя очень скоро необходимым минимумом станет 256 МБ. Самые современные карты несут на себе 512 МБ, что означает скорее задел на далёкое будущее, нежели жизненную необходимость.

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

Заметим, однако, что в данном случае (когда мы делали вычисления, опираясь на время доступа) речь шла о максимальных теоретических частотах. Реальная же частота (то есть фактическая), как правило, занижена относительно максимальной теоретической для обеспечения стабильной работы. То же самое касается частоты чипа. Отсюда вытекает понятие разгонного потенциала - то есть такой величины, которая показывает, на сколько МГц можно поднять ту или иную частоту при сохранении стабильности системы. Процесс повышения частот называется разгоном (Overclocking). Отметим, что максимальная теоретическая частота нужна лишь для приблизительной оценки разгонного потенциала, поэтому под частотами везде далее мы будем понимать именно фактические частоты. Подробности вы можете узнать, прочитав FAQ по разгону.

На современных видеокартах используется в основном память DDR, хотя в последнее время всё большую силу набирает GDDR3, которую отличают меньшее энергопотребление (и, следовательно, меньшее тепловыделение) и несколько меньшая скорость работы при равных частотах (однако следует помнить, что максимальная теоретическая частота у GDDR3 обычно выше). Проще говоря, тип памяти - это не тот параметр, на который нужно обращать внимание. Гораздо важнее знать реальную частоту, установленную производителем (в нашем случае: действительная - 500 МГц, эффективная - 1000 МГц, что суть одно и то же), и время доступа, если планируется разгон.

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

 

Разрядность шины памяти 256 бит.

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

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

 

Внешняя шина AGP 3.0.

Внешняя шина соединяет видеокарту с чипсетом материнской платы. Когда-то для этих нужд годилась шина PCI, а вплоть до недавнего времени единственным приемлемым вариантом было её дальнейшее развитие - шина AGP (Accelerated Graphics Port). Однако сравнительно недавно появилась альтернатива в лице новой шины PCI-Express с гораздо более высокой пропускной способностью, которая хоть и не востребована сегодня, но рано или поздно может пригодиться. Видеокарту AGP нельзя вставить в материнскую плату с PCI-Express и наоборот, хотя в некоторых случаях могут помочь переходники. Более того, спустя какое-то время производители перестанут выпускать AGP-совместимую продукцию. Поэтому, если вы не хотите менять компьютер целиком через год-два, вам лучше взять видеокарту с PCI-Express (не забудьте, что в этом случае у вас должна быть поддерживающая этот формат материнская плата!).

 

Режим передачи данных AGP 8x.

Влияет на максимальную пропускную способность шины AGP (8x означает наибольшую из всех возможных для AGP). Если берёте AGP-карту от 2004 года и позднее, то, скорее всего, она поддерживает режим 8х. Даже если в ходе работы вам пришлось понизить его до 4x или 2x, не отчаивайтесь - это вряд ли сильно скажется на производительности (хотя чем мощнее карта, тем вероятнее снижение скорости работы в этом случае).

 

Частота RAMDAC 400 МГц.

Блок RAMDAC (Random Access Memory Digital to Analog Converter) находится в видеочипе и представляет собой цифро-аналоговый преобразователь с буфером памяти. Проще говоря, он нужен для передачи данных о цвете каждого пикселя изображения на экран в аналоговой форме. Чем больше частота, тем больше пикселей в единицу времени способен обрабатывать этот блок. У всех современных видеокарт частота RAMDAC более чем достаточная.

 

Максимальное разрешение 2048 x 1536 / 85 Гц.

Здесь можете не задумываться. У карт от ATI этот параметр всегда на высоте, поэтому всё зависит от возможностей вашего монитора.

 

Охлаждение.

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

 

Дополнительные функции ТВ вход/выход (S-Video), DVI.

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

 

Если же вы смотрите таблицы сравнительных характеристик в журналах, то выглядит это примерно так (взято с сайта ixbt.com):

 

Кодовое имя чипа R420.

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

 

Технология 130 нм (TSMC, low-k, медные соединения).

TSMC (Taiwan Semiconductor Manufacturing Co.) - изготовитель чипа. Нам это тоже до лампочки - хороший изготовитель, да и только.

130 нм - технологический процесс, по которому изготовлен видеочип. Чем меньше это число, тем (теоретически) ниже энергопотребление и тепловыделение.

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

медные соединения - надеюсь, вы в курсе, чем медные провода лучше алюминиевых .

 

Количество транзисторов 180 миллионов.

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

 

Корпус чипа FC.

Интересует только отсутствие крышки, на случай если вздумаете отдирать радиатор . Тип FC подразумевает как раз отсутствие металлической крышки - в случае с таким корпусом нужно действовать очень аккуратно, чтобы не повредить чип.

 

16 пиксельных процессоров, по одному текстурному блоку на каждом.

Пиксельные процессоры, или конвейеры. Для построения трёхмерного изображения надо сделать кучу дел: разобраться, какие объекты вообще должны присутствовать в сцене, расставить точки, которые задают каждый из этих объектов, построить по этим точкам грани, заполнить грани текстурами (что это такое, вы можете узнать из второй части статьи) в соответствии с освещением... Чем тщательнее мы сделаем все эти расчёты, тем реалистичнее получится итоговая картинка. Уже давно стало ясно, что все эти вещи, во-первых, не мешает разбить по стадиям, а во-вторых, можно и нужно распараллелить, то есть заставить работать одновременно. Что касается стадий, каждый пиксельный конвейер занимается тем, что готовит очередной пиксель конечного изображения, продумывая и вырисовывая кусочек текстуры, который попал в кадр, с учётом многих факторов, включая освещение сцены. А чтобы всё это дело шло быстрее, работу поручают сразу нескольким конвейерам. Тогда первый конвейер будет готовить 1-ый, затем 17-ый, затем 33-ий пиксель, и так далее; второй конвейер - 2-ой, 18-ый и 34-ый соответственно (рассматривается случай, когда имеются именно 16 конвейеров)...

 

6 вершинных процессоров.

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

 

Вычисление, блендинг и запись до 16 полных (цвет, глубина, буфер шаблонов) пикселей за такт. Вычисление и запись до 32 значений глубины и буфера шаблонов за такт.

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

 

Анизотропная фильтрация степени до 16х включительно.

Одна из функций, позволяющая улучшить качество отображения текстур. Подробнее - во второй части.

 

Всё необходимое для поддержки пиксельных и вершинных шейдеров версии 2.0.

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

 

Новая техника сжатия текстур, оптимизированная для сжатия двухкомпонентных карт нормалей (т.н. 3Dc, степень сжатия 4:1).

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

 

Поддерживается рендеринг в буфера плавающего формата, с точностью FP16 и FP32 на компоненту. Поддерживаются трёхмерные и FP (плавающие) форматы текстур MRT.

Эти пункты без знания теории не стоит читать вообще.

 

2 RAMDAC 400 МГц.

Двойка говорит о возможности вывода сразу на два монитора с разным разрешением.

 

2 интерфейса DVI.

DVI (точнее, DVI-D) - это интерфейс для прямого подключения видеокарты к монитору, минуя RAMDAC. На видеокартах Radeon обычно устанавливают выводы DVI-I, что означает возможность не только цифрового, но и аналогового подключения через DVI. Два цифровых разъёма дают возможность вывода изображения на два жидкокристаллических монитора одновременно.

 

Интерфейсы TV-Out и TV-In.

Что касается TV-Out, он присутствует практически на всех современных картах. А вот для TV-In на видеоплате должен быть установлен специальный чип. Видеокарты ATI, несущие на себе такой чип, относятся к семействам VIVO и AIW. Для выяснения подробностей читайте этот FAQ.

 

Возможность программируемой обработки видео.

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

 

2D ускоритель с поддержкой всех функций GDI+.

Поддержка всех актуальных на данный момент функций двухмерной графики.

 

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

 

Часть вторая - теоретическая. Принципы построения трёхмерного изображения
в теории и на практике.

 

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

 

Для начала давайте выясним, что заставляет нас видеть объект трёхмерным.

  • Форма объекта. Если у объекта есть хотя бы две стороны, то мы уже по опыту знаем, что он может быть трёхмерен. Даже пирамида, нарисованная двумя треугольниками, кажется нам объёмной (трёхмерной), потому что мы знаем, что это - схематичное изображение пирамиды.

     

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

     

  • Перспектива. Если предмет объёмен (например, бревно, лежащее на земле), то его сужение к дальнему концу тоже воспринимается нашим глазом как трёхмерность.

     

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

 

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

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

 

Для создания трёхмерной модели сначала делается каркас из линий (рёбер), а вернее сказать - из нарисованных этими линиями многоугольников. Легче всего программно описывать треугольник, так как у него всего три вершины, которые однозначно задают его расположение в пространстве, к тому же он всегда плоский. Из школьного курса геометрии известно, что любой многоугольник можно разбить на треугольники. Следовательно, склеивая треугольники по одной или нескольким сторонам, можно получать всё более сложные формы. Например, квадрат получается объединением двух одинаковых равнобедренных прямоугольных треугольников в одной плоскости по гипотенузам. Но если мы склеим два таких же треугольника, расположенных в наклонённых друг к другу под углом в 30 градусов плоскостях, то получим как бы сломанный по диагонали квадрат. Давайте теперь подумаем, что будет, если задать эту форму просто четырьмя точками (которые также называются вершинами). Дело в том, что по этим четырём точкам можно будет построить уже два других треугольника, которые по-прежнему будут удовлетворять всем нашим правилам. Но форма получится другая - квадрат, изломанный по совершенно другой диагонали. Именно поэтому за основу формы в 3D-графике выбран треугольник.

Теперь, когда у нас есть поверхность, составленная из нескольких треугольников, мы можем сказать, что каждый такой треугольник отныне является гранью. Рисовать её пока не будем, но поставим нормаль - метку, которая будет говорить, с какой именно стороны этот треугольник должен быть виден. Компьютер понимает грань именно как односторонний объект. Если же мы захотим поставить сразу две нормали, то на самом деле будет создано сразу две грани, у которых одни и те же вершины, но видны они с разных точек обзора. Получившуюся поверхность назовём полигоном. Естественно, полигон может лежать в одной плоскости, а может и не лежать, то есть быть истинно "трёхмерным" .

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

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

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

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

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

То, как именно ложится свет на объект, зависит от типа освещения и от модели затенения (Shading Model). Понятие типа освещения включает в себя понятия типа источников света (статические или динамические, всенаправленные или сходящихся/расходящихся лучей) и модели освещённости (локальная или глобальная, с учётом вторичных отражений лучей в диффузной области или без).

Что же касается моделей затенения - именно благодаря этой технологии мы видим поверхности даже низкой детализации сглаженными (Smooth Shading), а не гранёными (Flat Shading). Главная причина необходимости продолжать увеличение детализации заключается в том, что модели затенения не изменяют формы объекта, поэтому его контур всё равно остаётся угловатым. Правила расположения зеркального блика также определяются моделью затенения, или, как ещё говорят, тонирования (Smooth+Highlights Shading). В основе тонирования со сглаживанием лежит модель затенения Гуро (по фамилии автора - Henry Gauround'а, который придумал её в далёком 1971 году). Суть последней состоит в том, что для расчёта освещённости в каждой вершине используется особая нормаль, полученная интерполяцией (хитрым усреднением) нормалей всех смежных с ней полигонов, благодаря чему переход между гранями, расположенными под тупым (или около того) углом, получается очень гладкий.

 

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

 

Помните, в начале мы говорили про разгрузку процессора? Так вот, какую сцену игры сейчас представлять (какие объекты и с какой точки) решает процессор, а не видеокарта. Он - главный режиссёр, а видеокарта - его правая рука и преданный помощник. Именно от центрального процессора видеокарта получает нужные данные для последующей обработки.

Процесс построения трёхмерного изображения вплоть до забрасывания его в память и вывода в аналоговой (RAMDAC) или цифровой (TMDS) форме организован поэтапно, в виде одного длинного конвейера, где каждая фаза - это отдельный этап создания изображения. Для того чтобы обеспечить непрерывный поток уже готовых к показу изображений, на выходе организован буфер кадров (Frame Buffer), где они могут находиться некоторое время.

 

А что же делает наш конвейер? Ведь именно в нём заключена вся суть! Рассмотрим последовательно ход его работы.

 

  • Первый этап - опциональный. Дело в том, что работать с геометрией можно не только на уровне вершин и граней. Можно придумать нечто, что будет служить вспомогательным уровнем. Одним из таких уровней являются нормали, но уже не те, что есть у каждого полигона, а особенные. Общая идея примерно такая: каждой группе вершин назначается одна ключевая вершина, в которой и устанавливается нормаль. Самих вершин пока ещё не существует. Видеокарта получает от процессора данные об этих ключевых вершинах с нормалями и разбивает каждый ключевой треугольник на кучу мелких треугольников. Однако управление ими осуществляется через нормали. Скажем, нормаль показывает небольшое поднятие. Чем ближе вершина к нормали, тем сильнее окажется это воздействие (поднятие по направлению нормали) на неё. В нашем случае, группа вершин будет приподнята в виде гладкой горки, а не острого угла, при этом производительность будет гораздо выше, чем если бы пришлось обсчитывать абсолютно все вершины "вручную". Такой процесс разбиения зовётся тесселяцией. Именно эту концепцию ATI издавна пыталась реализовать в своих чипах под интригующим названием TruForm, однако, начиная с серий Radeon 9500/9700, аппаратной поддержки данной технологии видеокарты ATI не имеют.

     

  • Второй этап - один из самых важных, а потому обязательный. Забудем теперь про TruForm и представим, что данные о вершинах поступают на вершинные конвейеры (Vertex Pipelines), которые приступают к их обработке. Здесь начинает свою работу так называемый блок T&L (Transform & Lighting), который отвечает за некоторые аспекты работы с геометрией и за освещение и работает в паре с конвейерами. Важно знать, что именно программа управления вершинным конвейером (в последнее время принято говорить не "вершинный/пиксельный конвейер", а " вершинный/пиксельный процессор", ввиду его дикой сложности) зовётся вершинным шейдером (Vertex Shader).

     

  • На третьем этапе выполняются разного рода оптимизации, призванные повысить производительность. В частности, отбрасываются как "недостойные" грани, повёрнутые к нам... задом, то есть тем местом, которое нельзя увидеть (вы ведь не забыли про нормали?). Но это ещё не всё. Помогает нам еще одна популярная технология, которая называется у ATI как HyperZ и использует особую область в памяти - Z-буфер (Z-Buffer), он же буфер глубины. Замечателен Z-буфер тем, что хранит сведения о глубине наших объектов, то есть данные об удалённости их от точки наблюдения по третьей оси. Специальная программа откладывает в него данные, которые говорят видеокарте: "С этой точки, с таким-то окном в мир, вот этот объект вот здесь будет перекрывать этот вот тут. Поэтому вот такой-то треугольник "вот тут" рассчитывать не надо". На самом деле, технология у ATI ещё более дотошная - даже если только часть грани оказалась скрытой от наших глаз, рисовать её чип уже не будет. Ленивый он . Немалые усилия разработчиков чипов были направлены на то, чтобы сделать информацию, хранящуюся в буфере, очень компактной.

 

Итак, после этих трёх основных (есть и другие ) этапов оценку геометрии можно считать завершённой. Начинается так называемая растеризация.

 

  • Этап четвёртый, подготовительный. Графический чип начинает вспоминать, какие именно треугольники где именно расположены. Скучно.

     

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

 

На самом деле, "знания" шейдеров определяются существующими стандартами в построении трёхмерного изображения. Программист обращается к системе через так называемые API - Application Programming Interface - программные интерфейсы приложения. Самые распространенные графические API на сегодняшний день - Direct3D и OpenGL, среди умирающих - некогда знаменитый Glide3D. В API описаны стандарты, которые являются "де-факто" для системы. Программа (игра) вызывает определенную стандартную функцию, а шейдеры эту функцию выполняют.

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

 

Маленькое отступление. Надеюсь, из вышеизложенного уже ясно: чем больше у нас конвейеров, тем быстрее будет происходить обработка изображения. А, следовательно, тем более качественную обработку в единицу времени мы можем себе позволить. Отсюда становятся понятными фразы: "Так у этой карты всего 12 конвейеров, а у этой - 16!". (Вполне естественно, что большее внимание уделяется именно пиксельным конвейерам, а не вершинным.)

 

  • Этап шестой, последний. Картинка украшается некоторыми дополнительными эффектами (классический пример - туманом ) и попадает в буфер кадров. Что с нею будет дальше, мы уже знаем.

 

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

 

Что касается фильтрации текстур, то здесь всё не так просто. Во-первых, нужно знать, что при текстурировании однородной поверхности чаще всего используется не одна и даже не две текстуры. Помните, мы говорили про перспективу, бревно и удалённость от камеры наблюдения? Так вот, если попытаться "одеть" бревно в одну и ту же текстуру по всей длине, на дальних участках может проявиться рябь или просто один сплошной цвет, который, по идее, должен был быть в меньшинстве. Дело в том, что в этой ситуации сразу несколько пикселей текстуры попадает в один пиксель на мониторе. Если видеокарта сделает выбор в пользу какого-то одного пикселя текстуры, то вполне вероятно, что он окажется весьма не кстати. А если будет выбрана сразу группа таких непутёвых пикселей, мы получим названные проблемы.

Чтобы понять, как была решена вышеописанная проблема, рассмотрим подробнее методы наложения текстур. В основе любого метода лежит MIP-Mapping - технология, которая на базе каждой текстуры создаёт целый набор текстур. Первой в этом наборе является первоначальная текстура, а каждой следующей - копия предыдущей, но уже меньшего качества (разрешения). Текстуры такого набора называются MIP-картами (MIP-Map).

Самый простой метод наложения текстуры - Linear - определяет для каждого пикселя изображения соответствующую ему MIP-карту; из этой карты, согласно таблице соответствий LOD (Level Of Detail), выбирается только один тексель (пиксель карты), который присваивается нашему пикселю. Соответствие карты участку (группе пикселей) определяется удалённостью этого участка - чем дальше он расположен, тем менее детализированную карту получит. Разумеется, такой подход нас не устраивает, так как приходится искать строгое соответствие между одним пикселем и одним текселем.

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

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

Самая качественная, анизотропная фильтрация (Anisotropic Filtering, AF), основана на билинейной или трилинейной фильтрации и работает путём многократного (зависит от степени AF) применения одной из них с последующим усреднением значений.

 

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

Видеокарты последних лет используют два метода для решения этой задачи. Первый, Super-Sampling Antialiasing (SSAA), царствовал на видеокартах c чипами ATI до тех пор, пока не появился Radeon 9700. Действовал этот метод "в лоб": увеличивал внутреннее разрешение сцены до величины, кратной разрешению экрана (и зависимой от выбранной степени сглаживания) и выполнял рендеринг в этом гигантском разрешении (отметим, что каждый пиксель такого огромного полотна называется субпикселем). Потом из каждой группы субпикселей получался один пиксель итогового изображения, и мы могли наслаждаться несколько размытой картинкой, на которую потратили к тому же кучу времени.

Второй, более прогрессивный метод, появился в продукции ATI с приходом графического чипа R300 (Radeon 9700). Звать его стали Multi-Sampling Antialiasing (MSAA). Основные отличия MSAA от SSAA заключаются в том, что, во-первых, вычисления проводятся только для пикселей, находящихся на границах граней, то есть как раз там, где сглаживание необходимо. Более того, для каждого субпикселя сначала просчитываются значения глубины (Z), а цветовые значения группы субпикселей в рамках одного пикселя просчитываются только в том случае, когда их значения Z различаются. Во-вторых, расположение субпикселей стало более хитрым - традиционную решётку из вертикальных и горизонтальных линий, вдоль которых располагаются субпиксели, сменила более сложная решётка, где все эти линии немного наклонены. Такое изменение позволило эффективнее обрабатывать самые проблемные, с точки зрения SSAA, границы, а именно - немного отклоняющиеся от вертикали или горизонтали. Все эти оптимизации сделали сглаживание более быстрым и качественным, доступным даже на достаточно слабых видеокартах.

 

В заключение хочется отметить, что работы над улучшением качества изображения не прекращаются. Не так давно появившийся Catalyst A.I. призван улучшить и ускорить фильтрацию; родившийся вместе с серией X800 Temporal AA должен обеспечить новые уровни сглаживания; свежая технология 3Dc неплохо справляется со сжатием карт нормалей. Ну и не будем забывать про такие неизменные вещи, как обновление шейдеров. Со временем количество новых улучшений переходит в качество 3D-изображения на экране. Нам остаётся смотреть и восхищаться.

 

Часть последняя - всё по-новому, по-быстрому, но уже осмысленно.

 

Итак, заведует всем центральный процессор, он рассказывает видеокарте, что и как строить. Посему, если у вас слабый процессор и сильная видеокарта, то последняя будет пребывать в вечной тоске, ожидая новых распоряжений. Если же наоборот, то процессор "закидает" ваш акселератор заданиями и тот начнёт тормозить. Также в этом процессе участвует оперативная память, так что не следует забывать и про неё. Помните: чем ниже задержки памяти при данной частоте, тем лучше. Все эти "работнички" обмениваются данными через материнскую плату, поэтому, чем выше частота работы её главного чипсета, тем лучше.

 

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

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

  • разрядность шины - 128 бит, но лучше всё-таки 256 бит;
  • пиксельных конвейеров - 8;
  • объём памяти - 128 МБ, но лучше 256 МБ;
  • шейдеры - не ниже 2-ой версии, желательно 3-ей;
  • остальное - по вкусу.

Та-ак, а теперь смотрим на свою систему... а теперь - на цены в прайс-листах на Х800 и быстрее...

Чтобы не заканчивать на грустной ноте, перефразируем известный анекдот:
   - Папа, ты теперь будешь меньше апгрейдиться?
   - Нет, вы теперь будете меньше кушать!

Если же вы всё-таки решили сделать апгрейд, то знайте, что на форуме Radeon2.ru вам всегда помогут.

 

 

Спасибо команде Radeon.ru.


Благодарности:

Игорю Лагунову (Buntar)

Артёму Хаймёнову (ArtLonger)

Игорю Илларионову (NEW)

 


 

 

 

Верстка:
Александр Ефимов (IdeaFix)

На главную страницу

Главная | Справочник | FAQ | Статьи | Загрузки | Контакты | Конференция

Логотипы, торговые марки и прочие зарегистрированные знаки принадлежат их правообладателям.
Copyright © 2001 - 2016, Radeon.ru Team.
Перепечатка материалов запрещена.

Рейтинг@Mail.ru Rambler's Top100