Как узнать какие шейдеры поддерживает видеокарта

Обновлено: 18.05.2024

Сразу оговорюсь, что материал рассчитан на тех, кто никогда не работал с шейдерами или вообще не знаком с разработкой игр, то есть это в некотором смысле научпоп.

Слово «шейдер» в контексте разработки игр очень популярно, слышать его могли и те, кто игры не делает. Само слово изначально появилось от англ. shading (затенение) — первые шейдеры использовались, чтобы передавать глубину с помощью работы со светом, блеском, тенями и прочим. Со временем шейдеры стали использоваться для совершенно разного вида постобработки и вообще отрисовки примерно всего.

Говоря общими словами, шейдер — это просто программа для графической карты. То есть то, что пишется школьниками на паскале (хипстерами на пайтоне) — это программы для вашего центрального процессора (CPU), а шейдеры — для графического (GPU). Особенность же этих программ выходит из особенностей GPU — они работают параллельно на сотнях маленьких ядех вместо нескольких больших, преимущественно осуществляя математические операции.

Теперь разберемся, как это все работает.

В общем случае цель шейдера — отрисовать некоторый объект. Поэтому возьмем куб, распишем процесс его отрисовки и посмотрим, где используются шейдеры и зачем. Сначала опишем сам куб. Для графической карты это 8 точек, между некоторыми из которых есть плоскость. Каждая из точек описывается тремя числами (правильно сказать, что это вершины). Помимо этого у кубика есть цвет и положение внутри мира.

Процесс отрисовки, если его достаточно упростить (что я и сделаю в рамках этой статьи), можно поделить на несколько шагов:

1. Получение входных данных из памяти.
2. Выполнение шейдера вершин.
3. Растеризация.
4. Выполнение шейдера пикселей (фрагментов).
5. Проведение тестов «глубины».
6. Отрисовка на текстуру для экрана.

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

Как видите, в процессе отрисовки можно заметить два вида шейдера. На самом деле, сейчас есть чуть больше видов, но они не столь важны для разбора, так как имеют более специфичный характер использования, а мы рассказываем на пальцах. Но вот те два, что нас волнуют:

1. Шейдер вершин.
2. Шейдер фрагментов.

Как сказано было ранее, этот шейдер (или группа шейдеров по очереди) занимается переводом координат относительно объекта, в координаты на текстуре.

На картинке начало координат немного не соответствует реальным, что все так же не влияет на понимание процесса :)

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

Из занимательного — итоговые вершины располагаются на так называемой плоскости Clip Space и находятся в диапазоне от -1.0 до 1.0. Именно с такими координатами потом и работает видеокарта.

После преобразований вершин и растеризации нужно высчитать цвет каждого фрагмента (помним, что для упрощения это пиксели). Для примера возьмём наш куб: мы помним, что он залит одним цветом. Просто сделаем так, чтобы цвет каждого фрагмента стал цвета куба и все:

Выглядит немного странно, да? Проблема в том, что мы не видим ни теней, ни текстур. Будь на кубе какая-либо текстура, мы бы заметили переход между гранями. Вот возьмем текстуру:

Теперь достаточно в каждом пикселе просто брать цвет из текстуры. Но чтобы это сделать, нужно добавить для каждой точки куба еще информацию: UV канал. Это координат вида (u, v). Отсюда и название, так как x и y были заняты. Она присваивается вершине объекта и обозначает точку на текстуре, которая ей соответствует. Чтобы было понятнее, если мы хотим на каждую грань куба нарисовать знакомое нам лицо, то UV координаты для каждой грани будут выглядеть предельно просто:

Модифицировать их никак не надо. Более того, считать координаты для каждой точки — тоже не нужно. Этим занимается GPU, самостоятельно интерполируя точки из вершин. Тогда достаточно просто сказать для каждой точки что-то вроде

Это очень условный пример, но примерно так в простейшем случае оно и работает:

Помимо натягивания текстур в пиксельном шейдере можно, например, получить информацию об освещенности и добавить к цвету черного пропорционально затемнению в этой точке, тогда объект будет менее плоским. Это, конечно, если просчет освещенности где-то написан, потому что сама по себе видеокарта о понятиях освещения и теней мало чего знает. Вообще делать с цветами можно что угодно, например подменять их в зависимости от игрока:

Помимо UV канала в шейдер в зависимости от его вида приходят разные данные. Они зависят от игрового движка и графической библиотеки. Обычно туда входят данные о местоположении точки, нормаль (вектор исходящий от поверхности в точке), UV канал. Но также шейдер вершин может передавать данные в пиксельный шейдер. Если это координата, то она будет проинтеполирована на основе положения фрагмента относительно вершин, между которыми он находится, как, например, UV данные.

Всем привет! Сегодня разберем, что такое шейдеры в видеокарте, что дают, как влияют на обработку графики в играх и для чего используются, какие бывают версии и как узнать шейдеры своей платы. О том, что значит 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 в маркировки видеокарты и что это дает покупателю». Буду признателен, если вы поделитесь этим постом в социальных сетях. До скорой встречи!

Попутно, можно ли определить какую версию шейдеров она поддерживает ?

В DirectX делаешь lpD3D->GetDeviceCaps(dwAdapter,D3DDEVTYPE_HAL,&Caps) и смотришь
Caps.PixelShaderVersion или Caps.VertexShaderVersion.
OGL не использую, но думаю там примерно также.

kerosene
Да, и в Дельфи !

flaps
в ogl доступ к шейдерам через расширения идёт. поэтоум проверить их поддержку <=> проверить поддержку нужных расширений. (смотря какие шейдеры ты юзаешь)

st0ke
> в ogl доступ к шейдерам через расширения идёт. поэтоум проверить их поддержку <=> проверить поддержку нужных расширений.

> (смотря какие шейдеры ты юзаешь)

Я не знаю .
А какие бывают ?

Может знаешь в составе GLScene есть демка "\GLScene\Demos\materials\texcombine". В ней используются шейдеры. На некоторых видеокартах это не работает. Вот и вопрос как проверить, чтобы программа не зависала?

--- можно ли определить какую версию шейдеров она поддерживает ?
нельзя. и слава богу
есть шикарный механим расширений и не дурацкие капсы

Это фрагментные шейдеры. Вершинные - расширение GL_ARB_vertex_program

Это в Си. А мне в Delphi нужно. А ещё лучше в GLScene.

KAP
> if ChechExtension('GL_ARB_fragment_program') then шейдеры 2.0
> if ChechExtension('GL_NV_texture_shader') then шейдеры 1.0 от NVidia
> if ChechExtension('GL_NV_texture_shader2') then шейдеры 1.2 от NVidia
> if ChechExtension('GL_NV_texture_shader3') then шейдеры 1.3 от NVidia
> if ChechExtension('GL_ATI_fragment_shader') then шейдеры 1.4 от ATI

Это конечно замечательно, если бы только ещё узнать где взять функцию ChechExtension ?

а вот на дельфи пусть вам её переведут благородные господа Дельфины, коих тут немало.

Да не мучайся!
Качни мой Matrix Tester из Качалки этого сайта.
Все пишет сразу про видюху.
Насчет более старших версий обращаться ко мне.

А чего язык немецкий, а не китайский ?
Или ты тоже не смог там найти то, что советуешь ?


Помогите разобраться!
Купил сыну игру и при тестировании ПК на совместимость с игрой (на игровом диске есть такая прога) выдается информация что совместимо все, только в разделе видеокарта стоит несовместимость версий Shader Model у меня 2.0, а нужно 3.0 или выше. Насколько я понял это программа построения теней. К чему она относится, куда ее ставить и главное где взять, я с этим сталкиваюсь впервые. Скачал новые дрова с сайта NVidia у меня видеокарта AGP GeForce FX-5700 и теперь не знаю чтo делать. Стоит Винда ХР Про СП2, мать GA на VIA KT-133.
Говорят нужно видеоадаптер менять, советуют видеоадаптер GeForce 7600GS. А с моим видеоадептером ничего сделать нельзя, без другого видеоадаптера не пойдет и этот Shader Model 3.0 никак не воткнуть на старый? Я живу далеко на Севере в маленьком поселке, где нормальный комп не взять, не говоря о редких вариантах видеокарт, поэтому я так настойчиво спрашиваю.
И что можно сказать об этой карте, она AGP или нет? Потому что там и PCIE присутствует.

Gainward GeForce 7600GS DDR3 256Mb RTL

Характеристики
Интерфейс
AGP 8x

Объем памяти
256 Мб

Дополнительные параметры:
PCIE x16 Gainward Bliss GS-GLH DT/ 8217 256Mb 128bit 1.4ns DDR3 (TV-Out, DVI)
GPU: NVIDIA GeForce 7600GS
GPU Clockspeed: 500+ MHz
Memory: 256MB 1,4ns DDR3
Memory Clockspeed: 1200+ MHz
Pixels per clock (peak) : 12
Bandwidth: GB/s
Ramdac: 400 MHz
Bus: PCI-Express
Cooling: Fan (Two-slot)
Video-Features: Component, S-Video & Composite Out
Connectivity: Dvi + Vga + Video-Out


Domber
Поддержка шейдеров должна быть аппаратной, т.е. поддерживаться самой картой, "прошить" новую версию шейдеров никак нельзя.
Насколько я понял это программа построения теней.
Шейдер задает вид поверхности объекта, включая освещение, обработку пикселей и т.д.
Насчет карты - где-то ошибка в описании, не может быть PCIE и AGP одновременно (по крайней мере, на этой карте).
Для твоей материнки нужна карта AGP, однако твоя мать поддерживает только 4X (насколько я знаю), так что если купишь видеокарту AGP 8x, она будет работать на скорости 4X (потеря производительности будет

20%).
Вообще если нужна именно поддержка третьих шейдеров, можешь обратить внимание на другие модели - GeForce 6600, 6600GT, 7600GS DDR2, 7600GT, Radeon X1600, X1650 и т.д.
Вот только какой у тебя процессор? Просто если слабый проц, брать быструю видюху нет смысла.


Да и если материнская плата не поддерживает PCI-E, то что бы поставить новую видеокарту, прийдется брать новую материнку.



Спасибо за участие. Процессор Ahtlon XP 2800, ОЗУ 1,5Мb
6600GT будет нормально работать с этими комплектующими?
Кстати и Обливион и Феар у меня сейчас нормально идут с моей видюхой, правда не на самых высоких разрешениях.
А вообще я впервые столкнулся с таким понятием как Shader Model, хотя сам работаю с ПК. На диске с игрой (Spliter cell Double agent) написано что идет на картах кот. поддерживают Shader 3.0, но кто из обычных людей знает об этом, тем более игру сын сам купил и продавец девчушка молоденькая его долго пытала, типа . Точно не придешь сдавать обратно. Могла бы причину выяснить почему сдают диски и объяснить. Но у нас сервис направлен только на то чтобы продать побольше. Ну это лирика, просто ездили за 600км в другой город, а обнаружилось все только по возвращению. И честное слово, еслибы я прочитал еще там эти требования все равно взял бы диск, потому что оказался натуральным ламером в этом вопросе :-(


6600GT будет замечательно работать с этими комплектующими))
Не гонись завысокими разрешениями, особенно если экран компьютера по диагонали 17" или меньше ;)
С точки зрения "красивости" картинки лучше ставить не выокие разрешения, а поднимать настройки качества - AA, AF - оно покрасивше будет


Domber
6600GT как раз подойдет, хотя лучше взять 7600GS (можно и с DDR2-памятью, если DDR3 не будет) - и побыстрее, и кушает поменьше, и цена невысокая.


Domber, только смотри.. если у тебя материнка поддерживает AGP, то видеокарту нужно брать только с AGP поддержкой. Если видеокарта будет с PCI-E, то она под твою материнку не подойдет.


Отец Викториус, а разве 7600GS есть с поддержкой AGP? И стоит она не дешево.


А объем памяти играет большую роль? 256 или 512 и почему цены так отличаются, есть 256 которая стоит гораздо дороже чем 512Мb


Картьожнiк
а разве 7600GS есть с поддержкой AGP?
Да, и найти их не проблема. Например, в московском Ф-центре она есть от Asus или Leadtek
Хотя насчет их наличия неподалеку от места жительства автора я не уверен.
А объем памяти играет большую роль?
Видеокартам класса 6600GT/7600GS,GT нужно только 256 мб памяти, не больше и не меньше.
есть 256 которая стоит гораздо дороже чем 512Мb
Ну во-первых зависит от производителя, а во-вторых на версии с увеличенным до 512мб объемом памяти зачастую ставят более медленную память, и, как следствие, такие "экстра-версии" проигрывают по скорости нормальным 256-мегабайтным картам.


Отец Викториус, спасибо за подробное разъяснение. У нас конечно ничего не купишь, поэтому подумываю продать ПК и заказать другой. А PCI-E видеоадаптеры работают быстрее, ну в смысле они лучше, чем AGP? И еще вопрос, лучше брать ПК на базе AMD 64-разрядный или Core Duo от Intel.
Комп вообщем в основном для сына, можно сказать нужен для игр. Я до сегодняшнего дня отдавал предпочтение AMD. Какую конфигурацию посоветуешь для геймерского ПК. В пределах 30000-40000руб.
Заранее спасибо.
P.S. Сегодня до воскресенья уезжаю в командировку, поэтому ответить смогу позже.


Domber
А PCI-E видеоадаптеры работают быстрее, ну в смысле они лучше, чем AGP?
Разница в скорости между ними невелика (хотя PCI-Express все же быстрее), однако карты PCIE значительно дешевле AGP-собратьев, к тому же найти нужную AGP-карту сейчас становится все сложнее и сложнее, так что PCI-Express намного перспективнее в плане будущих апгрейдов, да и все новые чипсеты поддерживают только его.
И еще вопрос, лучше брать ПК на базе AMD 64-разрядный или Core Duo от Intel.
За указанную сумму - однозначно Core 2 Duo!
Конфиг примерно такой:
Материнская плата: ASUS P5B
Процессор: Intel Core 2 Duo E6300
Кулер: Thermaltake Big Typhoon VX
Видеокарта: Radeon X1950XT или X1950XT; Из Nvidia - 7900GT, 7950GT, или 7900GTX
Оперативная память: 2x1024Mb 667MHz DDR2 Samsung
Блок питания: FSP 500W
Жесткий диск: 250 Gb Seagate
DVD-привод: Pioneer 111
Корпус

за 1000-1500р
Картридер

300р
Хотя я не знаю, по каким ценам ты будешь брать системник.
Если денег будет нехватать - бери видеокарту вроде 7950GT или 1950XT; если же сможешь немного добавить - возьми проц E6400, видеокарту 1950XTX и/или отдельную PCI-звуковую карту.


Если только для игр то нужно собирать на AMD,по крайней мере об этом пишут везде и всегда.Хотя это извечный спор,я бы сказал не разрешимый.Но это лично мое мнение.


Отец Викториус спасибо за исчерпывающий ответ! Будем думать.


помогите пожалуйста))))))
что нужно поменять, чтобы пошли shader model 3.0. у мя 2.0
у мя видюха ati x800 gto 256мб.
уж очень хочу поиграть например в Assassins Creed. всё подходит кроме шейдеров(((((((((((
хелп ми плиз))))))


Твоя видеокарта поддерживает только вторые шейдеры. Нужно заменить видеокарту на более новую. Если напишешь какой у тебя разъем под видеокарту и сколько ты готов потратить денег, то могу подсказать что нибудь подходящее.


linker11
Ну тогда покупай хотя бы радик Х1300. Но я не гарагтирую, что на ней ассассин будет даже на минималках идти. Скорее всего не полетит:(


Здравствуйте. У меня вопрос по этой же теме. Моя видеокарта тоже не поддерживает 3 шейдеры. Radeon 9600 pro. Я хочу знать, есть ли на разъем моей материнской платы видюха с 3 шейдерами, но на беду не знаю ни названия порта карты, ни названия своей материнки. Вот все общие сведения, что выдает программа:

Имя ОС Microsoft Windows XP Professional
Версия 5.1.2600 Service Pack 2 Сборка 2600
Изготовитель ОС Microsoft Corporation
Изготовитель GBT___
Модель AWRDACPI
Тип Компьютер на базе X86
Процессор x86 Family 15 Model 2 Stepping 9 GenuineIntel

2411 МГц
Процессор x86 Family 15 Model 2 Stepping 9 GenuineIntel

2411 МГц
Версия BIOS Award Software International, Inc. F7, 14.07.2003
Версия SMBIOS 2.3
Устройство загрузки \Device\HarddiskVolume1
Аппаратно-зависимый уровень (HAL) Версия = "5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)"
Полный объем физической памяти 1 536,00 МБ
Доступно физической памяти 1,02 ГБ
Всего виртуальной памяти 2,00 ГБ
Доступно виртуальной памяти 1,96 ГБ
Файл подкачки 3,35 ГБ

Есть еще такие параметры в секции: Ресурсы аппаратуры/Конфликты/Совместное использование

IRQ 9 Microsoft ACPI-совместимая система
IRQ 9 Intel(R) 82801EB SMBus контроллер - 24D3
IRQ 9 Мультимедиа аудиоконтроллер
IRQ 9 VAXSCSI Controller
IRQ 9 SCSI/RAID хост-контроллер

IRQ 16 ATI Radeon 9600/9550/X1050 Series
IRQ 16 Intel(R) 82801EB USB универсальный хост-контроллер - 24D2
IRQ 16 Intel(R) 82801EB USB универсальный хост-контроллер - 24DE
IRQ 16 Generic 56K HCF Data Fax Modem

Порт ввода/вывода 0x00001400-0x0000FFFF Шина PCI
Порт ввода/вывода 0x00001400-0x0000FFFF Intel(R) 82801EB SMBus контроллер - 24D3

Порт ввода/вывода 0x000003B0-0x000003BB Intel(R) 82865G/PE/P/GV/82848P CPU - AGP контроллер - 2571
Порт ввода/вывода 0x000003B0-0x000003BB ATI Radeon 9600/9550/X1050 Series

Если кто поймет что-то исчерпывающее в этих параметрах и сможет мне помочь, буду очень благодарен. Буду благодарен также, если кто-то сможет подсказать, где искать название материнки или порта, или если в этих параметрах это написано, то скажет, что именно обозначает название материнской платы или порта.

Читайте также: