Ответ(ы) на вопрос:
Что есть шейдер? Любой младенец знает, что это. В общих чертах, конечно. Так называют алгоритм, который модифицирует текстуру объекта в соответствии с теми условиями, в которых объект находится. Чаще всего это условия освещения и окружения: пока что персонажи игр выходят из воды совершенно сухими, да и в огне не горят. Здоровье теряют, а одежда на них как новенькая. Даже шотган и огнемет ее не берут. Ну да пес с ней, с одеждой. Ресурс Wikipedia, давая определение шейдеров, подчеркивает: эти программы применяются для ускорения и упрощения процесса производства игр. С каждой новой игрой количество шейдеров в коде возрастает. Повышать качество картинки разработчикам игр удается не за счет новых идей, а путем размножения шейдеров. Расширяется штат программистов, руководство косится на разработчиков железа: успевают ли? А те и рады: плодят конвейеры, поднимают частоты, объединяют видеокарты в упряжки по две-четыре штуки. И все славно, и никому не надо ни о чем думать. Иди себе проторенным путем, сложив ответственность за результат труда на безмолвные шейдеры. Фактически именно шейдеры кормят сейчас всю компьютерную индустрию. Какие еще задачи, кроме игр, требуют постоянно наращивать вычислительные мощности процессоров, увеличивать объемы оперативной памяти? Что, кроме, пожалуй, кодирования видео, заставит нормального пользователя втыкать в слоты PCI Express несколько видеокарт и ставить в RAID-массив нулевого уровня несколько винчестеров, дабы система не тормозила? Да, конечно, есть и другие специфические задачи (хотя бы трехмерная мультипликация и профессиональная работа со звуком) , для решения которых нужны мощные компьютеры. Но рынок таких компьютеров отнюдь не массовый, и прокормить ораву, пасущуюся в области IT, лишь продавая узкоспециализированные ПК, невозможно Между прочим, вспомните, какими были первые шейдеры. Скромные и легкие, они бережно относились к ресурсам видеоподсистемы. Какими светлыми и радостными были первые игры, их использовавшие! Вспомните тот же FarCry! А что же современные игры, с последними версиями третьих шейдеров? Doom 3, F. E. A. R. утопают во тьме, хотя шейдеров в них значительно больше, чем в первых играх, а сами алгоритмы стали более совершенными (вернее, должны были стать) . Парадокс? Нет. Ведь программы, описывающие условия освещения, главным образом занимаются тем, что накладывают тени на текстуры, и для моделирования самих источников света совершенно не нужны. Скорее, их можно считать источниками тьмы, а не света, то есть верными прислужниками теней.
Чтобы понять, что такое шэйдер, разберемся для начала, как видео карта рисует примитивы (треугольники, полигоны и др. ) На вход поступают данные о каждой вершине примитива. Например, положение вершины в пространстве, нормаль и текстурные координаты. Эти данные называются вершинными атрибутами (vertex attributes). GPU на их основе вычисляет выходные значения: положение вершины в экранных координатах, цвет вершины, рассчитанный в зависимости от освещения и т. д. До выхода видео карт GeForce 3 и Radeon 8500 этот процесс был неуправляемым. Если вас, например, не устраивали те формулы, по которым считается освещение в OpenGL, и вы хотели применить свои, то ничего нельзя было поделать. Приходилось либо довольствоваться тем, что умеет GPU, либо выполнять расчеты для каждой вершины на процессоре, что намного медленнее. Решением этой проблемы стали вертексные программы (в Direct3D они называются вертексные шэйдеры) . Вертексная программа - это программа, написанная на специальном языке низкого уровня, которая выполняется на GPU и преобразует входные вертексные атрибуты в выходные, которые поступают на вход пиксельного шэйдера. Важной особенностью вертексных и пиксельных программ является то, что все инструкции работают с векторами. Например, чтобы посчитать скалярное произведение, надо выполнить всего лишь одну инструкцию, а не 5 (2 сложения и 3 умножения) , как на CPU. Благодаря этому можно выполнить массу операций небольшим числом инструкций. Например, умножение матрицы на вектор - всего 4 инструкции. А если инструкций мало, то скорость выполнения такой программы довольно высокая. Значения, вычисленные в вертексном шэйдере, интерполируются по треугольнику. На видео картах, не поддерживающих пиксельные шэйдеры, для каждого пикселя определяется его цвет и цвет текстуры (или нескольких текстур) в данной точке. Потом эти цвета умножаются или складываются, в зависимости от параметров выполненной ранее функции glTexEnv(), и результат записывается в буфер кадра. Если же видео карта поддерживает пиксельные шэйдеры, то все намного интереснее. Интерполированные по треугольнику значения поступают на вход некоторой программы, называемой пиксельным шэйдером. Это программа, состоящая из ряда арифметических и других инструкций, рассчитывает цвет пикселя, который записывается в буфер кадра. По сравнения с вертексными программами, скорость выполнения пиксельных шэйдеров намного выше. Можно почти моментально выполнять штук 10 векторных инструкций для каждого пикселя! На CPU такое сделать просто невозможно. Пиксельные и вертексные шэйдеры позволяют на аппаратном уровне создавать потрясающие эффекты: освещение на пиксельном уровне, bump mapping, отражение и преломление, волны на воде, скелетная анимация персонажей, тени и многое другое!
измельчитель бумаги
Не нашли ответ?
Похожие вопросы