2015-09-07 4 views
0

Я читал больше о архитектуре графического процессора, и один бит меня смущает. Большинство ресурсов определяют «шейдеры» как часть кода, который выполняется в разных частях графического конвейера, чтобы спроецировать окончательный рендеринг 3D-сцены. Старые архитектуры GPU были «фиксированными функциями» ... означает ли это, что графические программисты тогда действительно не контролировали, как фильтры и эффекты были применены к их 3D-сцене?Шейдеры в графических процессорах с фиксированной функциональностью

Может ли кто-нибудь подтвердить со мной, что у нас есть «программируемые графические процессоры», означает ли это, что функции/программы шейдера отправляются на GPU?

Это приводит меня к другой мысли, если графические программисты не контролировали, означает ли термин «фиксированная функция» для графического процессора, что эти шейдеры были реализованы на аппаратном обеспечении (через транзисторы/ворота)? Извините, я новичок в оборудовании, поэтому моя терминология может быть неправильной.

+0

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

ответ

3

Надежный конвейер с фиксированной функцией не был полностью программирован в современном режиме шейдера GPU. В ранние дни это был программный рендерер с некоторыми параметрами, но в конце 90-х он назывался «Hardware Transform & Light» для вершин и «Мультитекстурирование» для пикселей в Direct3D 6/7. Чтобы управлять конвейером с фиксированной функцией, вы устанавливаете ton of state для его настройки для различных операций. Другими словами, это был конфигурируемый, но не программируемый.

Надежный конвейер с фиксированной функцией на современных графических процессорах эмулируется программируемыми шейдерами, и вы можете увидеть пример того, как эти шейдеры выглядят в образце Direct3D FixedFuncEMU. Так как он эмулирован для Direct3D 9 и более ранних версий, Direct3D 10 и более поздние версии вообще не поддерживают устаревший конвейер с фиксированной функцией.

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

2

Старые архитектуры графического процессора были «фиксированными функциями» ... означает ли это, что графические программисты тогда не имели никакого контроля над тем, как фильтры и эффекты были применены к их 3D-сцене?

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

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

С фиксированными функциями GPU, что вы могли бы сделать, по существу, эквивалентно работе со всеми слоями; вы можете смешать их, сложить несколько слоев друг на друга, сделать несколько проходов рендеринга и так далее. С некоторым творчеством вы могли бы реализовать довольно дикие вещи. Мое личное достижение - реализация эффекта пульсации воды (в комплекте с аппроксимацией рефракции и отражения) с использованием GPU класса GeForce2 (построено в 1999 году).

Это приводит меня к другой мысли, если графические программисты не имеют контроля, означает ли термин «фиксированная функция» для графического процессора, что эти шейдеры были реализованы на аппаратном обеспечении (через транзисторы/ворота)?

№ Это значит не было шейдеров вообще!

По сути дела, что делают графические процессоры, которые рисуют прозрачно текстурированные треугольники на экране, применяют фиксированный набор операций к входящей геометрии, чтобы преобразовать ее на место и определить локальные значения освещенности. Было несколько переключателей, которые вы могли бы выбрать для выбора, какие конкретные вычисления должны выполняться, например, вы могли бы загружать несколько текстур (до 8 в последнем аппаратном обеспечении с фиксированной функцией) и выбирать так называемые «комбинирующие регистры», которые выбирали, как эти текстуры должен быть «смешанным» с другим материалом. Например, вы могли бы иметь нормальную текстуру карты, являющуюся точечным продуктом, смешанным с вектором направления света для модуляции освещения (отображение рельефа); вы могли бы также использовать эту обычную текстуру для определения координат текстуры для отображения карты куба, чтобы создать впечатление отражения.

Даже сегодня на современных графических процессорах есть некоторые аспекты, которые не являются полностью программируемыми (просто потому, что было бы очень сложно сделать его высокопроизводительным). Например, смешение. Это не столько реальная операция смешивания, которая дорогая; проблема в том, что она должна сочетать пиксели таким образом, что бы ввести много задержки синхронизации, если точные операции не были закреплены.

Смежные вопросы