Современные графические процессоры для ПК работают с так называемой полигональной графикой, то есть любой объект представляется как набор плоских многоугольников, которые рано или поздно разбиваются на простейшие треугольники. Объект задается вершинами, определяющими ключевые точки, и полигонами, которые образованы линиями, соединяющими вершины. Цвет на полигоны накладывается по специальным алгоритмам закраски, как правило, с использованием заранее нарисованных плоских изображений (текстур). Задача графического процессора сводится к тому, чтобы нарисовать и закрасить как можно больше полигонов за единицу времени.
В профессиональных ЗD-ускорителях иногда используется другой способ построения трехмерных сцен — методом обратной трассировки лучей (Ray Tracing), который требует гораздо больших вычислительных ресурсов. Для отображения треугольников на плоскости используется метод так называемых однородных координат, опирающийся на матрицы преобразования и проектирования. Расчет положения любой точки трехмерной сцены на плоскости сводится к умножению вектора исходных координат на эти матрицы. Современный центральный процессор затрачивает на обработку одной точки около 10 тактов и за секунду просчитывает координаты десятка миллионов вершин. Таким образом, расчет геометрии сцены не составляет для современного центрального процессора особого труда.Проблемы начинаются при закраске полигонов и определении видимых поверхностей, то есть при сопоставлении глубины расположения полигонов относительно наблюдателя. Реалистичность изображения в трехмерной сцене во многом определяется качеством текстур — заранее нарисованных картинок, наложенных на полигоны. Для каждой вершины указываются ее координаты в плоскости изображения-текстуры. При расчете цвета конкретной точки полигона учитывается ее расположение относительно вершин треугольника и точке присваивается цвет, аналогичный цвету соответствующей точки текстуры. Для этого каждой точке экрана, попавшей в треугольник, нужно найти соответствие в текстурных координатах (это сравнительно затратный процесс) и провести так называемую выборку из текстуры —вычислить цвет текстуры в полученной точке. Последняя задача не слишком проста, поскольку часто расчетная точка попадает между пикселями изображения-текстуры. Поэтому расчеты получаются очень трудоемкими, особенно с учетом наложения нескольких текстур. Вдобавок текстуры в современных играх часто представлены изображениями высокого разрешения. В итоге сверхмощный центральный процессор даже при низком экранном разрешении способен обработать не более десятка кадров в секунду. Поэтому ускорители трехмерной графики в первую очередь были созданы для аппаратного ускорения закраски. Объекты в сцене, даже с наложенными текстурами, выглядят весьма уныло, если не учитывается их освещенность. Первые ускорители работать с источниками освещения не умели. Игровой движок заблаговременно рассчитывал освещенность элементов сцены и создавал соответствующие текстуры освещения (light maps). Уже просчитанные блики света отрисовывались как текстуры. В статических сценах такой «свет» выглядел неплохо, но в динамических сценах подвижный объект смотрелся одинаково на свету и в тени, что снижало реалистичность. Для улучшения реалистичности стали рассчитывать освещенность объекта методом Гуро: определив освещенность вершин полигонов, ее интерполировали на внутренние точки граней. Такой подход лег в основу графических процессоров с фиксированным конвейером (поколение DirectX 7), получивших аппаратный блок геометрических вычислений — Hardware Transform & Lightning (T&L). Однако требования к реалистичности сцены непрерывно росли, а метод интерполяции по всему полигону был не в состоянии правдоподобно передать фактуру поверхности. Кроме того, большинство трехмерных объектов строились из малого числа полигонов с целью экономии вычислительных ресурсов и потому страдали «кубизмом» в силу прямолинейности образующих полигоны линий и плоских граней. Эту проблему решили, применив метод расчета освещенности с учетом вектора нормали к поверхности, то есть вектора, перпендикулярного к поверхности в данной точке. Задав еще одну текстуру специального вида (определяющую нормали) и модифицировав алгоритм расчета цвета точки, сумели радикально улучшить внешний вид моделей. Подобный метод называют Bump Mapping. Для полноценной реализации он требует программирования пиксельных конвейеров — перехода от интерполяции и выборки из текстур к обработке формул расчета цвета каждого пикселя объекта (а не только вершин). Так впервые появились пиксельные шейдеры — комплекты команд, позволяющие программировать пиксельные конвейеры графического процессора. Видеоадаптеры, поддерживающие обработку шейдеров, появились в поколении DirectX 8. Как правило, программы -шейдеры пишут на специальной разновидности ассемблера, привязанного к конкретному графическому процессору. В последнее время появились языки программирования высокого уровня для создания шейдеров, например Microsoft High-Level Shader Language (HLSL)