Качество шейдеров что это

Качество шейдеров что это

«Что такое шейдеры?» — очень частый вопрос любопытных игроков и начинающих игровых разработчиков. В этой статье доходчиво и понятно об этих страшных шейдерах расскажу.

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

До того, как появились первые графические ускорители, всю работу по отрисовке кадров видеоигры выполнял бедняга центральный процессор.

Отрисовка кадра, довольно рутинная работа на самом деле: нужно взять «геометрию» — полигональные модели (мир, персонаж, оружие и т.д.) и растеризовать. Что такое растеризовать? Вся 3d модель состоит из мельчайших треугольников, которые растеризатор превращает в пиксели (то есть «растеризовать» значит превратить в пиксели). После растеризации взять текстурные данные, параметры освещенности, тумана и тп и рассчитать каждый результирующий пиксель игрового кадра, который будет выведен на экран игроку.

Так вот, центральный процессор (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 и не только их.

Полезная информация

Теперь Вы знаете что такое шейдеры, но помимо шейдеров, есть другие очень интересные темы в разработке игр и компьютерной графике, которые наверняка Вас заинтересуют:

  • Партиклы (системы частиц),- техника создания потрясающих эффектов в современных видео-играх. Обзорная статья и видео с уроками создания эффектов в Unity3d
  • Для начинающего Unity3d программиста,- если Вы задумываетесь о разработке видеоигр, в качестве профессиональной карьеры или хобби, эта статья содержит отличный набор рекомендаций «с чего начать», «какие книги читать» и т.д.
Читайте также:  Как уменьшить фигуру в фотошопе

Если остались вопросы

Как обычно, если у Вас остались какие-то вопросы, задавайте их в комментариях, я всегда отвечу. За любое доброе слово или правку ошибок я буду очень признателен.

В рамках данной статьи, я расскажу вам простыми словами что такое шейдеры, а так же зачем они нужны.

Требования к качеству компьютерной графики растут от дня к дню. Раньше 2D-графика считалась вполне достаточной и ее хватало, чтобы поражать воображение миллионов людей. В нынешнее же время, визуализации уделяется существенно больше внимания.

Однако, в периоды становления нынешней 3D-графики, многие столкнулись с той проблемой, что встроенных фильтров и примочек видеокарт (GPU) попросту не хватает. К примеру, нередко возникала необходимость в собственных эффектах. Поэтому многое приходилось делать вручную и проводить расчеты в основном процессоре компьютера (CPU), что несомненно отражалось на производительности (при том, что видюха, как говорится, "простаивала" без дела).

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

Что такое шейдеры и зачем они нужны?

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

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

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

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

В чем польза подхода с шейдерами?

С шейдерами есть некая неразбериха, так как существуют различные стандарты языков программирования под разные библиотеки (GLSL — OpenGL, HLSL — DirectX и так далее), и это не считая того, что сами производители видеокарт могут поддерживать различные возможности. Однако, плюс их использования легко можно оценить, взглянув на картинку выше с примером разницы отображения между DirectX 9 и DirectX 10.

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

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

1. Повышается скорость и производительность компьютера (ведь центральному процессору нет необходимости производить расчет графики вместо GPU).

Читайте также:  Топ запросов на авито

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

Теперь, вы знаете что такое шейдеры, зачем они нужны и какая от них польза.

Это вторая часть нашего гайда. Первая, где собраны основные настройки вроде разрешения, качества текстур и теней, вы можете прочитать по ссылке.

Качество освещения (Lightning Quality)

То, насколько правдоподобно симулируется освещение в игре. Если это единственный подобный параметр в игре, то именно в эту настройку заложили уйму других, будь-то и объемный свет, и рассеивание лучей, и отражения, а иногда даже глобальное затенение. Освещение — это, пожалуй, вообще едва ли не самое основное из всего, что влияет на красоту картинки: оно делает ее объемной, натуралистичной, правдоподобной. Но и ресурсов все это дело «кушает» тоже немало. Именно поэтому, например, Nvidia так расхваливает свои новые RTX-видеокарты — они изначально разработаны под Ray Tracing — метод рендеринга, предполагающий правдоподобную симуляцию каждого луча.

Влияние на производительность

Зависит от движка, но почти во всех современных играх — очень сильное. Симулировать свет — это очень непросто, так что врубайте «ультра» только если у вас действительно мощная видеокарта.

Качество эффектов (Effects Quality)

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

Влияние на производительность

Тоже зависит от игры, чаще всего не особенно высокое. Но чем выше этот параметр, тем сильнее будет нагружаться ваша видеокарта в загруженных сценах, например, при масштабных перестрелках. Так что если игра начинает «подлагивать» в особо динамичные моменты, можно попробовать поиграться с этим ползунком, прежде чем снижать, например.

…Качество шейдеров (Shader Quality)

Шейдеры — это специальные программы для вашей видеокарты, исполняемые ее процессором. Грубо говоря, это такие «инструкции» от игры вашей GPU, по которым та понимает, как именно нужно отрисовывать тот или иной эффект. Чаще всего шейдеры используются для улучшения освещения, затенения, создания эффектов преломления лучей в воде (помните, как взрывала мозг та самая «шейдерная водичка из Half-Life 2: Lost Coast?), отражений, рассеиваний и так далее. Так что да, эта опция работает в тандеме с другими параметрами: качеством освещения и качеством теней. Существует три вида шейдеров: вершинные, геометрические и пиксельные, но игры, где можно отрегулировать качество каждого из них отдельно, встречаются невероятно редко.

Соответственно, чем выше качество шейдеров, тем лучше описанные выше эффекты, красивее тени и свет, реалистичнее геометрия — и тем сильнее нагрузка на видеокарту. Именно на видеокарту — потому что шейдеры считаются только GPU.

Влияние на производительность

Чаще всего — высокое. Например, в GTA V это один из самых «тяжелых» параметров в игре — снизив качество шейдеров с «Ультра» на средниее значение, вы получите прирост больше, чем в 15 FPS. Но бывает и так, что снижение этого параметра почти ничего не дает, как, например, в Mass Effect Anromeda.

Ссылка на основную публикацию
Какой ток на выходе usb
В современном мире гаджетов использование зарядных устройств в автомобиле — это необходимость. Т.к. гаджетов у меня много и в машине...
Как фото распечатать как документ
«Фото на документы онлайн» поможет избежать похода в фотосалон для получения фотографий на документ. Рекомендуемое применение редактора «Фото на документы...
Как устроена камера телефона
Камера смартфона это очень сложный элемент. Узнаем как же устроена камера современного смартфона? Если вы думаете, что камера смартфона это...
Какой телефон щас в моде
На Российском рынке представлено огромное количество смартфонов на любой вкус и цвет. Ассортимент настолько широк, что каждый любой пользователь гарантированно...
Adblock detector