Что такое подгрузка шейдеров

Шейдеры. Что и как

Расскажу, как в общем случае они работают, что умеют и как их используют

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Кэширование шейдеров NVIDIA. ВКЛ или ВЫКЛ

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

Эта статья расскажет о кэшировании шейдеров NVIDIA. Нужно определиться, что лучше, включить или отключить функцию. На видеокарте Gigabyte GTX 1080 и последних драйверах параметр по умолчанию включён. В большинстве игр настройка не влияет на частоту кадров.

Что такое кэширование шейдеров NVIDIA

Параметр в некоторых приложениях снижает нагрузку ЦП путём сохранения скомпилированный шейдеров на диске. Используется только при запуске игры на первом построении шейдеров. Ранее собранный шейдер будет уже просто извлечён из дискового кэша.

Типичные ситуации применения:

Включеноувеличивает плавность изображения и снижает время загрузки;
Отключеноиспользуется для экономии места на локальном диске.

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

Как отключить кэширование шейдеров

NVIDIA

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

В классической Панели управления NVIDIA откройте раздел Параметры 3D > Управление параметрами 3D. Измените значение параметра Кэширование шейдеров на Выключено. В целом это может освободить дополнительно несколько гигабайт дискового пространства.

Что такое подгрузка шейдеров. Смотреть фото Что такое подгрузка шейдеров. Смотреть картинку Что такое подгрузка шейдеров. Картинка про Что такое подгрузка шейдеров. Фото Что такое подгрузка шейдеров

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

Steam

Предварительное кэширование позволяет Steam загружать заранее скомпилированные графические шейдеры для Вашего компьютера. Благодаря этому игры, использующие Vulkan или OpenGL, будут загружаться быстрее, а стабильность частоты кадров возрастёт.

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

Что такое подгрузка шейдеров. Смотреть фото Что такое подгрузка шейдеров. Смотреть картинку Что такое подгрузка шейдеров. Картинка про Что такое подгрузка шейдеров. Фото Что такое подгрузка шейдеров

Использование кэширования шейдеров не увеличивает поточное количество кадров в секунду. Но всё же стабильность и среднее количество кадров возрастает. Постоянная загрузка шейдеров приводит к нежелательным просадкам производительности на слабых компьютерах.

Источник

Что такое подгрузка шейдеров

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

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

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

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

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

Что такое подгрузка шейдеров. Смотреть фото Что такое подгрузка шейдеров. Смотреть картинку Что такое подгрузка шейдеров. Картинка про Что такое подгрузка шейдеров. Фото Что такое подгрузка шейдеров

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

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

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

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

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

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

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

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

Источник

Что такое шейдеры? Просто о сложном для начинающих

Что такое подгрузка шейдеров. Смотреть фото Что такое подгрузка шейдеров. Смотреть картинку Что такое подгрузка шейдеров. Картинка про Что такое подгрузка шейдеров. Фото Что такое подгрузка шейдеров

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

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

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

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

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

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

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

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

Источник

Решение проблем с тенями и шейдерами в COD MW (Warzone/Multiplayer/Company)

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

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

Пиксельные тени могут возникать при следующих обстоятельствах:

1. Вы меняли угол обзора (105+) — сбросьте этот параметр и посмотрите на результат.

2. У вас криво установились шейдеры, либо не установились вовсе (что у меня и было) — удалите все файлы с расширением .psob и .dcache в «Call of Duty Modern Warfare\main», удалите папку «Call of Duty Modern Warfare» в документах и начните проверку целостности файлов игры через лаунчер близард.

САМОЙ ЧАСТОЙ РЕКОМЕНДАЦИЕЙ С ЛЮБЫМИ ПРОБЛЕМАМИ С КЛОДОЙ СВЯЗАНО С ПЕРЕУСТАНОВКОЙ ИГРЫ, НО ЭТОТ МЕТОД МОЖЕТ РЕШИТЬ БОЛЬШИНСТВО ПРОБЛЕМ И СЭКОНОМИТЬ ВАШЕ ВРЕМЯ.

3. У вас включено/выключено сглаживание — иногда игра с этим параметром настройки графики помогает решить проблему.

4. У вас сбились настройки масштабирования (у меня пару раз сбивались настройки разрешения и масштабирование падало до 66% от 1920×1080) — просто заново выставьте разрешение вашего экрана.

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

Также проблемы с загрузкой шейдеров.

1. Шейдеры не загружаются, в следствие чего вас не пускает в той или иной режим игры.

2. Шейдеры не устанавливаются, зависая на определенном проценте установки/загрузки.

3. Шейдеры заново устанавливаются при каждом входе в игру (по правильному они должны установиться один раз, после первой установки игры/переустановки(обновления) драйверов видеокарты/установки обновления колды).

ВСЕ вышеперечисленные проблемы фиксятся переустановкой шейдеров. Для начала, выполните операцию, описанную в пункте 2 предыдущей проблемы и зайдите в игру. Шейдеры должны будут заново загрузиться/установиться.

Спасибо за внимание. Надеюсь руководство кому-то поможет в борьбе за красивую картинку и возможность поиграц.

p.s. оторвал бы руки тем, кто занимался сетевой составляющей в этой игре.

Да, согласен. Меня Варзон сильно затянула, поэтому я в нее постонно играю, не смотря на все эти баги. Просто очень удивляюсь, что в одной игре может быть столько косяков:)

ХЗ, именно как Рояль мне Варзона не нравится. Апекс гораздо лучше.

Но вот другие режимы это топ! Режим войны стенка на стенку вообще топ! Если расширить на всю карту и добавить технику, то кому будет нужен Батлфилд?
И добыча гораздо фановее!

«Если расширить на всю карту и добавить технику, то кому будет нужен Батлфилд?»
Режим ground wars. Но техника картонная, да и той разрушаемости, как в той же батле нет.

Нафиг разрушаемость. Масштаб и движуха лучше.
Почти Планетсайд 2.

Даже в ПУБГ всего этого было намного меньше.

Чиво? это шутка такая?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *