MOLDOVANIA
Меню сайта
Категории каталога
Мои статьи [0]
Уроки [2]
Уроки
Справочник [3]
что есть что
Из интернета [2]
Из интернета
Наш опрос
Оцените мой сайт
Всего ответов: 58
Главная » Статьи » Справочник

Шейдеры
Кто такие шейдеры, зачем они нужны, какое у них прошлое и будущее. Начну я с давней истории об том, как появились первые микропроцессоры. Давным-давно (тогда в 1971 г. микропроцессоры еще не были изобретены) компания intel получила заказ на разработку микросхемы калькулятора для какой-то японской компании. В принципе калькулятор – это очень простая вещь: два числа, 4-е операции, так что можно полагать, что intel набил себе руку на производстве таких продуктов, и у инженеров было множество свободного времени. И нет, чтобы пить себе кофе и ничего не делать, так вот, задумались они, а что если завтра нам придет заказ на калькулятор с 5-ю арифметическими операциями, а потом с 6-ю, а потом что-то еще. Так и на кофе времени не останется. А давайте мы сделаем такую универсальную микросхему, которая бы умела не только выполнять 4-е операции, а делать все что угодно, надо бы только для нее изобрести какой-то способ программирования. А так пришел заказ на очередной калькулятор, мы раз и написали новую микропрограмму для нашей универсальной микросхемы и можно снова ничего не делать. Вобщем, взяли и сделали. Потом, правда, одумались, что идея слишком хороша, чтобы ее использовать для производства только калькуляторов, выкупили патент и вскоре появился первый 4-разрядный микропроцессор Intel-4004.

Потом спустя еще какое-то время, когда на компьютере стали запускать не только нужные программы, но и вредные 3d-игры, то мощностей центрального процессора стало не хватать (он же, бедный, должен считать еще и физику и AI и многое другое). Сначала хотели поместить внутрь компьютера два, три, а то и все десять микропроцессоров, но время было не то, технологии не отлажены, да и дороги слишком. Задумались разработчики, спросили программистов, а какие, действия обычно выполняются при расчете и отрисовке 3d. Программисты подумали и сказали, мол, так и так, нужна нам функция рисования круга, треугольника и еще какой-то фигуры. И все, больше ничего не нужно, спросили инженеры? А то, ответили программисты, больше нам ничего не надо. Ладно, взяли и спаяли инженеры новый девайс, который очень-очень быстро умел рисовать круг, треугольник и еще какую-то фигуру (стоил он гораздо дешевле, чем тот же процессор, еще бы, делать-то умел он всего три действия). И назвали эту штуку 3d-ускоритель, да заодно с видеокартой соединили вместе. И все было бы хорошо, но вот пришли пользователи к программистам и сказали, а что это мол, в ваших играх одни только треугольники и круги, давайте использовать, еще и эллипс. Тут зачесали затылки программисты, как так эллипс, нет такой функции внутри этой железяки видео-ускорителя. Пошли к инженерам, мол, реализуйте, пожалуйста, новую функциональность. А те и рады, вот держите, новая версия нашего ускорителя. А то, что новая игра не запускается на старом железе, ну так это ерунда, прогресс, как говорится, не ждет. Да вот еще проблема, на рынке конкуренция появилась, разные фирмы стали делать эти самые 3d-акселераторы. Только вот, наверное, ума на всех не хватило, так что у одних ускорителей круги рисуются не такие круглые как у конкурентов, а у соседей, наоборот, треугольники какие–то кривые выходят. Так что нашим программистам и пользователям одна головная боль. Как игру так написать, чтобы она одинаково выглядела под разными ускорителями. Добро, если как в этой сказке все рисование свелось бы к таким простым действиям как круги и треугольники. Так нет, глубина цвета, глубина z-буфера, всякие встроенные эффекты, тени, фиксированное количество источников света, просадки по скорости в разных местах у разных ускорителей. В общем, разные были эти ускорители, в одних играх одни были быстрее в других играх - другие. Но к тому времени технологии, которые использовались для производства ускорителей подросли, и стало возможным уже не зашивать аппаратно некоторый набор функций в микросхему, а создавать более или менее универсальные чипы. И к которым писать специальные микро-программы, управляющие тем как рисовать ту или иную фигуру или эффект. Конечно, графические процессоры самых современных видеокарт еще не настолько универсальны как центральные процессоры, но все к тому идет. Современная видеокарта – настроена на то, чтобы выполнять уже не фиксированные, а произвольные операции, причем массово и параллельно. До процессора как я говорил еще далеко, но перспектива чувствуется. С другой стороны разработчики процессоров тоже не спят. Решили они повышать скорость работы не за счет подъема тактовых частот и игр с длиной конвейера, а за счет параллелизма. Как известно в современном компьютере одновременно выполняется несколько задач, и делить на них время одного процессора получается крайне не эффективно из-за накладных затрат на переключение контекста выполнения, промахов в КЭШе и т.д. Так что когда каждый процесс и даже поток получит по собственному ядру, тогда и наступит всеобщее компьютерное счастье. Разве что программистам опять морока, надо учиться писать код использующий возможности параллельного исполнения, об этом говорил еще в далеком 2005 г. Ричард Вирт на московском форуме Intel для разработчиков аппаратного и программного обеспечения (Intel Developer Forum).

На этом нашу сказку я завершаю. А вот краткие выводы. Шейдеры - это микропрограммы написанные на некотором достаточно низкоуровневом языке и исполняющиеся (сюрприз) не на центральном процессоре компьютера, а на его графическом чипе. До появления шейдеров, в 3d-ускорителях был реализован стандартный ограниченный набор функций. Очевидно, что задача создания универсального чипа (дающего возможность программистам создавать собственные эффекты) довольно сложна. Поэтому рынок прошел через ряд стадий развития чипов и версий шейдеров, которые ими поддерживались. Так раньше шейдеры делились на пиксельные и вершинные (соответственно микропрограммы выполнявшиеся для вершин треугольников или же отдельных их пикселей). Каждый тип шейдеров обрабатывался на своем специализированном чипе. Делились шейдеры по версиям, отличавшимся возможностями этого самого низкоуровневого языка (длиной инструкций, возможностью ветвления кода, или циклов). Сейчас же очередной технологический этап, когда производители чипов научились делать универсальные шейдерные блоки (семейство видеокарт nvidia 8000). Универсальные блоки дали возможность грамотно балансировать нагрузку. Больше у вас нет ситуаций, когда простаивали свободные пиксельные блоки в то время, как не хватало вершинных и наоборот. Также появился новый тип шейдеров – геометрические, способных изменять топологию просчитываемой модели. Очевидно, что вы не можете писать код для графического процессора с помощью какого-либо из универсальных языков (c|c++|pascal). Эти языки содержат большое количество избыточных конструкций, которые не нужны и нереализуемы для GPU (скажите, кому нужны, например, операторы ввода/вывода). С другой стороны так как GPU представляет собой специализированный (работающий с матрицами, векторами, цветом), а не универсальный чип (в отличии от CPU), то нам нужны встроенная поддержка в этом языке высокоуровневых математических действий.

Особенностью шейдеров являются массовые параллельные вычисления - это означает, что вы должны представить шейдер в роли “черного ящика”, у которого есть вход и выход. А этот черный ящик должен на основании входных данных что-то рассчитать и дать это на выход. Но, и это важно, никак нельзя определить, что мы обрабатываем в целом. Если у нас есть некоторый полигон для каждой вершины, которой срабатывает некоторый шейдер, то мы никак не можем узнать, где находятся другие вершины, что-либо поменять в них. Так если у вас есть один материал применяемый к стене и к потолку сцены, то определить что именно вы обрабатываете не возможно. На самом деле это и не надо (не важно, где находится материал, или какая часть исходного объекта просчитывается, но обладает он одинаковыми наборами характеристик), просто в начале это несколько непривычно.


Категория: Справочник | Добавил: Admin (31.12.2007)
Просмотров: 887 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2017Бесплатный конструктор сайтов - uCoz