Старые архитектуры графического процессора были «фиксированными функциями» ... означает ли это, что графические программисты тогда не имели никакого контроля над тем, как фильтры и эффекты были применены к их 3D-сцене?
Нет. Это означает, что вы должны были быть творческими в своем способе, как вы реализовали эффекты. Некоторые эффекты были абсолютно невозможны. Для других эффектов были возможны некоторые приближения.
Наибольшее различие заключается в том, что со свободно программируемыми графическими процессорами (шейдерная модель 2 или более поздняя) это управление потоком программы до уровня пикселей; подумайте об этом как о возможности выборочного рисования с помощью некоторых инструментов кисти в Photoshop или аналогичной программы.
С фиксированными функциями GPU, что вы могли бы сделать, по существу, эквивалентно работе со всеми слоями; вы можете смешать их, сложить несколько слоев друг на друга, сделать несколько проходов рендеринга и так далее. С некоторым творчеством вы могли бы реализовать довольно дикие вещи. Мое личное достижение - реализация эффекта пульсации воды (в комплекте с аппроксимацией рефракции и отражения) с использованием GPU класса GeForce2 (построено в 1999 году).
Это приводит меня к другой мысли, если графические программисты не имеют контроля, означает ли термин «фиксированная функция» для графического процессора, что эти шейдеры были реализованы на аппаратном обеспечении (через транзисторы/ворота)?
№ Это значит не было шейдеров вообще!
По сути дела, что делают графические процессоры, которые рисуют прозрачно текстурированные треугольники на экране, применяют фиксированный набор операций к входящей геометрии, чтобы преобразовать ее на место и определить локальные значения освещенности. Было несколько переключателей, которые вы могли бы выбрать для выбора, какие конкретные вычисления должны выполняться, например, вы могли бы загружать несколько текстур (до 8 в последнем аппаратном обеспечении с фиксированной функцией) и выбирать так называемые «комбинирующие регистры», которые выбирали, как эти текстуры должен быть «смешанным» с другим материалом. Например, вы могли бы иметь нормальную текстуру карты, являющуюся точечным продуктом, смешанным с вектором направления света для модуляции освещения (отображение рельефа); вы могли бы также использовать эту обычную текстуру для определения координат текстуры для отображения карты куба, чтобы создать впечатление отражения.
Даже сегодня на современных графических процессорах есть некоторые аспекты, которые не являются полностью программируемыми (просто потому, что было бы очень сложно сделать его высокопроизводительным). Например, смешение. Это не столько реальная операция смешивания, которая дорогая; проблема в том, что она должна сочетать пиксели таким образом, что бы ввести много задержки синхронизации, если точные операции не были закреплены.
Шейдеры в графических процессорах с фиксированной функциональностью? Единственное, что приходит на ум, это комбинаторы текстур. Они были странным гибридом, который думал, что все проблемы в мире можно решить, выполнив арифметические операции над несколькими слоями текстур ... ужасная, ужасная идея. –