Видеопроцессор
Многие из вас играли в игры на компьютере, или по крайней видели как за этим, на первый взгляд абсолютно бесполезным занятием,
проводят время другие. Некоторые из вас могли задуматься, а почему эта игра тормозит на моем компьютере, а та нет.
На этом примере я и хочу объяснить принцип работы одной из важнейших частей современного компьютера - ВИДЕОСИСТЕМЫ.
А заодно и рассказать очень интересную и поучительную историю развития массовых (под массовыми мы договоримся понимать рынок видеокарт
для "рядового" пользователя, т.е. предназначенную не для профессионального использования) видеоакселераторов.
Что бы понять строение видеопроцессора (эта формулировка является наиболее корректной, т.к. видеочип является таким же процессором,
как и ЦП, иногда даже более сложным) нужно рассмотреть его работу на конкретном примере.
Любая игра является такой же программой, т.е. представляет собой набор инструкций, как и все остальные.
Сам процесс игры с технической точки зрения представляет собой следующую картину: игрок на экране монитора видит какую-то
динамическую сцену, которая на самом деле является лишь очень быстрым слайд-шоу, т.е. на экране с очень быстрой частотой сменяется набор картинок.
Вот и пора ввести первый термин видеословаря - FPS. Величина, которая показывает, насколько быстро картинка обновляется на мониторе и
называется FPS(Frame Per Second). FPS имеет прямую зависимость от мощности видеокарты и компьютера в целом.
Человеческий глаз не может различить отдельные кадры, если они сменяются более 24 раз в секунду. Из этого следует,
что частота кадров не должна падать ниже 24, в противном случае мы увидим набор кадров. Но в зависимости от сложности сцены частота может падать
в 4-5 раз. Значит, для нормальной игры нужно иметь хотя бы 80-100 FPS, это справедливо лишь для очень динамичных трехмерных игр.
Типичная игрушка последних лет представляет собой сцену из 3-х мерных объектов различной степени сложности, на которые "наклеены кусочки цветов".
Рассмотрим пример с шаром. Компьютер не имеет ни малейшего представления о геометрических фигурах, единственным геометрическим объектом,
с которым на практике работает видеокарта является точка. При построении сцены видеосистема оперирует набором точек.
Именно точка является тем кирпичиком, из которого в последствии строятся все объекты. Эта точка называется пикселем.
Это понятие очень важно для дальнейшего понимания принципов построения изображения и работы видеочипа.
Каждый кадр имеет определенный размер, измеряемый в количестве точек. Разрешение кадра - количество точек по горизонтали на количество точек по вертикали.
Соответственно, чем больше разрешение, тем лучше качество итоговой картинки. Это объясняется очень просто, чем больше точек, тем более детально можно
изобразить требуемый объект.
Правый рисунок имеет разрешение в 3 раза меньше, чем левый.
Но сделать изображение с большим разрешение очень затратно, далее объясню почему.
Разработчику игры непросто оперировать с отдельными точками, поэтому на практике модели строятся из примитивов. Так называют элементарные детали,
из которых и будет состоять нужный нам объект. Примитивом обычно является маленький треугольник или прямоугольник. С их помощью легче работать со сценой.
Шар, представленный выше, состоит из прямоугольников.
Давайте разберемся, как картинка попадает к нам на монитор.
Исходным материалом для построения изображения является данные, содержащиеся на жестком диске компьютера.
Игры, как уже говорилось выше, являются набором инструкций для выполнения видеокартой и процессором, плюс библиотека базовой графики для моделей.
При запуске игра передает данные процессору, а тот уже решает, что и кто будет делать.
Сперва нужно построить каркас объекта. Обычно этим занимается процессор. Объект строится в 3-х мерных координатах.
Когда есть каркас, в дело вступает видеокарта. Рассмотрим этот процесс более детально.
Внутренняя архитектура видеочипа.
Модель объекта, построенная процессором, является лишь скелетом, на который потом натягивается кожа.
Объект подвергается разбиению на участки. В задачу видеокарты входит покраска модели и вывод ее на экран. Каждый участок представляет собой набор
примитивов, которые в свою очередь состоят из пикселей.
Видеопроцессор получает объект от ЦП и помещает его в свою память. Затем вся сцена обрабатывается попиксельно.
Это означает, что видеопроцессор получает на обработку каждую точку отдельно вместе с ее координатами и цветом.
Пришло время разобраться, что же на самом деле является видеочипом. Для правильного понимания работы видеопроцессора
нужно ввести абстракцию и при слове видеочип представлять не маленький кусочек кремния на текстолите, а целый завод.
Работа по разукрашиванию пикселей производится на заводе, который имеет площадь несколько квадратных сантиметров и состоящим
из десятков миллионов транзисторов. На этом заводе есть свой конвейер, на котором и производится "покраска" пикселя в нужный
цвет или оттенок. Современные видеочипы имеют несколько таких конвейеров, для более быстрой обработки изображения.
После того, как пиксель "получил" свой цвет, он отправляется в память. Затем берется следующий пиксель, и т.д. Но бывает так, что помимо основной палитры объект освещается. Тогда необходимо немного осветлить базовый цвет. Это называется наложением карты освещения. Или другая ситуация: нам необходимо изобразить дым, в этом случае пиксель надо сделать немного темнее. Для таких случаев конвейер имеет не одну установку по "покраске" пикселей, а две что бы пиксель поступивший на обработку не пошел на конвейер во второй раз.
Пора ввести еще несколько терминов.
Цвет, который накладывается на пиксель, называется текстурой. А сам процесс накладывания текстуры на пиксель текстурированием.
Установка по покраске, которая находиться на конвейере, называется текстурным блоком.
На рисунке показана часть шара. Вся модель состоит из примитивов, которые при детальном рассмотрении оказываются набором пикселей.
Далее следует описание работы конвейера.
На рисунке схематически изображен конвейер с двумя текстурными блоками. Блок Х окрашивает пиксель в базовый цвет, блок Y осветляет базовую текстуру.
Надо сказать, что современные видеочипы имеют довольно различную архитектуру. Количество конвейеров может отличаться в зависимости от позиционирования чипа
производителем. Почти все современные игры не могут работать с более чем двумя текстурными блоками. Если требуется наложить более двух текстур, то пиксель
отправляется на повторную обработку.
Теперь поговорим о самом процессе наложения текстуры.
Модель разбивается до пикселя. Каждый пиксель поступает на конвейер, где и производится окраска. Чип работает в своем собственном времени.
На наложение одной текстуры уходит один такт машинного времени. Скорость роботы видеочипа измеряется в герцах, где один герц равен одному такту чипа.
Современные чипы работают со скоростью в сотни миллионов тактов в секунду, т.е. в диапазоне 100-500 мегагерц.
Это значит, что чип с одним конвейером, с рабочей частотой в 200 МГц наложит 200 миллионов текстур за секунду. Это конечно несколько утрировано, но в
общем так оно и есть. Соответственно чип с двумя конвейерами 400 миллионов текстур. Эта величина называется скоростью заполнения или fillrate.
Давайте разберем архитектуру реального чипа. Для примера возьмем наиболее "народный" чип GeForce 2 MX 400.
GeForce 2 MX является урезанной версией своего старшего брата GeForce 2 GTS. Основным отличием младшей версии является отсутствие 2-х конвейеров.
Итак, видеочип GeForce 2 MX имеет формулу 2х2. Что означает два конвейера с двумя текстурными блоками на каждом. Соответственно GeForce 2 GTS имеет формулу 4х2.
Необходимо сделать очень важное замечание, что любое усложнение чипа (добавление конвейеров или текстурных модулей) ведет к значительному усложнению
архитектуры, т.е. удорожанию конечного продукта. Поэтому каждый продукт балансирует на грани цена(сложность)/качество(скорость).
Продолжение следует... Милюков Сергей
|