Как убрать загрузку шейдеров в апексе

Как легко исправить ошибку загрузки и компиляции шейдеров Apex Legends

Как убрать загрузку шейдеров в апексе. how to fix apex legends loading and compiling shaders error easily 6923174. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-how to fix apex legends loading and compiling shaders error easily 6923174. картинка Как убрать загрузку шейдеров в апексе. картинка how to fix apex legends loading and compiling shaders error easily 6923174. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Еще одна недавняя проблема, с которой столкнулись игроки, — это проблемы с загрузкой и компиляцией шейдеров. При запуске Apex Legends игроки заметили проблему компиляции шейдера, которая загружается бесконечно. Некоторым игрокам приходилось ждать более 15 минут, пытаясь войти в игру.

Предлагаемое исправление ошибки загрузки и компиляции шейдеров Apex Legends

В 10-м сезоне Apex Legends было множество ошибок и проблем с сервером, влияющих на игровой процесс. Разработчики Respawn Entertainment активно участвуют в таких форумах, как Reddit, где игроки постоянно дают конструктивные отзывы, что было реализовано в игре.

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

Источники утверждают, что Apex Legends загружала и компилировала шейдеры в попытке уменьшить задержку. О проблеме сообщили в основном игроки на ПК. Таким образом, решение этой проблемы применимо только к ПК.

Разработчики Respawn Entertainment еще не сделали официального заявления сообществу Apex Legends относительно возможного исправления.

Источник

Apex Legends застрял на «загрузке и компиляции шейдеров» для некоторых игроков, EA работает над исправлением (официальный обходной путь внутри)

Published by IT Info on October 1, 2021

Разработанная Respawn Entertainment и опубликованная Electronic Arts, Apex Legends-одна из популярных боевых королевских видеоигр FPS. Он доступен на нескольких платформах, включая Windows, PlayStation, Nintendo Switch и Xbox.

В Apex Legends участвуют отряды из трех игроков, и в каждой отдельной игре есть 20 таких отрядов, которые сражаются друг против друга. Он похож на другие известные игры Battle Royal, такие как PUB-G и Call of Duty (COD).

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

Как убрать загрузку шейдеров в апексе. apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188. картинка Как убрать загрузку шейдеров в апексе. картинка apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Как убрать загрузку шейдеров в апексе. apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188 1. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188 1. картинка Как убрать загрузку шейдеров в апексе. картинка apex legends d0b7d0b0d181d182d180d18fd0bb d0bdd0b0 d0b7d0b0d0b3d180d183d0b7d0bad0b5 d0b8 d0bad0bed0bcd0bfd0b8d0bbd18fd186d0b8d0b8 d188 1. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.( Источник )

Иногда, когда я открываю Apex на своем ПК, мне требуется загрузить шейдеры для игры. Это всегда занимает 15+ минут, и это очень раздражает. Если игра не загружает и не компилирует шейдеры, я и мои товарищи по команде предварительно загружаем их навсегда, и мы вынуждены перезапускать игру, и именно тогда шейдеры загружаются. Кто-нибудь знает причину, по которой это происходит? ( Источник )

Игра зависает, и мне нужно перезапустить апекс, мой брат уже вернулся в нашу игру, но мне нужно загрузить и скомпилировать шейдеры, прежде чем я снова присоединюсь к матчу ( Источник )

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

В ответ на проблему загрузки Apex Legends один из членов команды EA заявил, что он ищет исправление, которое появится как можно скорее.

Они также предоставили временные обходные пути, которые могут вернуться в игру.

Временные обходные пути включают:

-Установите последние версии драйверов

-Отключите кеш шейдеров в панели управления NVidia> нажмите «Применить»

-Включить кэш шейдеров> Нажмите Применить

Как убрать загрузку шейдеров в апексе. Apex Legends loading issue cknowledged. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Apex Legends loading issue cknowledged. картинка Как убрать загрузку шейдеров в апексе. картинка Apex Legends loading issue cknowledged. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.( Источник )

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

Мы надеемся, что эта досадная ошибка загрузки и компиляции Apex legends скоро будет устранена, и игроки смогут непрерывно играть в видеоигру.

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

Источник

How to fix Apex Legends Loading and Compiling Shaders problem

The Loading and Compiling Shaders screen is frustrating Apex Legends players in Season 10, so here’s an easy guide on how to fix it.

Как убрать загрузку шейдеров в апексе. Apex loading screen issue. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Apex loading screen issue. картинка Как убрать загрузку шейдеров в апексе. картинка Apex loading screen issue. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Fans have been jumping into Apex Legends Season 10, but unfortunately, players are reporting a problem with Loading and Compiling Shaders when loading into a game. Here’s how to fix it.

While Apex Legends Season 10 launched with plenty of new content to get stuck into, it also comes with a few issues to be ironed out. The new character Seer is due to be nerfed after an overpowered launch, and Octane is seeing some audio problems.

Now, some players are reporting an issue which is seeing them stuck on a loading screen, causing long waits before being allowed into the game.

Как убрать загрузку шейдеров в апексе. Players still frustrated with Octane audio issues in Apex Legends PIC 1. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Players still frustrated with Octane audio issues in Apex Legends PIC 1. картинка Как убрать загрузку шейдеров в апексе. картинка Players still frustrated with Octane audio issues in Apex Legends PIC 1. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

During Season 10, fans have been seeing a loading screen before hopping into the game that reads “Loading and Compiling Shaders.”

While it doesn’t appear to break the game, it is leaving players with long waits before each new session. The screen takes several minutes to resolve itself, with some Reddit users even reporting it can last for as long as 15 minutes.

It’s left many scratching their heads trying to find a workaround for this Apex Legends loading and compiling shaders issue. Simply deleting and reinstalling the whole game doesn’t appear to have brought much luck.

It has been speculated that Apex is attempting to load the shaders before the game starts as a way of reducing lag, but this hasn’t been confirmed at the time of writing. Until Respawn comes out with an official fix, here’s a method found to stop the loading and compiling shaders issue.

It’s worth noting that this solution, found by Reddit user Xavierblue, is only applicable to those playing on PC. Here’s a walkthrough:

It’s highly likely that Respawn will fix the loading and compiling shaders issue themselves in the coming days, but this method will hopefully help PC players in the meantime.

For more on Apex Legends, be sure to check out this great hiding spot on World’s Edge and why NICKMERCS thinks it’s more challenging than Warzone.

Image credits: Respawn Entertainment

Как убрать загрузку шейдеров в апексе. CharlieIntel2021 White. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-CharlieIntel2021 White. картинка Как убрать загрузку шейдеров в апексе. картинка CharlieIntel2021 White. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Apex Legends

Apex Legends End of Year Sale: Skins, bundles, & more

Apex Legends has a brand new End of Year Sale in the store, with various skins and bundles up for grabs at a discounted price.

Как убрать загрузку шейдеров в апексе. apex legends end of year sale. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-apex legends end of year sale. картинка Как убрать загрузку шейдеров в апексе. картинка apex legends end of year sale. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

The Apex Legends End of Year Sale is officially here, with deals and offers for various skins, packs, and more.

With the Apex Legends Raiders Collection Event coming to an end, players are eager for what’s next. With the second split also starting at the same time as the end of the Collection Event, players will be hopping back on to grind Ranked Leagues.

With that being said, a new sale has entered the store. This is the End of Year Sale, which contains a variety of skins and bundles at a discounted price. Let’s get into the details.

Как убрать загрузку шейдеров в апексе. apex legends wraith buff. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-apex legends wraith buff. картинка Как убрать загрузку шейдеров в апексе. картинка apex legends wraith buff. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

With Christmas and the new year is coming, players have been enjoying the Winter Express LTM, which is available until December 28.

To get players even more so in the mood for the new year, Apex Legends has released an End of Year Sale.

Apex Legends End of Year Sale

Как убрать загрузку шейдеров в апексе. k9c67rvxxax61. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-k9c67rvxxax61. картинка Как убрать загрузку шейдеров в апексе. картинка k9c67rvxxax61. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

The Apex Legends End of Year Sale includes six bundles with various skins, Apex Packs, and even one with a festive charm.

The skins are for Valkyrie, Pathfinder, Fuse, and Horizon. These skins are all Launch bundle skins for the Legends, except for Pathfinders, which was a promotional skin for the Fight Night event released back in Season 7.

Valkyrie’s Launch Bundle skin has been recolored, while the rest are all their original forms.

Apex Legends End of Year Sale skins & bundle prices

Как убрать загрузку шейдеров в апексе. apex legends memoir noir pathfinder. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-apex legends memoir noir pathfinder. картинка Как убрать загрузку шейдеров в апексе. картинка apex legends memoir noir pathfinder. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Here are all the skins and bundles up for sale, including their price:

That’s all for Apex Legends’ End of Year Sale. For more cosmetics, check out the Twitch Prime skin for December 2021.

Image Credits: PlayStation / Respawn Entertainment

Источник

Настройка кэширования шейдеров в видеокартах NVidia

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

Как убрать загрузку шейдеров в апексе. nastrojka keshirovaniya shejderov. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-nastrojka keshirovaniya shejderov. картинка Как убрать загрузку шейдеров в апексе. картинка nastrojka keshirovaniya shejderov. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Что нужно знать о кэшировании шейдеров в видеокартах NVidia

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

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

Как убрать загрузку шейдеров в апексе. primenenie keshirovaniya shejderov. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-primenenie keshirovaniya shejderov. картинка Как убрать загрузку шейдеров в апексе. картинка primenenie keshirovaniya shejderov. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Имеется такая функция и у видеокарт NVidia, при этом кэширование шейдеров предполагает запись нужных данных на диск. Если он быстрый, то кэширование помогает увеличить время загрузки кадра и улучшить плавность анимации. С другой стороны, если компьютер слабый или диск медленный, ShaderCache не даст ощутимого результата. Так нужно ли его включить или отключить? Давайте разбираться.

Включение/отключение кэширования шейдеров NVidia

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

На большинстве современных видеочипов эта функция включена по умолчанию.

А теперь рассмотрим, от чего зависит эффективность использования ShaderCache.

Самый важный параметр – это скорость чтения данных из кэша, то есть насколько быстрый у вас диск. Если это SSD, то здесь эффект будет заметным, ведь скорость чтения/записи при работе с твердотельными накопителями намного выше, чем у классических винчестеров. Поэтому при наличии HDD диска эффективность кэширования шейдеров будет не такой высокой или вообще нулевой. Другими словами, считывание кэша с жёсткого диска займёт примерно столько же времени, сколько освобождается в результате разгрузки видеокарты от просчёта очередного Shader.

Как убрать загрузку шейдеров в апексе. funkcziya shadercache. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-funkcziya shadercache. картинка Как убрать загрузку шейдеров в апексе. картинка funkcziya shadercache. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

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

Отметим, что те геймеры, которые используют клиент Steam, могут не переживать по поводу того, используется ShaderCache в настройках видеокарты или нет, поскольку здесь поддержка осуществлена на уровне библиотек Vulkan/OpenGL. И если игра использует эти платформы, кэширование шейдеров позволит не грузить процессор, поскольку каждый раз компилировать шейдеры не нужно – они будут подгружаться из оперативной памяти.

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

В результате вы освободите на диске пространство в размере порядка нескольких гигабайтов.

Как убрать загрузку шейдеров в апексе. podtverzhdenie vyklyucheniya keshirovaniya shejderov. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-podtverzhdenie vyklyucheniya keshirovaniya shejderov. картинка Как убрать загрузку шейдеров в апексе. картинка podtverzhdenie vyklyucheniya keshirovaniya shejderov. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Как убрать загрузку шейдеров в апексе. otklyuchenie keshirovaniya cherez nvidia inspector. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-otklyuchenie keshirovaniya cherez nvidia inspector. картинка Как убрать загрузку шейдеров в апексе. картинка otklyuchenie keshirovaniya cherez nvidia inspector. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Ещё одна возможность отключить кэширование спрятана в настройках Steam: в разделе «Настройки» имеется вкладка «Кэш шейдеров» с переключателем, который можно выключать или включать. При включении опции может отмечаться небольшой рост нагрузки на сеть. Функция работает только при наличии установленных драйверов видеокарты NVidia.

Как убрать загрузку шейдеров в апексе. perehod k nastrojkam v steam. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-perehod k nastrojkam v steam. картинка Как убрать загрузку шейдеров в апексе. картинка perehod k nastrojkam v steam. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Как убрать загрузку шейдеров в апексе. vyklyuchenie keshirovaniya shejderov v steam. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-vyklyuchenie keshirovaniya shejderov v steam. картинка Как убрать загрузку шейдеров в апексе. картинка vyklyuchenie keshirovaniya shejderov v steam. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Источник

Создание шейдеров

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

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

Как убрать загрузку шейдеров в апексе. minecraft before and after shaders. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-minecraft before and after shaders. картинка Как убрать загрузку шейдеров в апексе. картинка minecraft before and after shaders. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.
Сцена из Minecraft, до и после добавления нескольких шейдеров.

Задача этого туториала

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

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

Что же такое шейдер?

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

Шейдеры пишут на специальном языке шейдеров. Не волнуйтесь, вам не придётся изучать совершенно новый язык: мы будем использовать GLSL (OpenGL Shading Language), который похож на C. (Существует несколько языков написания шейдеров для разных платформ, но поскольку все они адаптированы под выполнение в видеопроцессоре, то похожи друг на друга.)

Примечание: эта статья посвящена исключительно фрагментным шейдерам (fragment shader). Если вам любопытно, какие ещё виды шейдеров бывают, то можно почитать о различных этапах графического конвейера в OpenGL Wiki.

Приступаем!

В этом туториале мы будем использовать ShaderToy. Он позволяет нам начать программировать шейдеры прямо в браузере, без возни с установкой и настройкой! (Для рендеринга он использует WebGL, поэтому требуется браузер с поддержкой этой технологии.) Создавать учётную запись не обязательно, но удобно для сохранения кода.

Примечание: на момент написания статьи ShaderToy находился в состоянии беты [прим. пер.: статья написана в 2015 году]. Некоторые детали интерфейса/синтаксиса могут немного отличаться.

Нажав на New Shader, вы увидите что-то вроде этого:

Как убрать загрузку шейдеров в апексе. Screen1 New. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Screen1 New. картинка Как убрать загрузку шейдеров в апексе. картинка Screen1 New. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Если вы не зарегистрировались, интерфейс может немного отличаться.

Маленькая чёрная стрелка внизу служит для компиляции кода.

Что происходит?

Я собираюсь описать то, как работают шейдеры, одним предложением. Приготовились? Вот оно!

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

Поздравляю! Вот ваш первый готовый шейдер!

Задача: Попробуйте изменить цвет на сплошной серый.

vec4 — это просто тип данных, поэтому мы могли бы объявить цвет как переменную, вот так:

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

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

Входные данные шейдера

Вы заметили проблему в приведённом выше коде? Попробуйте нажать на кнопку go fullscreen в правом нижнем углу окна предварительного просмотра.

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

Если что-то не является встроенной переменной, то можно отправить эту информацию из центрального процессора (из основной программы) в видеопроцессор (в ваш шейдер). ShaderToy берёт эту задачу на себя. Все передаваемые шейдеру переменные указаны во вкладке Shader Inputs. Переменные, передаваемые таким образом из ЦП в видеопроцессор, называются в GLSL uniform (глобальными).

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Если попробовать теперь изменить размер окна предварительного просмотра, то цвета должны точно разделить экран пополам.

От разделения к градиенту

Задача: Можете превратить эту картинку в вертикальный градиент? А как насчёт диагонального? Как насчёт градиента из нескольких цветов?

Отрисовка изображений

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

Если бы мы программировали на обычной платформе, то нужно было бы передавать видеопроцессору изображение (или текстуру) как uniform, точно так же, как мы бы передавали разрешение экрана. ShaderToy позаботится об этом за нас. В нижней части экрана есть четыре входных канала:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.
Четыре входных канала ShaderToy

Нажмите на iChannel0 и выберите любую текстуру (изображение).

Если мы можем только возвращать цвет, то как можно нарисовать текстуру на экране? Нам нужно каким-то образом привязать текущий пиксель шейдера к соответствующему пикселю текстуры:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.
В зависимости от расположения (0,0) на экране может потребоваться отразить ось Y для правильной привязки текстуры. На момент написания статьи ShaderToy был обновлён и исходная точка находится в левом верхнем углу, так что ничего отражать не требуется.

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

Мы хотим только увидеть изображение, поэтому пиксели будут совпадать в масштабе 1:1:

Так мы получили своё первое изображение!

Как убрать загрузку шейдеров в апексе. Screen4 New. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Screen4 New. картинка Как убрать загрузку шейдеров в апексе. картинка Screen4 New. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Давайте попробуем наложить на изображение градиент, похожий на то, что мы делали раньше:

Как убрать загрузку шейдеров в апексе. Screen5 New. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-Screen5 New. картинка Как убрать загрузку шейдеров в апексе. картинка Screen5 New. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Поздравляю, вы только что написали свой первый эффект постпроцессинга!

Задача: Сможете написать шейдер, делающий изображение чёрно-белым?

Учтите, что хотя мы и выбрали статичное изображение, всё, что вы видите, выполняется в реальном времени. Чтобы убедиться в этом, замените статичное изображение на видео: нажмите на iChannel0 и выберите любое видео.

Добавляем движение

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

Задача: Можете ли вы сделать шейдер, меняющий изображение с чёрно-белого на цветное и обратно?

Примечание об отладке шейдеров

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

Подводим итог

Это только самые основы работы с шейдерами, но освоившись с ними, вы сможете добиться гораздо большего. Посмотрите эффекты ShaderToy и проверьте, сможете ли вы понять или воспроизвести их!

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

Ещё одна задача: Сможете ли вы написать шейдер, удаляющий зелёный цвет из видео с ShaderToy и добавляющий другое видео в качестве фона первого видео?

ShaderToy, с которым мы работали ранее, отлично подходит для быстрой проверки и экспериментов, но его возможности довольно ограничены. Например, вы не можете контролировать данные, передаваемые шейдеру. Если у нас будет собственная среда для запуска шейдеров, то мы сможем создавать всевозможные интересные эффекты и использовать их в собственных проектах! Для запуска шейдеров в браузере мы будем использовать в качестве фреймворка Three.js. WebGL — это Javascript API, позволяющий рендерить шейдеры, Three.js нужен только для упрощения работы.

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

Настройка

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

Hello Three.js!

Three.js — это JavaScript-фреймворк, который берёт на себя большую часть boilerplate-кода для WebGL, необходимого для рендеринга шейдеров. Проще всего начать с использования версии, выложенной на CDN.

Можете скачать файл HTML, который является простой сценой Threejs.

Сохраните файл на диск и откройте его в браузере. Вы должны увидеть чёрный экран. Пока не очень интересно, так что давайте попробуем добавить куб, просто чтобы проверить, что всё работает.

Для создания куба нам нужно определить его геометрию и материал, а затем добавить его в сцену. Добавьте этот фрагмент кода в поле Add your code here :

Мы не будем подробно рассматривать куб, потому что нам больше интересен шейдер. Но если всё сделано верно, то вы увидите в центре экрана зелёный куб:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Задача: Сможете повращать куб по другой оси? А как насчёт двух осей одновременно?

Итак, всё готово, пора добавить шейдеры!

Добавляем шейдеры

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

Шаг 1: загрузка кода GLSL

Для создания сцены мы используем JavaScript. В других ситуациях может использоваться C++, Lua или любой другой язык. Вне зависимости от этого шейдеры пишутся на специальном языке шейдеров. Язык шейдеров OpenGL называется GLSL (OpenGL Shading Language). Поскольку мы используем WebGL, основанный на OpenGL, то будем писать на GLSL.

В JavaScript это можно сделать простой передачей кода внутри переменной, вот так:

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

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

(Компоненты vec4 в этом случае соответствуют значению RGBA, ка объяснялось в начале туториала.)

Теперь нам нужно загрузить этот код. Мы сделаем это простой строкой на JavaScript, находящей HTML-элемент и получающей внутренний текст:

Он должен находится под кодом куба.

Не забывайте: только загруженный как строка код будет парситься как действительный код GLSL (то есть void main() <. >. Остальное — это просто boilerplate HTML.)

Шаг 2: применение шейдера

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

Нам нужно создать специальный материал и передать его коду шейдера. В качестве объекта шейдера мы создадим плоскость (но можем использовать и куб). Вот что нужно сделать:

На этом этапе вы должны видеть белый экран:

Если заменить цвет в коде шейдера на любой другой и обновить страницу, то вы увидите новый цвет.

Задача: Сможете ли вы сделать одну часть экрана красной, а другую синей? (Если не получится, то на следующем шаге я дам подсказку!)

Шаг 3: передача данных

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

Для передачи данных шейдеру нам нужно отправить то, что мы назвали uniform-переменной. Для этого мы создаём объект uniforms и добавляем к нему наши переменные. Вот синтаксис передачи разрешения экрана:

Строка типа UniformТип GLSLТип JavaScript
‘i’, ‘1i’intNumber
‘f’, ‘1f’floatNumber
‘v2’vec2THREE.Vector2
‘v3’vec3THREE.Vector3
‘c’vec3THREE.Color
‘v4’vec4THREE.Vector4
‘m3’mat3THREE.Matrix3
‘m4’mat4THREE.Matrix4
‘t’sampler2DTHREE.Texture
‘t’samplerCubeTHREE.CubeTexture

Мы ещё не закончили! Теперь, когда шейдер получает эту переменную, нам нужно с ней что-то сделать. Давайте создадим градиент, как мы делали это раньше: нормализовав координату и используя её для создания значения цвета.

Изменим код шейдера следующим образом:

В результате у нас получится красивый градиент!

Задача: Попробуйте разделить экран на четыре равных части разных цветов. Примерно вот так:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Шаг 4: обновление данных

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

Вот как выглядит функция рендеринга после внесения изменений:

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

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

Задача: Попробуйте постепенно изменять цвета.

Шаг 5: работа с текстурами

Вне зависимости от способа загрузки и формата текстур на всех платформах они передаются в шейдер как uniform-переменные.

Небольшое примечание о загрузке файлов в JavaScript: можно без проблем загружать изображения с внешнего URL (именно так мы и будем делать). Однако если вы захотите загрузить изображение локально, то возникнут проблемы с разрешениями, потому что JavaScript обычно не может и не должен иметь доступа к файлам в системе. Простейший способ решения — запустить локальный Python-сервер, что на самом деле проще, чем кажется.

В Three.js есть небольшая удобная функция для загрузки изображения как текстуры:

Первая строка задаётся только один раз. В неё можно вставить любой URL изображения.

И, наконец, нам нужно объявить uniform-переменную в коде шейдера, а потом отрисовать её тем же способом, как мы делали ранее — с помощью функции texture2D :

На экране должно появиться растянутое изображение конфет:

(Это изображение является стандартным тестовым изображением в компьютерной графике, оно взято у Института обработки сигналов и изображений (SIPI) (поэтому на нём показана аббревиатура IPI) Университета Южной Калифорнии. Думаю, оно нам подходит, ведь мы как раз изучаем графические шейдеры!)

Задача: Попробуйте постепенно менять цвета текстуры с полного цвета на градации серого.

Дополнительный шаг: применяем шейдеры к другим объектам

В созданной нами плоскости нет ничего особенного. Мы могли применить шейдер и к кубу. На самом деле можно просто заменить строку с геометрией плоскости:

Вуаля, конфеты нарисованы на кубе:

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

Если бы мы хотели применить текстуру так, чтобы она выглядела физически нарисованной на кубе, то наша работа напоминала бы изобретение заново 3D-движка (что было бы довольно глупо, учитывая, что мы уже используем 3D-движок и мы можем просто попросить его отрисовать текстуру отдельно на каждой стороне). В этом туториале мы используем шейдеры для того, что иначе достичь было бы невозможно, так что мы не будем вдаваться в такие подробности. (Если вы жаждете узнать больше, на Udacity есть отличный курс по основам 3D-графики!)

Следующие шаги

На этом этапе мы уже можем делать всё, что сделали в ShaderToy, однако теперь мы способны использовать любые текстуры и любые объекты, на любой платформе.

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

Освоившись с основами шейдеров мы на практике применим мощь видеопроцессора для создания реалистичного динамического освещения.

Начиная с этого момента мы будем рассматривать общие концепции графических шейдеров без привязки к конкретной платформе. (Для удобства во всех примерах кода по-прежнему будет использоваться JavaScript/WebGL.)

Для начала найдите подходящий вам способ выполнения шейдеров. (JavaScript/WebGL — это простейший способ, но я рекомендую вам поэкспериментировать со своей любимой платформой!)

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

Вот как будет выглядеть конечный результат (нажмите мышью для включения света):

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

Отличным примером этого является Chroma. Игрок может бегать по динамическим теням, создаваемым в реальном времени:

Приступаем к работе: наша исходная сцена

Мы многое пропустим в первоначальной настройке, потому что она подробно рассмотрена выше. Начнём с простого фрагментного шейдера, рендерящего нашу текстуру:

Здесь не происходит ничего сложного. Код на JavaScript задаёт сцену и отправляет шейдеру текстуру для рендеринга и размеры экрана.

В коде на GLSL мы объявляем и используем эти uniform-переменные:

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

Просто чтобы убедиться, что вы всё понимаете, вот вам небольшое задание на разогрев:

Задача: Отрендерите текстуру, не изменяя соотношения её сторон (Попробуйте сделать это самостоятельно, мы рассмотрим решение ниже.)

Довольно очевидно, почему текстура растянута, но если это непонятно, то вот подсказка: посмотрите на строку, в которой мы нормализуем координаты:

Мы делим x и y на разные числа (на ширину и высоту экрана). Естественно, что изображение будет растянутым.

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

Шаг 1: добавление источника света

Прежде чем создать что-то интересное, нам нужен источник света. «Источник света» — это просто точка, передаваемая шейдеру. Для этой точки мы создадим новую uniform:

Мы создали вектор с тремя измерениями, потому что мы хотим использовать x и y в качестве положения источника на экране, а z — в качестве радиуса.

Давайте присвоим в JavaScript значения нашему источнику света:

Мы будем использовать радиус как процент от размеров экрана, поэтому 0.2 будет составлять 20% экрана. (В этом выборе нет ничего особенного. Мы могли бы задать размер в пикселях. Это число ничего не значит, пока мы не начнём с ним делать что-нибудь в коде GLSL.)

Чтобы получить положение мыши, нужно просто добавить получатель события (event listener):

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

На GLSL это может выглядеть примерно так:

Здесь мы сделали следующее:

Ой-ёй! Источник света следует за мышью как-то странно.

Задача: Сможете это исправить? (Попробуйте снова разобраться самостоятельно, прежде чем мы решим эту задачу ниже.)

Исправление движения источника света

Возможно, вы помните, что ось Y здесь перевёрнута. Вы можете поторопиться просто ввести:

Это математически верно, но если поступить так, то шейдер не скомпилируется! Проблема в том, что uniform-переменные невозмжоно изменять. Чтобы понять, почему, нужно помнить, что этот код выполняется для каждого отдельного пикселя параллельно. Представьте, что все процессорные ядра попытаются изменить единственную переменную одновременно. Плохая ситуация!

Мы можем исправить ошибку, создав новую переменную вместо uniform. Или ещё лучше — мы можем просто сделать этот шаг до передачи данных в шейдер:

Теперь мы успешно определили видимый радиус нашей сцены. Однако он выглядит слишком резким…

Добавление градиента

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

Вместо присвоения всем пикселям в пределах радиуса цвета текстуры:

мы можем умножать его на коэффициент расстояния:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.
На этом рисунке dist вычисляется для произвольного пикселя. dist меняется в зависимости от того, в каком пикселе мы находимся, а значение light.z * res.x постоянно.

Если мы посмотрим на пиксель на границе круга, то dist равно длине радиуса, то есть в результате мы умножаем color на 0 и получаем чёрный цвет.

Шаг 2: добавляем глубину

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

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

В представленном выше случае стоит ожидать, что точка A будет освещена сильнее всего, потому что источник света находится прямо над ней, а B и C будут темнее, потому что на боковых сторонах практически нет лучей.

Однако вот что видит наша система освещения сейчас:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

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

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

A находится наверху фигуры, а B и C — по бокам. D — это ещё одна точка на земле. Мы видим, что A и D должны быть самыми яркими, причём D немного темнее, потому что свет достигает её под углом. С другой стороны, B и C должны быть очень тёмными, потому что до них почти не доходит свет, ведь они направлены от источника света.

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

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

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

На рисунке выше показана простая карта нормалей. Если воспользоваться инструментом «пипетка» мы увидим, что направление по умолчанию («плоское») представлено цветом (0.5, 0.5, 1) (синий цвет, занимающий бо́льшую часть изображения). Это направление, указывающее прямо вверх. Значения x, y и z присваиваются значениям r, g и b.

Наклонная сторона справа повёрнута вправо, поэтому её значение x выше. Значение x также является значением красного, именно поэтому сторона выглядит немного красноватой или розоватой. То же самое относится ко всем остальным сторонам.

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

Давайте загрузим эту простую карту нормалей для теста:

И добавим её как одну из uniform-переменных:

Чтобы проверить, что мы загрузили её правильно, давайте попробуем отрендерить её вместо текстуры, изменив код на GLSL (помните, что мы на этом этапе используем просто фоновую текстуру, а не карту нормалей):

Шаг 3: применение модели освещения

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

Простейшей для реализации моделью является модель Фонга. Вот как она работает: пусть у нас есть поверхность с данными о нормалях:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Мы просто вычисляем угол между источником света и нормалью поверхности:

Как убрать загрузку шейдеров в апексе. image loader. Как убрать загрузку шейдеров в апексе фото. Как убрать загрузку шейдеров в апексе-image loader. картинка Как убрать загрузку шейдеров в апексе. картинка image loader. 10-й сезон Apex Legends был нелегким как для игроков, так и для разработчиков из-за множества технических проблем. Событие Evolution Collection сопровождалось множеством проблем с сервером, которые не позволяли игрокам играть. Сопутствующие технические ошибки, такие как полное отключение звука во время перестрелки во время игры с рейтингом в Apex Legends.

Чем меньше угол, тем ярче пиксель.

Это значит, что когда пиксель находится непосредственно под источником света, где разность углов равна 0, он будет самым ярким. Самые тёмные пиксели будут указывать в том же направлении, что и источник света (это будет похоже на заднюю часть объекта).

Давайте реализуем эту модель.

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

Давайте сделаем сплошной белый цвет (или любой другой цвет):

Вот как выглядит алгоритм:

1. Получаем вектор нормали текущего пикселя

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

Поскольку альфа-значение ничего не обозначает на карте нормалей, нам требуются только первые три компонента.

2. Получаем вектор направления света

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

Он должен иметь и координату Z (чтобы можно было вычислить угол относительно трёхмергого вектора нормали поверхности). С этим значением можно поэкспериментировать. Вы заметите, что чем оно меньше, тем резче контраст между яркими и тёмными областями. Можно представить, что это высота фонарика над сценой: чем он дальше, тем равномернее распространяется свет.

3. Нормализуем векторы

Теперь нам нужно нормализировать:

4. Вычисляем угол между векторами

Давайте сделаем это с помощью встроенной функции dot:

Я назвал переменную diffuse потому что этот термин используется в модели освещения по Фонгу, ведь она определяет количество света, достигающее поверхности сцены.

5. Умножаем конечный цвет на этот коэффициент

И мы получили работающую модель освещения! (Попробуйте увеличить радиус источника света, чтобы эффект был сильнее заметен.)

Хм, кажется, что-то не так. Похоже, что источник как-то наклонён.

Давайте ещё раз посмотрим на наши вычисления. У нас есть вектор света:

Задача: Понимаете ли вы, в чём заключается решение? Сможете реализовать его?

Вот как демо выглядит после вычитания 0.5 из координат x и y вектора нормали:

И у нас получилась работающая модель освещения!

Можно поставить на фон каменную текстуру, а настоящую карту нормалей взять в репозитории этого туториала на GitHub (а именно здесь):

Нам нужно только изменить одну строку на JavaScript, с:

И одну строку на GLSL:

Нам больше не нужен сплошной белый цвет, мы загрузим настоящую текстуру, вот так:

И вот окончательный результат:

Советы по оптимизации

Видеопроцессор выполняет свою работу очень эффективно, но очень важно знать, что может её замедлять. Вот несколько советов:

Ветвление

В шейдерах обычно желательно по возможности избегать ветвления. Хотя большое количество конструкций if редко бывает проблемой в любом коде для ЦП, в шейдерах для видеопроцессора они могут стать узким местом.

Отложенный рендеринг

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

Освещение — это основная причина выбора того или иного пути. В стандартном прямолинейном конвейере рендеринга вычисления освещения должны выполняться для каждой вершины и каждого фрагмента видимой сцены для каждого источника света в сцене.

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

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

Следующие шаги

Теперь, когда вы получили работающий шейдер освещения, вот с чем ещё можно поэкспериментировать:

Ссылки

Каменная текстура и карта нормалей для этого туториала взяты с OpenGameArt: http://opengameart.org/content/50-free-textures-4-normalmaps.

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

Источник

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

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