Что такое шейдерные блоки в видеокарте
Шейдеры в видеокарте – что это такое: их версии и как они влияют на работу
Всем привет! Сегодня разберем, что такое шейдеры в видеокарте, что дают, как влияют на обработку графики в играх и для чего используются, какие бывают версии и как узнать шейдеры своей платы. О том, что значит OC в наименовании видеокарты NVidia или AMD, можно почитать здесь.
Немного истории
Давным-давно, когда мониторы были большими и пузатыми, а компьютеры маленькими в плане производительности, графику обрабатывал центральный процессор. Этих возможностей хватало, так как и графика была на зачаточном уровне: пиксельные схематические изображения, объекты на которых не всегда можно было узнать.
Видеоигры только зарождались, и пока никто всерьез не рассматривал компьютер как средство для развлечения. Это был рабочий инструмент для выполнения вычислений, к тому же доступный не всякому среднестатистическому американцу.
Шло время, появились первые разработки в сфере компьютерной 3D графики. Вот тут-то и стало понятно, что такую технологию моделирования объектов можно использовать для симуляции виртуальных пространств, живущих по своим законам. Да, речь идет о видео играх.
Простыми словами я рассказываю именно об играх, так как это — прикладная область, которая в полной мере позволяет реализовать 3D технологии. Следующим этапом можно считать унификацию «полномочий» различных игровых компонентов. Так, в отдельный элемент «откололся» так называемый движок — структура, которая отвечает за взаимодействие всех игровых компонентов.
Если вы увлекаетесь видеоиграми, то, конечно же, слышали такие термины как Unity, Cry Engine или Creation Engine. Узкая специализация позволяет игроделам не «изобретать велосипед» каждый раз с нуля, сосредоточившись на главном — созданием непосредственно самой игры.
Любой 3D объект состоит из так называемых полигонов, которые имеют треугольную форму. Детализация объекта будет зависеть от количества таких полигонов: чем их больше, тем четче нарисована каждая мелочь. При выводе изображения на экран полигоны нужно растеризовать, то есть перевести их из трехмерного пространства на плоский экран с сохранением пропорций.Инженеры пришли к выводу, что это слишком рутинная задача, чтобы нагружать ею центральный процессор. В результате «эволюции» после ряда экспериментов появились видеокарты, которые мы видим сегодня: отдельный графический чип, который через специальную шину связывается с видеопамятью.
Что такое shedar
Shader переводится с английского как «оттеняющий». Это специальная программа, которая обрабатывает объекты, содержащиеся в игровом коде, и придает им окончательный вид.
По сути, это один из элементов унификации. Если совсем упростить, то разработчик игры попросту задает расположение и форму объекта, а также его текстуру. За отрисовку отвечают уже шейдеры, которые для этого и написаны.
Это еще больше упрощает создание игр: не нужно каждый раз программировать, как именно будут отображаться блики, преломление света, разряды молний и прочие красивости, делающие современные игры крайне реалистичными. Фактически, все это уже есть готовое и содержится в DLL библиотеках, которые обрабатываются шейдерами.
Виды шейдеров
Современные графические адаптеры оснащены универсальным набором шейдеров, который умеет обрабатывать любые объекты. Всего их существует 3 типа:
Все это относится к realtime графике, то есть обработке изображения в режиме реального времени (например, 60 кадров в секунду, как это бывает в играх). Для создания 3D мультфильмов используются совсем другие технологии: качество там такое, что для рендеринга видео нужны очень большие вычислительные мощности.
Как узнать какие шейдеры поддерживает моя видеокарта
Самый простой способ сделать это — установить бесплатную утилиту GPU-Z. Нужная информация отображается в поле DirectX Support. Это будет число в поле SM — например 2.0 (более старая версия) или 3.0 (пригодна для современных игр). Последние модели графических адаптеров поддерживают уже четвертую версию шейдеров.
Также при покупке графической платы обратите внимание на количество шейдеров и их частоту. Принцип прост: чем выше эти параметры, тем лучше.
Для вас будут полезны публикации «Что такое в видеокарте HDCP?» и «Что означает Dual в маркировки видеокарты и что это дает покупателю». Буду признателен, если вы поделитесь этим постом в социальных сетях. До скорой встречи!
Руководство покупателя игровой видеокарты
Последнее обновление от 28.09.2012
Основные характеристики видеокарт
Современные графические процессоры содержат множество функциональных блоков, от количества и характеристик которых зависит и итоговая скорость рендеринга, влияющая на комфортность игры. По сравнительному количеству этих блоков в разных видеочипах можно примерно оценить, насколько быстр тот или иной GPU. Характеристик у видеочипов довольно много, в этом разделе мы рассмотрим лишь самые важные из них.
Тактовая частота видеочипа
Рабочая частота GPU обычно измеряется в мегагерцах, т. е. миллионах тактов в секунду. Эта характеристика прямо влияет на производительность видеочипа — чем она выше, тем больший объем работы GPU может выполнить в единицу времени, обработать большее количество вершин и пикселей. Пример из реальной жизни: частота видеочипа, установленного на плате Radeon HD 6670 равна 840 МГц, а точно такой же чип в модели Radeon HD 6570 работает на частоте в 650 МГц. Соответственно будут отличаться и все основные характеристики производительности. Но далеко не только рабочая частота чипа определяет производительность, на его скорость сильно влияет и сама графическая архитектура: устройство и количество исполнительных блоков, их характеристики и т. п.
В некоторых случаях тактовая частота отдельных блоков GPU отличается от частоты работы остального чипа. То есть, разные части GPU работают на разных частотах, и сделано это для увеличения эффективности, ведь некоторые блоки способны работать на повышенных частотах, а другие — нет. Такими GPU комплектуется большинство видеокарт GeForce от NVIDIA. Из свежих примеров приведём видеочип в модели GTX 580, большая часть которого работает на частоте 772 МГц, а универсальные вычислительные блоки чипа имеют повышенную вдвое частоту — 1544 МГц.
Скорость заполнения (филлрейт)
Скорость заполнения показывает, с какой скоростью видеочип способен отрисовывать пиксели. Различают два типа филлрейта: пиксельный (pixel fill rate) и текстурный (texel rate). Пиксельная скорость заполнения показывает скорость отрисовки пикселей на экране и зависит от рабочей частоты и количества блоков ROP (блоков операций растеризации и блендинга), а текстурная — это скорость выборки текстурных данных, которая зависит от частоты работы и количества текстурных блоков.
Например, пиковый пиксельный филлрейт у GeForce GTX 560 Ti равен 822 (частота чипа) × 32 (количество блоков ROP) = 26304 мегапикселей в секунду, а текстурный — 822 × 64 (кол-во блоков текстурирования) = 52608 мегатекселей/с. Упрощённо дело обстоит так — чем больше первое число — тем быстрее видеокарта может отрисовывать готовые пиксели, а чем больше второе — тем быстрее производится выборка текстурных данных.
Хотя важность «чистого» филлрейта в последнее время заметно снизилась, уступив скорости вычислений, эти параметры всё ещё остаются весьма важными, особенно для игр с несложной геометрией и сравнительно простыми пиксельными и вершинными вычислениями. Так что оба параметра остаются важными и для современных игр, но они должны быть сбалансированы. Поэтому количество блоков ROP в современных видеочипах обычно меньше количества текстурных блоков.
Количество вычислительных (шейдерных) блоков или процессоров
Пожалуй, сейчас эти блоки — главные части видеочипа. Они выполняют специальные программы, известные как шейдеры. Причём, если раньше пиксельные шейдеры выполняли блоки пиксельных шейдеров, а вершинные — вершинные блоки, то с некоторого времени графические архитектуры были унифицированы, и эти универсальные вычислительные блоки стали заниматься различными расчётами: вершинными, пиксельными, геометрическими и даже универсальными вычислениями.
Впервые унифицированная архитектура была применена в видеочипе игровой консоли Microsoft Xbox 360, этот графический процессор был разработан компанией ATI (впоследствии купленной AMD). А в видеочипах для персональных компьютеров унифицированные шейдерные блоки появились ещё в плате NVIDIA GeForce 8800. И с тех пор все новые видеочипы основаны на унифицированной архитектуре, которая имеет универсальный код для разных шейдерных программ (вершинных, пиксельных, геометрических и пр.), и соответствующие унифицированные процессоры могут выполнить любые программы.
По числу вычислительных блоков и их частоте можно сравнивать математическую производительность разных видеокарт. Большая часть игр сейчас ограничена производительностью исполнения пиксельных шейдеров, поэтому количество этих блоков весьма важно. К примеру, если одна модель видеокарты основана на GPU с 384 вычислительными процессорами в его составе, а другая из той же линейки имеет GPU с 192 вычислительными блоками, то при равной частоте вторая будет вдвое медленнее обрабатывать любой тип шейдеров, и в целом будет настолько же производительнее.
Хотя, исключительно на основании одного лишь количества вычислительных блоков делать однозначные выводы о производительности нельзя, обязательно нужно учесть и тактовую частоту и разную архитектуру блоков разных поколений и производителей чипов. Только по этим цифрам можно сравнивать чипы только в пределах одной линейки одного производителя: AMD или NVIDIA. В других же случаях нужно обращать внимание на тесты производительности в интересующих играх или приложениях.
Блоки текстурирования (TMU)
Эти блоки GPU работают совместно с вычислительными процессорами, ими осуществляется выборка и фильтрация текстурных и прочих данных, необходимых для построения сцены и универсальных вычислений. Число текстурных блоков в видеочипе определяет текстурную производительность — то есть скорость выборки текселей из текстур.
Хотя в последнее время больший упор делается на математические расчеты, а часть текстур заменяется процедурными, нагрузка на блоки TMU и сейчас довольно велика, так как кроме основных текстур, выборки необходимо делать и из карт нормалей и смещений, а также внеэкранных буферов рендеринга render target.
С учётом упора многих игр в том числе и в производительность блоков текстурирования, можно сказать, что количество блоков TMU и соответствующая высокая текстурная производительность также являются одними из важнейших параметров для видеочипов. Особенное влияние этот параметр оказывает на скорость рендеринга картинки при использовании анизотропной фильтрации, требующие дополнительных текстурных выборок, а также при сложных алгоритмах мягких теней и новомодных алгоритмах вроде Screen Space Ambient Occlusion.
Блоки операций растеризации (ROP)
Блоки растеризации осуществляют операции записи рассчитанных видеокартой пикселей в буферы и операции их смешивания (блендинга). Как мы уже отмечали выше, производительность блоков ROP влияет на филлрейт и это — одна из основных характеристик видеокарт всех времён. И хотя в последнее время её значение также несколько снизилось, всё ещё попадаются случаи, когда производительность приложений зависит от скорости и количества блоков ROP. Чаще всего это объясняется активным использованием фильтров постобработки и включенным антиалиасингом при высоких игровых настройках.
Ещё раз отметим, что современные видеочипы нельзя оценивать только числом разнообразных блоков и их частотой. Каждая серия GPU использует новую архитектуру, в которой исполнительные блоки сильно отличаются от старых, да и соотношение количества разных блоков может отличаться. Так, блоки ROP компании AMD в некоторых решениях могут выполнять за такт больше работы, чем блоки в решениях NVIDIA, и наоборот. То же самое касается и способностей текстурных блоков TMU — они разные в разных поколениях GPU разных производителей, и это нужно учитывать при сравнении.
Вплоть до последнего времени, количество блоков обработки геометрии было не особенно важным. Одного блока на GPU хватало для большинства задач, так как геометрия в играх была довольно простой и основным упором производительности были математические вычисления. Важность параллельной обработки геометрии и количества соответствующих блоков резко выросли при появлении в DirectX 11 поддержки тесселяции геометрии. Компания NVIDIA первой распараллелила обработку геометрических данных, когда в её чипах семейства GF1xx появилось по несколько соответстующих блоков. Затем, похожее решение выпустила и AMD (только в топовых решениях линейки Radeon HD 6700 на базе чипов Cayman).
В рамках этого материала мы не будем вдаваться в подробности, их можно прочитать в базовых материалах нашего сайта, посвященных DirectX 11-совместимым графическим процессорам. В данном случае для нас важно то, что количество блоков обработки геометрии очень сильно влияет на общую производительность в самых новых играх, использующих тесселяцию, вроде Metro 2033, HAWX 2 и Crysis 2 (с последними патчами). И при выборе современной игровой видеокарты очень важно обращать внимание и на геометрическую производительность.
Собственная память используется видеочипами для хранения необходимых данных: текстур, вершин, данных буферов и т. п. Казалось бы, что чем её больше — тем всегда лучше. Но не всё так просто, оценка мощности видеокарты по объему видеопамяти — это наиболее распространенная ошибка! Значение объёма видеопамяти неопытные пользователи переоценивают чаще всего, до сих пор используя именно его для сравнения разных моделей видеокарт. Оно и понятно — этот параметр указывается в списках характеристик готовых систем одним из первых, да и на коробках видеокарт его пишут крупным шрифтом. Поэтому неискушённому покупателю кажется, что раз памяти в два раза больше, то и скорость у такого решения должна быть в два раза выше. Реальность же от этого мифа отличается тем, что память бывает разных типов и характеристик, а рост производительности растёт лишь до определенного объёма, а после его достижения попросту останавливается.
Так, в каждой игре и при определённых настройках и игровых сценах есть некий объём видеопамяти, которого хватит для всех данных. И хоть ты 4 ГБ видеопамяти туда поставь — у неё не появится причин для ускорения рендеринга, скорость будут ограничивать исполнительные блоки, о которых речь шла выше, а памяти просто будет достаточно. Именно поэтому во многих случаях видеокарта с 1,5 ГБ видеопамяти работает с той же скоростью, что и карта с 3 ГБ (при прочих равных условиях).
Ситуации, когда больший объём памяти приводит к видимому увеличению производительности, существуют — это очень требовательные игры, особенно в сверхвысоких разрешениях и при максимальных настройках качества. Но такие случаи встречаются не всегда и объём памяти учитывать нужно, не забывая о том, что выше определённого объема производительность просто уже не вырастет. Есть у чипов памяти и более важные параметры, такие как ширина шины памяти и её рабочая частота. Эта тема настолько обширна, что подробнее о выборе объёма видеопамяти мы ещё остановимся в шестой части нашего материала.
Ширина шины памяти
Ширина шины памяти является важнейшей характеристикой, влияющей на пропускную способность памяти (ПСП). Большая ширина позволяет передавать большее количество информации из видеопамяти в GPU и обратно в единицу времени, что положительно влияет на производительность в большинстве случаев. Теоретически, по 256-битной шине можно передать в два раза больше данных за такт, чем по 128-битной. На практике разница в скорости рендеринга хоть и не достигает двух раз, но весьма близка к этому во многих случаях с упором в пропускную способность видеопамяти.
Современные игровые видеокарты используют разную ширину шины: от 64 до 384 бит (ранее были чипы и с 512-битной шиной), в зависимости от ценового диапазона и времени выпуска конкретной модели GPU. Для самых дешёвых видеокарт уровня low-end чаще всего используется 64 и реже 128 бит, для среднего уровня от 128 до 256 бит, ну а видеокарты из верхнего ценового диапазона используют шины от 256 до 384 бит шириной. Ширина шины уже не может расти чисто из-за физических ограничений — размер кристалла GPU недостаточен для разводки более чем 512-битной шины, и это обходится слишком дорого. Поэтому наращивание ПСП сейчас осуществляется при помощи использования новых типов памяти (см. далее).
Ещё одним параметром, влияющим на пропускную способность памяти, является её тактовая частота. А повышение ПСП часто напрямую влияет на производительность видеокарты в 3D-приложениях. Частота шины памяти на современных видеокартах бывает от 533(1066, с учётом удвоения) МГц до 1375(5500, с учётом учетверения) МГц, то есть, может отличаться более чем в пять раз! И так как ПСП зависит и от частоты памяти, и от ширины ее шины, то память с 256-битной шиной, работающая на частоте 800(3200) МГц, будет иметь бо́льшую пропускную способность по сравнению с памятью, работающей на 1000(4000) МГц со 128-битной шиной.
Особенное внимание на параметры ширины шины памяти, её типа и частоты работы следует уделять при покупке сравнительно недорогих видеокарт, на многие из которых ставят лишь 128-битные или даже 64-битные интерфейсы, что крайне негативно сказывается на их производительности. Вообще, покупка видеокарты с использованием 64-битной шины видеопамяти для игрового ПК нами не рекомендуется вовсе. Желательно отдать предпочтение хотя бы среднему уровню минимум со 128- или 192-битной шиной.
На современные видеокарты устанавливается сразу несколько различных типов памяти. Старую SDR-память с одинарной скоростью передачи уже нигде не встретишь, но и современные типы памяти DDR и GDDR имеют значительно отличающиеся характеристики. Различные типы DDR и GDDR позволяют передавать в два или четыре раза большее количество данных на той же тактовой частоте за единицу времени, и поэтому цифру рабочей частоты зачастую указывают удвоенной или учетверённой, умножая на 2 или 4. Так, если для DDR-памяти указана частота 1400 МГц, то эта память работает на физической частоте в 700 МГц, но указывают так называемую «эффективную» частоту, то есть ту, на которой должна работать SDR-память, чтобы обеспечить такую же пропускную способность. То же самое с GDDR5, но частоту тут даже учетверяют.
Основное преимущество новых типов памяти заключается в возможности работы на больших тактовых частотах, а соответственно — в увеличении пропускной способности по сравнению с предыдущими технологиями. Это достигается за счет увеличенных задержек, которые, впрочем, не так важны для видеокарт. Первой платой, использующей память DDR2, стала NVIDIA GeForce FX 5800 Ultra. С тех пор технологии графической памяти значительно продвинулись, был разработан стандарт GDDR3, который близок к спецификациям DDR2, с некоторыми изменениями специально для видеокарт.
GDDR3 — это специально предназначенная для видеокарт память, с теми же технологиями, что и DDR2, но с улучшенными характеристиками потребления и тепловыделения, что позволило создать микросхемы, работающие на более высоких тактовых частотах. Несмотря на то, что стандарт был разработан в компании ATI, первой видеокартой, её использующей, стала вторая модификация NVIDIA GeForce FX 5700 Ultra, а следующей стала GeForce 6800 Ultra.
GDDR4 — это дальнейшее развитие «графической» памяти, работающее почти в два раза быстрее, чем GDDR3. Основными отличиями GDDR4 от GDDR3, существенными для пользователей, являются в очередной раз повышенные рабочие частоты и сниженное энергопотребление. Технически, память GDDR4 не сильно отличается от GDDR3, это дальнейшее развитие тех же идей. Первыми видеокартами с чипами GDDR4 на борту стали ATI Radeon X1950 XTX, а у компании NVIDIA продукты на базе этого типа памяти не выходили вовсе. Преимущества новых микросхем памяти перед GDDR3 в том, что энергопотребление модулей может быть примерно на треть ниже. Это достигается за счет более низкого номинального напряжения для GDDR4.
Впрочем, GDDR4 не получила широкого распространения даже в решениях AMD. Начиная с GPU семейства RV7x0, контроллерами памяти видеокарт поддерживается новый тип памяти GDDR5, работающий на эффективной учетверённой частоте до 5,5 ГГц и выше (теоретически возможны частоты до 7 ГГц), что даёт пропускную способность до 176 ГБ/с с применением 256-битного интерфейса. Если для повышения ПСП у памяти GDDR3/GDDR4 приходилось использовать 512-битную шину, то переход на использование GDDR5 позволил увеличить производительность вдвое при меньших размерах кристаллов и меньшем потреблении энергии.
Видеопамять самых современных типов — это GDDR3 и GDDR5, она отличается от DDR некоторыми деталями и также работает с удвоенной/учетверённой передачей данных. В этих типах памяти применяются некоторые специальные технологии, позволяющие поднять частоту работы. Так, память GDDR2 обычно работает на более высоких частотах по сравнению с DDR, GDDR3 — на еще более высоких, а GDDR5 обеспечивает максимальную частоту и пропускную способность на данный момент. Но на недорогие модели до сих пор ставят «неграфическую» память DDR3 со значительно меньшей частотой, поэтому нужно выбирать видеокарту внимательнее.
на что влияет частота шрейдеров?
Количество блоков пиксельных шейдеров (или пиксельных процессоров)
Количество блоков вершинных шейдеров (или вершинных процессоров)
Аналогично предыдущему пункту, эти блоки выполняют программы шейдеров, но уже вершинных. Данная характеристика важна для некоторых игр, но не так явно, как предыдущая, так как даже современными играми блоки вершинных шейдеров почти никогда не бывают загружены даже наполовину. И, так как производители балансируют количество разных блоков, не позволяя возникнуть большому перекосу в распределении сил, количеством вершинных процессоров при выборе видеокарты вполне можно пренебречь, учитывая их только при прочих равных характеристиках.
Количество унифицированных шейдерных блоков (или универсальных процессоров)
Блоки текстурирования (TMU)
Эти блоки работают совместно с шейдерными процессорами всех указанных типов, ими осуществляется выборка и фильтрация текстурных данных, необходимых для построения сцены. Число текстурных блоков в видеочипе определяет текстурную производительность, скорость выборки из текстур. И хотя в последнее время большая часть расчетов осуществляется блоками шейдеров, нагрузка на блоки TMU до сих пор довольно велика, и с учетом упора некоторых игр в производительность блоков текстурирования, можно сказать, что количество блоков TMU и соответствующая высокая текстурная производительность являются одними из важнейших параметров видеочипов. Особое влияние этот параметр оказывает на скорость при использовании трилинейной и анизотропной фильтраций, требующих дополнительных текстурных выборок.
Что такое шейдеры? Просто о сложном для начинающих
«Что такое шейдеры?» – очень частый вопрос любопытных игроков и начинающих игровых разработчиков. В этой статье доходчиво и понятно об этих страшных шейдерах расскажу.
Двигателем прогресса в сторону фотореалистичности картинки в компьютерной графике я считаю именно компьютерные игры, поэтому давайте именно в разрезе видео-игр и поговорим о том, что такое “шейдеры”.
До того, как появились первые графические ускорители, всю работу по отрисовке кадров видеоигры выполнял бедняга центральный процессор.
Так вот, центральный процессор (CPU – Central Processing Unit) слишком умный парень, чтобы заставлять его заниматься такой рутиной. Вместо этого логично выделить какой-то аппаратный модуль, который разгрузит CPU, чтобы тот смог заниматься более важным интеллектуальным трудом.
Таким аппаратным модулем стал – графический ускоритель или видеокарта (GPU – Graphics Processing Unit). Теперь CPU подготавливает данные и загружает рутинной работой коллегу. Учитывая, что GPU сейчас это не просто один коллега, это толпа миньонов-ядер, то он с такой работой справляется на раз.
Но мы пока не получили ответа на главный вопрос: Что такое шейдеры? Подождите, я подвожу к этому.
Хорошая, интересная и близкая к фото-реализму графика, требовала от разработчиков видеокарт реализовывать многие алгоритмы на аппаратном уровне. Тени, свет, блики и так далее. Такой подход – с реализацией алгоритмов аппаратно называется “Фиксированный пайплайн или конвейер” и там где требуется качественная графика он теперь не встречается. Его место занял “Программируемый пайплайн”.
Запросы игроков “давайте, завозите хороший графоний! удивляйте!”, толкали разработчиков игр (и производителей видеокарт соответственно) все к более и более сложным алгоритмам. Пока в какой-то момент зашитых аппаратных алгоритмов им стало слишком мало.
Наступило время видеокартам стать более интеллектуальными. Было принято решение позволить разработчикам программировать блоки графического процессора в произвольные конвейеры, реализующие разные алгоритмы. То есть разработчики игр, графические программисты отныне смогли писать программы для видеокарточек.
И вот, наконец, мы дошли до ответа на наш главный вопрос.
“Что такое шейдеры?”
Ше́йдер (англ. shader — затеняющая программа) — это программа для видеокарточки, которая используется в трёхмерной графике для определения окончательных параметров объекта или изображения, может включать в себя описание поглощения и рассеяния света, наложения текстуры, отражения и преломление, затенение, смещение поверхности и множество других параметров.
Графический пайплайн
Преимущество программируемого конвейера перед его предшественником в том, что теперь программистам можно создавать свои алгоритмы самостоятельно, а не пользоваться зашитым аппаратно набором опций.
Сначала видеокарты оснастили несколькими специализированными процессорами, поддерживающими разные наборы инструкций. Шейдеры делили на три типа в зависимости от того, какой процессор будет их исполнять. Но затем видеокарты стали оснащать универсальными процессорами, поддерживающими наборы инструкций всех трёх типов шейдеров. Деление шейдеров на типы сохранилось для описания назначения шейдера.
Помимо графических задач с такими интеллектуальными видеокартами появилась возможность выполнения на GPU вычислений общего назначения (не связанных с компьютерной графикой).
Впервые полноценная поддержка шейдеров появилась в видеокартах серии GeForce 3, но зачатки были реализованы ещё в GeForce256 (в виде Register Combiners).
Виды шейдеров
В зависимости от стадии конвейера шейдеры делятся на несколько типов: вершинный, фрагментный (пиксельный) и геометрический. А в новейших типах конвейеров есть еще шейдеры тесселяции. Подробно обсуждать графический конвейер мы не будем, я все думаю не написать ли об этом отдельную статью, для тех кто решит заняться изучением шейдеров и программирования графики. Напишите в комментариях если Вам интересно, я буду знать, стоит ли тратить время.
Вершинный шейдер
Вершинными шейдерами делают анимации персонажей, травы, деревьев, создают волны на воде и многие другие штуки. В вершинном шейдере программисту доступны данные, связанные с вершинами например: координаты вершины в пространстве, её текстурные координатами, её цвет и вектор нормали.
Геометрический шейдер
Геометрические шейдеры способны создавать новую геометрию, и могут использоваться для создания частиц, изменения детализации модели «на лету», создание силуэтов и т.п. В отличие от предыдущего вершинного, способны обработать не только одну вершину, но и целый примитив. Примитивом может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (англ. adjacency) для треугольного примитива может быть обработано до шести вершин.
Пиксельный шейдер
Пиксельными шейдерами выполняют наложение текстур, освещение, и разные текстурные эффекты, такие как отражение, преломление, туман, Bump Mapping и пр. Пиксельные шейдеры также используются для пост-эффектов.
Пиксельный шейдер работает с фрагментами растрового изображения и с текстурами — обрабатывает данные, связанные с пикселями (например, цвет, глубина, текстурные координаты). Пиксельный шейдер используется на последней стадии графического конвейера для формирования фрагмента изображения.
На чем пишут шейдеры?
Изначально шейдеры можно было писать на assembler-like языке, но позже появились шейдерные языки высокого уровня, похожие на язык С, такие как: Cg, GLSL и HLSL.
Такие языки намного проще чем C, ведь задачи решаемые с их помощью, гораздо проще. Система типов в таких языках отражает нужды программистов графики. Поэтому они предоставляют программисту специальные типы данных: матрицы, семплеры, векторы и тп.
RenderMan
Все что мы обсудили выше относится к realtime графике. Но существуют non-realtime графика. В чем разница – realtime – реальное время, тоесть здесь и сейчас – давать 60 кадров в секунду в игре, это процесс реального времени. А вот рендерить комплексный кадр для ультрасовременной анимации по несколько минут это non-realtime. Суть во времени.
Например, графику такого качества как в последних мультипликационных фильмах студии Pixar получить в реальном времени мы сейчас получить не можем. Очень большие рендер-фермы обсчитывают симуляции света по совсем другим алгоритмам, очень затратным, но дающим почти фотореалистичные картинки.
Супер-реалистичная графика в Sand piper
Например, посмотрите, на вот этот милый мультфильм, песчинки, перышки птички, волны, все выглядит невероятно реальным.
*Видео могут забанить на Youtube, если оно не открывается, погуглите pixar sandpiper – короткометражный мультфильм про храброго песочника очень милый и пушистый. Умилит и продемонстрирует насколько крутой может быть компьютерная графика.
Так вот это RenderMan от фирмы Pixar. Он стал первым языком программирования шейдеров. API RenderMan является фактическим стандартом для профессионального рендеринга, используется во всех работах студии Pixar и не только их.
Полезная информация
Теперь Вы знаете что такое шейдеры, но помимо шейдеров, есть другие очень интересные темы в разработке игр и компьютерной графике, которые наверняка Вас заинтересуют:
Если остались вопросы
Как обычно, если у Вас остались какие-то вопросы, задавайте их в комментариях, я всегда отвечу. За любое доброе слово или правку ошибок я буду очень признателен.