Что такое компиляция шейдеров и почему из-за нее компьютерные игры тормозят?

Поскольку графические процессоры каждого ПК разные, компиляция шейдеров необходима для запуска игр на видеокартах разных марок и моделей. К сожалению, этот процесс компиляции может вызвать раздражающее заикание.
В некоторых играх есть тип заикания, который происходит независимо от того, насколько мощный ваш компьютер или какие настройки вы выбираете. Это вызвано процессом, известным как «компиляция шейдеров», и это становится все более серьезной проблемой в компьютерных играх.
Что такое шейдеры?
Шейдеры — это компьютерные программы, которые помогают определять различные аспекты визуализируемой графики. Пиксельные шейдеры, например, вычисляют атрибуты пикселя. Это включает в себя цвет, яркость, отражательную способность или прозрачность этого пикселя. Если вы хотите, чтобы что-то в вашей игре выглядело мокрым, вы используете для этого специальный шейдер, а не делаете это кропотливо вручную.
Шейдеры — это то, что делает современные графические процессоры такими гибкими, поскольку эти графические процессоры предназначены для запуска всего, что может быть выражено в язык программирования шейдеров. Они заменяют старую технологию графического процессора «конвейер с фиксированными функциями», когда типы графических вычислений, которые мог выполнять графический процессор, были жестко встроены в его кремний.
Что такое компиляция шейдеров?
Сборник” — это компьютерный термин, который относится к коду, написанному программистом-человеком, и преобразованию его в машинный код, который может понять конкретный процессор, предназначенный для запуска рассматриваемого программного обеспечения. Так, например, вы можете скомпилировать свой код для работы на процессоре Intel или Яблочный кремний.
То же самое необходимо для GPU. Код шейдера должен быть скомпилирован для работы с рассматриваемой маркой и моделью графического процессора. Если вы меняете графический процессор, обновляете его драйверы или игра получает обновление, шейдеры необходимо компилировать заново.
Почему в некоторых компьютерных играх зависает компиляция шейдеров?
В некоторых играх компиляция шейдеров в фоновом режиме мешает самой игре, вызывая видимые зависания. Компьютер слишком усердно компилирует шейдеры, чтобы игра работала гладко. Некоторые разработчики стараются оптимизировать компиляцию так, чтобы она практически не влияла на производительность игры, в то время как другие распространяют компиляцию шейдеров на всю игру, надеясь, что заминка будет недолгой. В этом случае вы столкнетесь с заиканиями только в начале нового уровня или при входе в новую среду, в которой используются шейдеры, в которых до этого момента не было необходимости.
Подвисания при компиляции были особенно вопиющими в играх на Unreal Engine 4, широко распространенном и популярном игровом движке. В частности, эти заикания становятся проблемой при запуске игры под DirectX 12. Отчасти это связано с тем, что DirectX 12 меняет способ компиляции шейдеров, предоставляя разработчикам больший контроль. Однако это также означает, что у разработчиков может не быть лучшего способа оптимизировать компиляцию шейдеров с использованием последней и лучшей версии DirectX.
Почему на консолях компиляция шейдеров не тормозит?
Заикание при компиляции шейдеров — проблема, полностью отсутствующая в таких консолях, как PS5 и Xbox Series X|S. Это просто потому, что разработчики точно знают, какое оборудование находится внутри каждой консоли, поэтому они могут предварительно скомпилировать все шейдеры; нет необходимости компилировать их в локальной системе, потому что вы уже знаете, на какой графический процессор вы ориентируетесь.
Это можно сделать на ПК, но поскольку существует так много графических процессоров и системных конфигураций, это было бы нецелесообразно. Однако в случае Клапан Steam Deck, Valve включает предварительно скомпилированный кеш шейдеров с некоторыми играми, потому что, конечно же, все колоды Steam имеют одинаковый графический процессор.
Что вы можете сделать с компиляционным заиканием?
К сожалению, в большинстве случаев разработчикам приходится исправлять проблемы компиляции шейдеров. Хорошая новость заключается в том, что в конечном итоге они справятся с процессом. Unreal Engine 5.1 может включать автоматизированная функция это поможет разработчикам с кэшированием без столь серьезного влияния на производительность.
Список вещей, которые вы можете сделать, чтобы уменьшить заикание, невелик, но некоторые из этих вариантов могут помочь:
- Если игра позволяет предварительно скомпилировать шейдеры, разрешите это. Это может занять некоторое время, но игра будет работать без заиканий.
- Если обновление игры не включает исправление зависаний шейдеров, подождите, пока вы не закончите играть, иначе шейдеры могут скомпилироваться снова.
- Отложите обновления драйверов графического процессора, пока вы не закончите текущую игру, на случай, если она снова вызовет компиляцию.
- Когда в игре начинается заикание компиляции, нажмите кнопку паузы и подождите, пока оно не закончится, прежде чем играть дальше.
- Используйте DirectX 11 вместо DirectX 12 версии игры. Часто заикание шейдера уменьшено или отсутствует, хотя в придачу вы откажетесь от функций DX12.
- Вместо этого играйте в игру на консоли.
Со временем эта проблема, вероятно, исчезнет или станет гораздо менее навязчивой. Например, разработчики могут перенести компиляцию шейдеров на процессорные ядра, которые не нужны игре, что является обычной ситуацией на современных ПК с большим количеством ядер. До тех пор, #заикание останется раздражающей проблемой в компьютерных играх.
Похожие посты:
- Как загрузить Android 12 и 12L для Google Pixel и других устройств Android
- Список пользовательских прошивок Android 11 — неофициально обновите свой телефон Android!
- Новое обновление патча Minecraft: Bedrock Edition распространяется на всех игроков
- Как установить программное обеспечение из исходного кода . и затем удалить его
- Это лучшие игры для вашего телефона Android
- Ответы на ваши вопросы о новой консоли Sony в разделе «Ultimate FAQ» для PS5
- Как удалить кэш шейдеров DirectX в Windows 11/10
- Лучшие компьютерные игры для покупки: фантастические игры для добавления в вашу коллекцию
- Лучшие компьютерные игры для покупки 2022: фантастические игры для добавления в вашу коллекцию
- Список пользовательских прошивок Android 13: неофициально обновите свой смартфон Android!
Компиляция шейдеров
У меня рил есть вопрос. Че вообще эта за хрень такая? Щас почти каждая игра на «великой» «вечнопабежданченской» платформе есть эта «КАМПИЛИЯЦИЯ ШЕЙДЕРОВ». Раньше вроде как игры выходили но этой залупы не было.
Это че получается? Значит я такой вечный пабеждатель в луковой броне, покупаю пк с видюхой за 1к баксов, чтобы потом экономить скачивая игры с торрентов, а тут еще мне нужно ждать компиляцию шейдеров, потом смотреть в правый угол афтерберна и наблюдать проседы до 40 фипиэс?
1.7K показов
1.7K открытий
32 комментария
Написать комментарий.
Если вкратце, то дело вот в чём:
Шейдер — это программа, на писанная на языке высокого уровня, для удобства человеков, и чтобы выполнить её на видеокарте — надо перевести её в машинный код, этот процесс и называется компиляцией.
Раньше шейдеры были простыми, их было немного, и соответственно процесс компиляции проходил «на лету», фоном, незаметно для пользователя. Со временем графика игр усложнялась, материалы окружения становились более комплексными, на одну поверхность или ассет стало приходиться несколько, а иногда — несколько десятков сложных, длинных программ-шейдеров, и компиляция их на лету при появлении в кадре нового объекта стала приводить к задержкам, пока система ожидала окончания компиляции. Это вызывало статтеры — рывки изображения. Поэтому было решено вынести процесс компиляции почти всех, или хотя бы самых комплексных шейдеров в отдельный процесс перед запуском игры, в результате чего все доли секунд от тысяч шейдеров стали занимать значительное время, которое ты и видишь, ожидая пока полосочка компиляции доползёт до конца.
Развернуть ветку
Хорошо написал. Украду текст?
Развернуть ветку
Конечно, забирай если нужно.
Развернуть ветку
Злодей из черепашек-ниндзя
Развернуть ветку
произошло зло 1%
Развернуть ветку
произошло зло 2%
Развернуть ветку
произошло зло 3%
Развернуть ветку
произошло зло 4%
Развернуть ветку
Зависла компиляция, что ли?
Развернуть ветку
Проблема в DirectX 12 и криворуких разрабах.
Развернуть ветку
Именно так. Почему-то форза без проблем компилируется на запуске за 1-2 минуты
Развернуть ветку
ретернал тоже только пару минут компилирует
Развернуть ветку
Респект технарям значит, нужно это нормализировать
Развернуть ветку
на самом деле, скорее всего просто игра сравнительно небольшая по количеству ассетов
Развернуть ветку
Потому что разрабы опытные, свой движок, напрямую работают с майками и есть опыт с DX
Развернуть ветку
Меня больше интересует — почему лет пять назад игры не сообщали о компиляциях шейдеров (а они все же были), а сейчас стали?
Возможно, проблема кроется в визуальных редакторах шейдеров, которые добавляют слишком много данных в программы, из-за чего компиляция происходит дольше. А раньше руками код писали.
Развернуть ветку
Ну почему, у DOOM 3 были исходники библиотек архивированные, при загрузке уровней он разархивировал их, а если это самому сделать, то подгрузки быстрее были.
P.S. Кто то прячет подгрузку в бутылочные горлышки
Развернуть ветку
Развернуть ветку
Аккаунт удален
Развернуть ветку
Вышла единственая кривая игра за последнее время с проблемой с шейдерами, а консолешизы уже что то кукарекают
Развернуть ветку
Единственная? Ты видимо забыл про Horizon Zero Dawn.
Развернуть ветку
Блятб опять игра от сони косячная, ну точно в пк дело
Развернуть ветку
Елдон Ринг на релизе тоже ебло и колотило от компиляции на лету. И чо?
Тут два стула — статтеры от компиляции во время игры, или сиди полчаса еблом щёлкай перед её началом. И при каждом патче или смене драйвера.
И дело не в косячности именно Сони, это системная проблема, почему — я написал здесь же в комментах.
Развернуть ветку
видимо пошли порты с пс5, а руки из жопе
Развернуть ветку
Раньше их было намного меньше, а в текущей ситуации ещё разрабы не могут нормально отхендлить проблему. Рендерных прогеров еще хуй найдешь нормальных. Да и почему-то менеджмент проектов пренебрегает оптимизацией, например: у нас в команде из 30 кодеров только один человек отвечает за оптимизацию и то это его второстепенная задача. Уже давно пытаюсь пропитчить идею, что надо несколько людей перевести на оптимизацию, а то в текущем ключе только код ревью является барьером, не говоря о том, что делают художники и геймдизы
Развернуть ветку
А железо сейчас осталось таким же отсталым да? Щас оперативки и процы в телефоне мощнее чем в компах раньше
Развернуть ветку
Да любой представитель нынешнего поколения разрабов может загрузить самый мощный комп особенно качественной имплементацией даже простейшего алгоритма. Не говоря уже о более сложных вещах. Сейчас инструменты разработки становятся всё более и более удобными, вследствии чего разрабы перестают спускаться на лоу лвл и из-за этого делают хуйню.
Развернуть ветку
Подпишусь на комменты
Развернуть ветку
Подожду, пока настоятся комментарии
Развернуть ветку
Подписчиков новое елдовое видно издалека
Развернуть ветку
Покупаешь гроб за миллиард тенге, конечно же пиратишь игру, получаешь фрустрации и боль. Карма какая-то.
Развернуть ветку
Шейдеры разные бывают. Но чтобы не вдаваться во всякую теорию и нюансы скажу просто.
Появилось очень много разного железа, рабочих осей, приставки по сути стали компьютерами. А сами графические вычисления стали сложнее. Сейчас только один свет может отражаться и переотражаться по 20 раз. Плюс сами материалы стали тяжелыми, игры весят уже по 100-300Гб, а ссд скоростные есть не у каждого. И чтобы игрок не видел подгрузку текстур, фризы, лоды и прочие радости оптимизаций на его оборудование компилируются заранее шейдеры, чтобы их можно было быстро подцепить через кэш и не обращаться к более медленной памяти и не проводить рассчеты на гп или цп.
Это не только из-за того, что железо не настолько мощное, но и конечно же из-за того, что у разработчиков есть сроки. И вместо того, чтобы тестировать все на каждом железе и делать гибкие настройки, проще создать вот такой индивидуальный файлик тебе.
А шейдеры всегда компилировались во всех играх. Просто раньше это делалось в реал тайме и скрывалось чем-то вроде «протиснитесь между 2 стенами». Сейчас же стараются от этого отказаться, сделать более плавный геймплей, ну и опять же слишком тяжелыми стали игры + куча разных стандартов. Раньше вы так-то на загрузки смотрели по 2 минуты между уровнями, если забыли)
Компиляция шейдеров: почему фризят современные игры
Привет Пикабу! Фризы. Долгие загрузки. Мы привыкли винить в это разработчиков игр – но далеко не всегда виноваты они. Компиляция шейдеров — бич современных игр. Но что это такое? Как удобная технология стала проблемой?
Что такое шейдер?
И сразу же возникает только два вопроса – что такое шейдер и что вообще такое компиляция? Не будем усложнять. Мы постоянно слышим слово шейдер в контексте разработки игр, и на самом деле это просто кусок кода, программа, которая работает на вычислительных блоках видеокарты. В современных графических API, таких как DirectX 12 или Vulkan, существует семь категорий шейдеров.

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

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

Ну и под конец – вычислительные шейдеры. Современные видеокарты отлично подходят для многих математических расчетов, и именно на такой тип шейдеров опирается Nvidia CUDA или OpenCL. А сейчас еще трудятся во всяких генеративных нейросетках рисуя нам картиночки.

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

Это одна из тех причин, почему увеличение качества текстур в настройках игры минимально влияет на FPS – разумеется, если хватает видеопамяти. Но при этом существуют, например, лучевые шейдеры, которые нужны для правильной отрисовки освещений и теней при помощи трассировки лучей. И едва ли нужно рассказывать, насколько сильно RTX on роняет FPS.
Компиляция шейдеров
Хорошо, теперь стало понятно, как тяжелые шейдеры могут негативно влиять на расчет времени кадра и тем самым снижать FPS. Но где связь между ними и фризами или долгой первой загрузкой игры?
Все дело в том, что изначально шейдер пишется на высокоуровневом языке программирования. И прежде чем видеокарта сможет его использовать, процессор должен скомпилировать шейдер, иначе говоря перевести в понятный для GPU двоичный машинный код.

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

К чему это приводит – заметили бета-тестеры. вернее игроки в ремейк Last of Us, который даже на топовых ПК умудряется грузиться часами.

Хотя, надо сказать, тут очень важно умение программистов правильно распоряжаться библиотекой шейдеров и многоядерностью процессора. В самом худшем случае будут компилироваться абсолютно все шейдеры, даже те, которые не нужны на конкретной системе, и использоваться для этого будет лишь одно ядро. Как показывают тесты, с оптимизацией компиляции консольные программисты из Naughty Dogs справились так себе, что и вызвало бурю негодования от скучающих перед прогресс-барами пк-геймеров.
Второй вариант – комилировать шейдеры по мере необходимости во время самого игрового процесса. Как итог, это здорово снижает время загрузки игры – только вот платить приходится повышенной нагрузкой на процессор и накопитель, которым приходится работать не только с текущими данными, но и думать наперед. С учетом общей высокой вычислительной сложности современных игр это гарантированно вызывает фризы в моментах, когда нужно быстро скомпилировать сразу много шейдеров: например, во время перехода в новую локацию.

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

К слову, именно поэтому на консолях игры обычно грузятся быстрее и работают плавнее, даже если мы берем пастген с жесткими дисками. Так как на таких игровых устройствах компонентная база и система жестко связаны, это позволяет разработчиками провести предварительную компиляцию и избавить железо консолей от дополнительных расчетов.
Решение проблемы фризов
Можно ли как-то решить проблему компиляции шейдеров на ПК? Глобально – да, фактически – нет. Современные игры становятся все масштабнее и красивее, что увеличивает и количество, и сложность используемых шейдеров.
А с учетом тенденций по созданию бесшовного мира у разработчиков оказываются буквально связаны руки: используя комбинированный метод рано или поздно возникнет ситуация, когда нужно обсчитать множество шейдеров разом – и это вызовет гарантированный фриз и комментарии о криворуких игроделах. Конечно, можно вернуться к старой доброй компиляции всех шейдеров на старте – это снимет любые проблемы с ними во время игры, но, как показывают отзывы о Last of Us, геймеры не готовы ждать первого запуска по полчаса. С каждой игрой. Особенно с учетом того, что это будет повторяться после каждого обновления драйверов на видеокарту.

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

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

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

Также можно использовать хитрость под названием лок кадров. Дело в том, что компиляция шейдеров – процесс второстепенный, и если CPU в игре грузится по-полной, то на эту задачу выделяется слишком мало ресурсов, что и вызывает фризы при появлении новых объектов в кадре. Ограничение количества кадров разгрузит процессор и позволит ему тратить больше времени на шейдеры.

Конечно, такой лайфхак снизит общую плавность картинки, но тут уже решать каждому, что важнее: фризы или высокий FPS. Использовать этот трюк можно вместе с понижением процессорозависимых настроек, таких как плотность толпы, дальность прорисовки, качество частиц и прочих параметров, которые затрагивают физику и качество отрисовки объектов.
Поддержать
6 месяцев назад
разрабы хогвартс легаси поехавшие, тк шейдеры компилировались при каждом запуске игры и пришлось поставить мод для отключения подобного
раскрыть ветку
6 месяцев назад
Для лл поясните
раскрыть ветку
6 месяцев назад
Объясните, почему в Крайзисе и в Киберпанке компиляции не было, а графика была.
6 месяцев назад
Спасибо огромное за пост! Сегодня узнал что то новое.
6 месяцев назад
Вот только какого-то прорыва в графике я лично не вижу, несмотря на рассказы про все эти шейдеры и сложность вычислений. Примерно всё застопорилось на уровне игр 10 летней давности. Но надо продавать потребителям новые видеокарты каждый год, как айфоны, это я понимаю)
ещё комментарий
Похожие посты
1 месяц назад

Состоялся релиз Bus World – почему это наша последняя 3D игра на Unity
С момента основания нашей независимой студии KishMish Games в 2016 году, все наши проекты (кроме нескольких визуальных новелл) мы делали на движке Unity. Однако, одновременно с окончанием работ над нашей самой крупной и сложной в разработке игрой Bus World, пришло понимание, что движок нужно менять. В этой статье расскажем немного о сложностях, с которыми приходилось справляться за 4 года разработки этой игры и о том, куда мы хотим двигаться дальше.
Начинать рассказ о Bus World невозможно без упоминания более раннего нашего проекта Bus Driver Simulator (разработка велась с 2016 по 2019 год). Будучи командой из всего нескольких человек, мы замыслили реализовать свой родной город (подмосковный Серпухов) в компьютерной игре. Жанр может показаться для кого-то необычным – симулятор водителя автобуса. Однако сразу после анонса мы смогли найти заинтересованную аудиторию. Так как у всех в команде был многолетний опыт работы с движком Unity, вопрос о его выборе даже не стоял.

Естественно, из-за мизерного бюджета и малого размера команды (даже над Bus World, нашей самой большой игрой, никогда не работало более пяти человек одновременно), нам приходилось идти на некоторые компромиссы, особенно заметные в части графики.
Игра вышла в релиз в декабре 2019. Но ещё до этого мы задумались над тем, чем мы хотим заниматься дальше. У нас осталось много наработок по Bus Driver Simulator, и мы понимали, что хотелось бы сделать игру с ещё большим количеством разнообразного контента и игровых ситуаций. Поэтому, за основу были взяты базовые вещи из Bus Driver Simulator, но сформирована концепция необычного симулятора, где во главе угла будут стоять сценарии с уникальными сюжетами по спасению людей в условиях техногенных и природных катастроф. А учитывая наш опыт по созданию локаций, построенных на основе реально существующих мест, мы решили, что одной из игровых карт будет Чернобыль 1986 года. В Bus World можно встретить угрозу радиации, лесные пожары, цунами, и даже извержение вулкана. Помимо катастроф, в некоторых сценариях разыгрываются более спокойные сюжеты, где игроку предстоит выполнить маршрут с серьезной поломкой автобуса, а также поучаствовать в съемках фильма. Для любителей выполнять маршруты без всяких особых условий, по аналогии с BDS, мы добавили свободный режим, в котором игроки в том числе могут строить и свои собственные маршруты.

Вероятнее всего, мы бы не взялись за работу над игрой, если бы знали, сколько сложностей нас ждут в следующие 4 года разработки. Причём подавляющее их число было вызвано особенностью движка Unity и выбранного пайплайна HDRP.
Начнём с последнего, а именно с HDRP. Так как в нашей игре важную роль играет сочная картинка, мы решили использовать самый мощный рендер пайплайн. Это стало одной из самых главных ошибок, так как оказалось, что он безмерно сырой, и многие вещи пришлось делать самостоятельно.
Если сначала мы были воодушевлены новыми графическими возможностями, то спустя некоторое время мы столкнулись с суровой реальностью. Сразу оговорюсь, что некоторая информация может быть немного устаревшей, так как мы используем версию Unity 2021.1 и HDRP 11.
Оказалось, что в HDRP нет даже отрисовки травы на террейнах (земле)! Пришлось писать собственную систему, которая хорошо бы работала на больших картах, при этом была настраиваемой и требовала не слишком много ресурсов компьютера. Мы пробовали и готовые решения от сторонних разработчиков, однако они плохо работали с нашей большой картой и динамической подгрузкой частей игровой локации. Финальный, получившийся у нас вариант, нам нравится. Однако стоит учитывать, что будь эта система исправно работающей на HDRP по умолчанию, потраченное на создание этой системы время (3-4 месяца) можно было бы потратить на проработку других важных вещей.

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


Постоянные вылеты по непонятным причинам тоже серьезно усложнили ход работы над игрой. Стоит отметить, что они бывали и при работе на Built-In пайплайне, но обычно удавалось найти причину (например, определенный плагин мог вызывать вылеты) и исправить проблему.
В целом, сложилось впечатление, что пайплайн ещё очень сырой и недоделан. Но повторюсь, что мы работали на версии 11, а сейчас появилась 14. В новой версии, например, добавилось красивое отображение воды. А мы на это тоже потратили много времени. Правда, а в нашем случае нужно было ещё сделать сильные волны от цунами, поднимающийся уровень воды и эффект, когда камера находится под водой.

Но самым большим минусом HDRP для нас стали его высокие требования к ресурсам компьютера и практически полная невозможность оптимизации. В своих играх мы работаем над оптимизацией практически постоянно параллельно с добавлением нового контента. Но на HDRP выделяли почти год под на оптимизацию созданных локаций (изначально они делались под Built-In).

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

Также проблемным кажется импорт моделей в формате FBX. У Unity оси Z и Y поменяны местами, и при импорте FBX движок пытается перевернуть их сам, но делает это криво и все ломает. Объекты импортируются визуально верно, но в параметрах их трансформов выставляются какие-то совершенно непонятные значения, которые не исправить никак, кроме переимпорта. Особенно это критично при скелетной анимации, когда повернутые на 90 градусов кости ломают модель напрочь. Импорт работает корректно только при очень специфичных настройках, на вычисление которых потребовалось немало времени.
Сейчас складывается впечатление, что Unity подходит только для 2D игр и простых 3D, а не таких, как у нас, с большой игровой местностью. Некоторые считают его движком для мобильных игр, но всё же производитель постоянно делает ставку и на показ новых технологий, которые нужны в больших 3D играх. Мы же ждали более активного развития движка именно в этом направлении, но так и не дождались и приняли решение, что Bus World будет нашей последней 3D игрой на Unity. Отставание его от других движков на рынке, например Unreal и Unigine, постоянно становится всё больше. Мы уже проводили некоторые эксперименты с вставкой отдельных частей наших игровых локаций в упомянутые выше движки и были удивлены, насколько визуально богаче они выглядят по умолчанию, без дополнительной сложной настройки.
В последние дни особенное возмущение движком Unity вызвано добавлением новой платы за каждую установку игры (с ценой до 20 центов за каждую установку). Ранее достаточно было заплатить определенную сумму подписки за год (или помесячно). Многие игровые разработчики уже заявили, что компания потеряла доверие и они категорически не согласны с нововведением. Некоторые компании уже анонсировали переход на другие движки именно из-за новой платы за установки.
Мы также приняли решение, что следующая большая наша 3D игра будет не на Unity. Стоит понимать, что это означает и обучение членов команды, и отказ от множества наработок на имеющемся движке. Но в перспективе лет мы думаем, что это правильное решение, имеющее позитивные последствия, в первую очередь в виде появления новых более качественных и современных игр от нашей команды.
А если вы хотите ознакомиться с нашей игрой Bus World, которая вышла в релиз сегодня, приглашаем на её страницу Steam.
Если вы тоже работаете в игровой индустрии, напишите, на каком движке работаете вы и всё ли вас в нём устраивает.
Спасибо за внимание!
Показать полностью 8
1 месяц назад

Простенький эффект остановки времени
Привет! Вчера немного посидел, пытаясь намутить эффект остановки времени, вроде вышло что-то похожее)
Год или два назад в Game Maker, на котором я создаю игру завезли эффекты разных видов, под их капотом лежат шейдеры и мне не пришлось писать вручную код шейдера, а взять готовый. Так, я использовал эффект heat haze (нагревания), покрутил его параметры, и получился вот такой прикольный результат. Кроме него еще накладываю небольшую виньетку на экран. На самом деле такие эффекты неплохо могут улучшить картинку в игре)
Страница игры в Steam: https://store.steampowered.com/app/2363760/ReLinked/ (буду благодарен если добавите игру в желаемое)
Показать полностью
2 месяца назад

OPQAM, IJKL, 67890. О том, как нам реально повезло с курсорными клавишами

Клавиатура Суры ПК8000
Первый компьютер появился у меня дома в 6 лет. Это была Сура ПК8000 с черно-белым телевизором. Затем я попробовал игры на MSX-2 с цветным монитором, различные модели БК, PC и ZX Spectrum.
Последний был моим любимцем на протяжении нескольких лет. Он достался мне в корпусе от “Суры”, которую собирали на заводе в Пензе, с черно-белым монитором “Корвет” и двумя дисководами. Естественно, что в начале 90-х я понятия не имел, как выглядит настоящий “Спектрум”. Важнее было, что софта для него, в отличие от “Суры” и БК, было навалом, а клоны были во многих семьях и проблем с обменом коллекциями не существовало.
Что бесило, так это кривые сочетания клавиш управления во многих играх. Какой синклер-джойстик? Почему OPQAM? Есть же нормальные курсорные стрелки на клавиатуре?

Скриншот выбора управления в игре Rolling Thunder (Keyboard ― те самые OPQAM)
Что еще хуже, при написании программ приходилось либо долго втыкать в мелкие наклейки на клавишах, либо заучивать сочетания. Отдельных кнопок для управления курсором или того же backspace не было.
Почитав историю Синклера, я решил, что это было сделано в угоду дешевизне, минитюаризации, а еще потому, что многие использовали в играх джойстик.
Но после того, как я посмотрел на клавиатуры популярных компьютеров конца 70-х и начала 80-х, я решил, что создатели ПК не особенно заморачивались, и взяли за базу печатные машинки. Действительно, кому могут понадобиться курсорные клавиши, расположение которых будет одинаковым на всех клавиатурах, которые можно нажимать одной рукой, да еще вслепую?
Хотя нет, в Apple настолько заморочились, что на Apple Lisa и Macintosh курсорных клавиш не было вообще. Так покупателей приучали пользоваться мышкой.

Клавиатура Apple M0110
Пожалуй, все неудобства и “боль” пользователей при переходе с модели на модель можно понять только показав, как это было.
❯ Худшие из худших
На печатных машинках курсорные клавиши не были нужны, но на компьютерах для перемещения по листингам, меню, управлению в играх вроде бы необходимы?
Однако, возникает ощущение, что создатели компьютеров просто не пользовались своими творениями, т.к. на некоторых моделях типа Атари 400, 800 и 800XL клавиатура в неизменном виде существовала несколько лет.
Apple
Про Apple Lisa и Macintosh я написал в самом начале. На Apple II курсорные клавиши появились. Но… только влево и вправо. Было бы интересно понять логику.

Клавиатура Apple II
Неудобство проявлялось еще и в том, что в играх управление было совершенно разным. Например, в Ms.Pac-Man клавиши A и Z отвечали за вверх-вниз, а в Lode Runner управление было вообще без курсорных клавиш ― IJKL.

Скриншот игры Ms.Pac-Man
Полноценный блок был добавлен в модели Apple IIc и IIe

В Apple III разработчики снова учудили, и расположили клавиши, как получилось (три клавиши в ряд, а одна сверху).

Пользоваться любым из решений одной рукой неудобно. Но хуже всего, что пересесть с ПК одного производителя на на другой было реальным кошмаром.
Atari 400, 800, 800XL (1979)
Для управления курсором приходилось удерживать Control, а в младшей модели еще и мириться с мембранной клавиатурой.

BBC Micro (1981)
Раскладка уже в ряд, и без CTRL.

То есть, если вы работали на Атари, а потом вдруг решили перейти на BBC, нужно переучиваться заново пользоваться клавиатурой.
HP 9835 (1979)
Маленькие клавиши в верхней части корпуса размещены так, что положить руки, ничего не задев, не получится.

Кстати, порядок клавиш отличается и от Атари и от BBC Micro.
TRS-80 (1977) и Tandy Color Computer (1980)
Есть вверх, вниз, влево, вправо, но на разных частях клавиатуры.

Casio
Надо отметить, что в Японии дела обстояли ничуть не лучше.

Портативный ПК Casio FX 9000p
Commodore
Очень странным мне показалось решение в Commodore 64, который получил огромную популярность и репутацию игрового ПК. Обратите внимание — за вверх-вниз и влево-вправо отвечают по одной клавише. Хорошо, хоть кнопку shift разместили так, чтобы можно было управлять одной рукой.

Commodore 128 получил уже рядную раскладку:

А вот в Commodore Plus/4, на мой взгляд, вышло совсем неудачное решение. Блок с курсорными кнопками слишком мал и подойдет только для редактирования текста.

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

Клавиатура Amiga 1000
А вот Amiga 500 и 2000 уже получили Т-образное расположение.
❯ Под занавес. Первыми были вовсе не IBM!
Я был убежден, что изобретение стандарта принадлежит IBM, но оказалось, что еще раньше появления клавиатуры IBM Modem M (1985) по-крайней мере, две компании использовали Т-образное расположение курсорных клавиш. Но, надо отдать должное, IBM повлияла на широкое распространение этого варианта.
Я специально потратил время на поиск картинок старых компьютеров и терминалов. Первые клавиатуры с привычным нам расположением появились еще в 1970 или раньше.

Терминал ADDS Consul 880
А более современный вариант появился в 1982 году благодаря Digital Equipment.

Плохих примеров реализации курсорных клавиш очень много. Во время подготовки статьи я не раз мысленно говорил “спасибо” дизайнерам и разработчикам, благодаря которым можно легко пересесть за другой компьютер, и продолжить редактировать свой пост, не спотыкаясь, на чужой клавиатуре.
Если у вас есть предположения, почему так долго не было единого стандарта, или у вас есть объяснение логики производителей, поделитесь в комментариях!
Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.
Показать полностью 18
2 месяца назад
Эффектные трюки в программе Endorphin 2.5.2
Анимации создаваемые в этой программе не требуют моушен капчер, но при этом остаются на том же уровне, а чаще всего и лучше ведь никто не будет для всего лишь одного момента в игре прыгать с огромной высоты без парашюта. Или вам захотелось показать космос пожалуйста:
Всё анимируется благодаря ключевым позам:



Endorphin — это программный пакет для динамического синтеза движений, разработанный NaturalMotion . Эндорфин можно использовать для создания компьютерных симуляций большого количества независимых персонажей, взаимодействующих друг с другом и с миром в соответствии с краткими сценариями или «поведениями». Он сочетает в себе физику, искусственный интеллект и генетические алгоритмы для создания реалистичной анимации. В отличие от Euphoria , также разработанной NaturalMotion, Endorphin — это не движок, а инструмент 3D-анимации для Microsoft Windows.
В Endorphin 2.5.2 можно загружать собственных персонажей например монстров, пришельцев и собственные объекты например танк, самолёт, вертолёт и т.д.
Заранее сделанные анимации можно соединить с симуляцией например персонаж будет идти по анимации, а его руки будут вести себя по симуляции в той позе в которую вы их поставили в Endorphin.
Все анимации и их окружение можно сохранить и использовать в игре или в сознании мультиков и фильмов.
Длина записи анимации 5 тысяч кадров.
Бесплатно скачать Endorphin 2.5.2 можно по этим ссылкам:
Показать полностью 3 2
2 месяца назад
Путешествовать по всей Земле размером 1:1
На основе базы Google Tiles и движка Unreal Engine 5 воссоздали целую планету.
Точность и реалистичность — невероятные. Выглядит очень круто, но пока это всего лишь демо-версия.
2 месяца назад

Областное ТВ сняло сюжет о нашей инди-игре «They Are Here»
Ссылка на игру «They Are Here: Alien Abduction Horror» в Steam: https://store.steampowered.com/app/1547540
3 месяца назад

Делаю игру на Unreal engine 5 в одиночку
Делать довольно трудно, поэтому буду рад любой поддержке. По итогу будет думер экспириенс + мухоморный трип + хоррор. Пока на таком этапе:





Примерно процентов 30 сделано.
сделал первый трейлер
Если есть замечания советы предложения буду рад!
Показать полностью 4 1
4 месяца назад

Линейность в играх глазами здорового человека
Игры с линейным сюжетом:
Дойти до светофора, перейти улицу.
Игры с линейным сюжетом и сайдквестами:
Дойти до светофора, перейти улицу.
По дороге можно свернуть в буфет и купить батон хлеба, в буфете можно поговорить с НПЦ.
Игры с линейным сюжетом и сайдквестами в стиле Ubisoft:
Дойти до светофора, перейти улицу.
По дороге у вас заканчиваются силы и вы должны свернуть в буфет и купить батон хлеба для восстановления энергии. В буфете вы должны поговорить с НПЦ, чтобы узнать где находится светофор.
Игры с нелинейным сюжетом:
Дойти до светофора, перейти улицу.
Либо, перейти улицу, дойти до светофора.
Либо, перейти улицу, не доходить до светофора.
Либо, свернуть в буфет и остаться на вечеринку с НПЦ.
Игры с псевдо-нелинейным сюжетом:
Дойти до светофора, перейти улицу.
Можно идти по левой кромке тротуара, а можно по правой.
Игры с линейным сюжетом и моральным выбором:
Дойти до светофора, перейти улицу.
На зебре у вас есть выбор наступать не белые полосы или нет. От этого будет зависеть насколько подозрительно на вас будут смотреть окружающие.
Игры с линейным сюжетом и псевдо-моральным выбором:
Дойти до светофора, перейти улицу.
То как на вас будут смотреть окружающие зависит от того, какой ногой вы ступите на зебру.
Бонус.
Игры с открытым миром:
В буфете первого этажа здания, который вы построили своими руками, в конце тяжелой смены поздно вечером, вы иногда слышите робкие рассказы о том, что где-то существует светофор и на нем кто-то когда-то переходил улицу.
Игры с реиграбельностью:
Дойти до светофора, перейти улицу.
Можно поменять цвет штанов, обувь и длину шага.
Игры в стиле рогалик:
Дойти до светофора, перейти улицу.
Цвет штанов, обувь и длина шага определятся случайно по прихоти сотрудника ДПС. Маршрут до светофора определяется им же.
Игры с процедурной генерацией:
Дойти до светофора, перейти улицу.
Материал поверхности улицы генерируется случайно: асфальт, песок, гравий, резина. С вероятностью 5% «пол — это лава».
Игры в стиле JRPG:
Дойти до светофора, перейти улицу.
Перед началом путешествия нужно выслушать истории всех НПЦ о том, с какими трудностями им пришлось столкнуться во время перехода улицы.
Игры с классово-ролевой системой:
Дойти до светофора, перейти улицу.
Вы умеете ходить только по тротуарам, для перехода улицы вам понадобится помощь ходока по зебрам.
Игры в стиле ММОРПГ (ПвЕ):
Дойти до светофора, перейти улицу.
Каждые 10 метров, менять обувь на более красочную. Перед светофором надеть плащ. На другой стороне присоединиться к празднующей толпе тех, кто смог перейти улицу.
Игры с гриндом:
Дойти до светофора, перейти улицу.
Пересчитать все трещины на тротуаре, прежде чем перейти улицу. Осмыслить почему через вторую трещину прорывается ровно две травинки.
Игры с донатом:
Дойти до светофора, перейти улицу.
Нанять рикшу, чтобы вас довезли до светофора.
Показать полностью
5 месяцев назад

Как создать ИИ-кавер с помощью нейросети: генерация несуществующих песен с голосами знаменитых артистов
В социальных сетях стали популярны несуществующие песни, созданные при помощи нейросетей. В апреле этого года пользователь ghostwriter977 загрузил на Spotify трек Heart on My Sleeve, который набрал более миллиона прослушиваний. Звучание песни было похоже на исполнение The Weeknd и Дрейка, но на самом деле её создала нейросеть. Эта история разошлась по миру, но позже трек был удалён по требованию правообладателя Universal.
Тем не менее, в социальных сетях продолжают появляться другие каверы: голосом Фредди Меркьюри была исполнена песня Imagine Dragons, а Канье Уэст «спел» Just The Two of Us. Тренд распространился и на рунет: песни стали перепевать голосами Доры и Элджея. А ИИ-каверы от нейро-Моргенштерна произвели фурор в TikTok.
Если вы тоже хотите создать свой собственный ИИ-кавер, то мы подскажем как это сделать. За полчаса или за 5 минут вы можете создать свою собственную песню, которая будет звучать как исполнение ваших любимых артистов, благодаря нейросети.
В марте 2023 года китайские разработчики выложили на GitHub нейросеть SoftVC VITS Singing Voice Conversion, известную онлайн как so-vits-svc. Эта нейросеть может имитировать певцов и создавать новые песни с их голосами. Алгоритм был разработан энтузиастами и доступен для всех, но чтобы запустить его локально, нужны знания программирования и мощный компьютер.
Чтобы не тратить время на программирование и не заниматься обучением модели, можно воспользоваться нейросетью на Google Collab. За полчаса вы можете создать полностью готовый ИИ-кавер. Процесс генерации песни с голосом исполнителя, чью модель выложили в открытый доступ, не требует специальных знаний.
Как создать трек в нейросети so-vits-svc с помощью Google Collab: генерация ИИ-каверов
Шаг 1. Выберите песню, которую будет исполнять сгенерированный голос, и скачайте её в формате mp3. Для успешной генерации также понадобится инструментал и голос оригинального певца.
Учтите, что музыка защищена авторским правом, поэтому коммерческое использование может привести к удалению вашего сгенерированного трека с платформ. Выбирайте песни, доступные по лицензии Creative Commons.
Шаг 2. Разделите трек на а капеллу и минус. Для этого загрузите mp3-файл на сайт x-minus. Зеленая дорожка будет содержать а капеллу, а синяя — минус. Скачайте полученные файлы и переименуйте их для удобства.

Шаг 3. Конвертируйте файл с а капеллой из формата mp3 в wav. Это можно сделать с помощью бесплатной программы Audacity или онлайн-конвертера cloudconvert.
Шаг 4. Перейдите по ссылке на so-vits-svc, веб-интерфейс нейросети, запускаемый на Google Collab. Этот сервис позволяет бесплатно запускать код на вычислительных мощностях других пользователей, но при этом есть ограничения: каждый раз нужно ждать загрузки библиотек и моделей.
Вы также можете использовать другие интерфейсы, но мы не можем гарантировать, что они будут работать так же хорошо. Эта инструкция написана для so-vits-svc, поэтому в других веб-интерфейсах порядок действий может отличаться.
Шаг 5. Для того чтобы записать песню с использованием нейросети, необходимо выполнить ряд предварительных действий. Войдите в свой аккаунт Google или создайте новый, так как для работы с Google Collab требуется авторизация.
Шаг 6. Последовательно запустите следующие ячейки: Check GPU, Setup 1, Setup 2, Download ContentVec, и Setup HF Downloads. Нажмите на кнопку «Play» рядом с каждым заголовком для запуска кода. Когда загрузка завершится, появится зеленая галочка около названия ячейки. Следующую ячейку нужно запускать только после полной загрузки предыдущей — если пропустить одну из строк, программа не сработает.
Наибольшее время занимает загрузка Setup 1, которая может занять до 10 минут. Остальные ячейки загружаются за несколько секунд. Загружать код для каждого трека не нужно — достаточно сделать это один раз. Обратите внимание, что через 2 часа код автоматически сбросится, и все действия придется повторить.

Шаг 7. Выберите голос, который будет использоваться для создания песни. Для этого найдите поле model_url под заголовком Other Downloads (.zip) Step o.1 и добавьте в него ссылку на папку с моделью голоса. Вы можете выбрать голос из списка доступных в этой же ячейке, например, Канье Вест, Кендрик Ламар или Дрейк. Также можно использовать библиотеку голосов на huggingface и скопировать ссылку на нужную папку оттуда. Доступны голоса российских исполнителей, таких как Oxxxymiron или Моргенштерн. Обратите внимание, что Мирон Федоров, выступающий под именем Oxxxymiron, и Алишер Моргенштерн внесены Минюстом в реестр иноагентов. Нейросеть поддерживает ссылки на любые заархивированные папки с Google Drive, MEGA, huggingface и других ресурсов. Вы можете использовать любую модель, которую найдете в интернете.

Шаг 8. Запустите еще одну ячейку с кодом — Extract.zip Downloads — Step o.2. Дождитесь завершения загрузки.

Шаг 9. Нажмите на иконку папки и перетащите в нее аудиофайл с а капеллой в формате wav, который вы подготовили на третьем шаге. Загрузка файла может занять несколько минут — длительность зависит от длины файла. Когда загрузка завершится, запустите код.
Шаг 10. Нажмите на кнопку «Convert». После этого появится плеер со сгенерированным голосом. Скачайте готовый трек, нажав правой кнопкой мыши на плеере. Если плеер не появился, то загрузите последний файл в папке слева. Обратите внимание, что на этом этапе могут возникнуть ошибки. Их причиной может быть выбор нерабочей модели или использование слишком длинной а капеллы. Проверьте правильность ввода текста и настройки языка, а также убедитесь в стабильности интернет-соединения.
Шаг 11. После того, как вы получили готовый трек, откройте любой аудиоредактор, например, бесплатную программу Audacity или онлайн-сервис veed.io. Совместите минус со сгенерированной а капеллой. При этом могут пригодиться навыки мастеринга и сведения музыки, если они у вас есть.
Как создать трек на сайте musicfy: простой способ без использования Google Collab
Этот метод гораздо проще, чем использование Google Collab, однако есть определенные ограничения. На сайте musicfy доступны только готовые пресеты голосов, поэтому добавить свой голос туда не получится.
Чтобы создать трек на сайте musicfy, выполните следующие шаги:
Шаг 1. Скачайте песню в формате mp3.
Шаг 2. Разделите трек на капеллу и минус. Для этого перейдите на сайт x-minus, загрузите там mp3 файл и скачайте полученные аудиофайлы.
Шаг 3. Перейдите на сайт musicfy. Войдите через свой Google-аккаунт и нажмите кнопку «Create a song». Загрузите в поле mp3-файл с капеллой или запишите свой голос.
Если файл не загружается, прокрутите страницу вниз, возможно появится сообщение об ошибке «Audio file is corrupted, please try uploading another file». Попробуйте загрузить файл еще раз.

Шаг 4. Выберите один из готовых голосов. На сайте доступны вокалы множества исполнителей, например, Арианы Гранде, Дрейка, Граймса, Канье Уэста, Трэвиса Скотта и других. Также можно выбрать персонажей мультфильмов, таких как Губка Боб Квадратные Штаны или Питер Гриффин. Все эти голоса могут использоваться для записи русскоязычного текста.
Шаг 5. Нажмите кнопку «Convert». После обработки скачайте готовый файл. Если появляется ошибка, попробуйте еще раз.
Шаг 6. Совместите минус и сгенерированную капеллу в любом аудиоредакторе, например, бесплатной программе Audacity или онлайн-сервисе veed.io. Сохраните получившийся трек и наслаждайтесь своим творением!

Как выбрать способ генерации трека?
Один из вариантов — использование нейросети в Google Collab, которая позволяет создавать треки сотней голосов пользователей. Однако, этот метод затратен по времени и может выдавать ошибки, при этом не предоставляя ясной информации о причинах возникновения проблем. Чтобы их решить, иногда нужно искать помощь на форумах или видео-ресурсах, что может занять много времени.
В отличие от этого, Musicfy позволяет легко генерировать треки без запуска кода и вероятности ошибок, а также без необходимости конвертирования аудиофайлов. Однако, на сайте доступен только ограниченный выбор голосов.
Подпишитесь на мой телеграм, там я рассказываю про нейронные сети и обучаю вас их использовать.
И еще парочка AI каверов, в качестве бонусного трека
Показать полностью 6 3
Поддержать
1 год назад

Первый высокопроизводительный пластиковый процессор стоимостью в 1 цент

30-40 лет назад, когда персональные компьютеры были ещё в новинку, а интернета как такового не было, пионеры вычислительной технологии предсказывали, что в будущем электронные чипы станут настолько дешёвыми, что они будут повсюду — в домах, в транспорте, даже в человеческом теле. Для того времени эта идея казалась фантастической, даже абсурдной. ПК тогда были очень дороги и в большинстве своём даже не подключались к интернету. Мысль о том, что миллиарды крохотных чипов когда-нибудь станут дешевле семечек, казалось нелепой.
Десятилетиями технари обещают мир, где абсолютно каждый объект, с которым мы будем сталкиваться — мебель, посуда, одежда — будет обладать «умом» благодаря сверхдешёвым программируемым процессорам. Если вам интересно, почему этого до сих пор не произошло, то это потому, что никто не построил работающие процессоры, которые можно было бы производить миллиардами стоимостью в 1 цент каждый.
Со временем абсолютно всё вокруг нас станет «умным». Производители, не сделавшие свою продукцию «умной», в какой-то момент будут вытеснены с рынка конкурентами, которые успели это сделать. Одним из путей добиться таких дешёвых микропроцессоров, являются микрочипы из пластика.
Почти 50 лет назад Intel создала первый в мире серийно выпускаемый микропроцессор — 4004, скромный 4-битный ЦП с 2300 транзисторами, изготовленными по технологии 10 мкм из кремния и способным выполнять только простые арифметические операции. С момента этого новаторского достижения происходило непрерывное технологическое развитие с возрастающей сложностью до такой степени, что современные кремниевые 64-разрядные микропроцессоры теперь имеют 30 миллиардов транзисторов (например, микропроцессор AWS Graviton2, изготовленный по техпроцессу 7 нм). Микропроцессоры настолько укоренились в нашей жизни, что стали метаизобретением, то есть инструментом, позволяющим реализовать другие изобретения.
Микропроцессоры лежат в основе каждого электронного устройства, включая смартфоны, планшеты, ноутбуки, маршрутизаторы, серверы, автомобили и, в последнее время, интеллектуальные объекты, составляющие Интернет вещей. Хотя традиционная кремниевая технология включает в себя как минимум один микропроцессор, встроенный в каждое «умное» устройство на Земле, она сталкивается с ключевыми проблемами, чтобы сделать повседневные предметы умнее. Стоимость является наиболее важным фактором, препятствующим применению традиционной кремниевой технологии в этих повседневных предметах. Хотя экономия за счёт масштаба производства кремния помогла резко снизить себестоимость единицы продукции, себестоимость единицы микропроцессора по-прежнему непомерно высока. Кроме того, кремниевые чипы не являются естественно тонкими и гибкими, что является очень желательными характеристиками для встроенной электроники в эти предметы повседневного обихода.
С другой стороны, гибкая электроника предлагает эти желательные характеристики. За последние два десятилетия эта технология продвинулась вперед, предлагая недорогие, тонкие, гибкие и удобные устройства, включая датчики, память, батареи, светоизлучающие диоды, сборщики энергии и печатные схемы. Это основные компоненты для создания любого интеллектуального интегрированного электронного устройства. Недостающим элементом является гибкий микропроцессор. Основная причина, по которой до сих пор не существует жизнеспособного гибкого микропроцессора, заключается в том, что относительно большое количество тонкоплёночных транзисторов (TFT) необходимо интегрировать на гибкой подложке для выполнения каких-либо значимых вычислений.

Микропроцессор PlasticARM
Например, в 2021 году компания Arm воспроизвела свой простейший 32-битный микроконтроллер M0 из пластика, но даже это не могло соответствовать требованиям. Проблема, по мнению инженеров Иллинойсского университета Урбана-Шампейн и британского производителя гибкой электроники PragmatIC Semiconductor, заключается в том, что даже самые простые микроконтроллеры промышленного стандарта слишком сложны, чтобы изготавливать их из пластика массово.
В отличие от обычных полупроводниковых устройств, гибкие электронные устройства строятся на подложках, таких как бумага, пластик или металлическая фольга, и используют активные тонкоплёночные полупроводниковые материалы, такие как органические соединения, оксиды металлов или аморфный кремний. Они предлагают ряд преимуществ по сравнению с кристаллическим кремнием, включая низкие производственные затраты. Тонкоплёночные транзисторы (TFT) могут быть изготовлены на гибких подложках при гораздо меньших затратах на обработку, чем полевые транзисторы «металл-оксид-полупроводник» (MOSFET), изготовленные на кристаллических кремниевых пластинах. Цель технологии TFT не в том, чтобы заменить кремний. Поскольку обе технологии продолжают развиваться, вполне вероятно, что кремний сохранит преимущества с точки зрения производительности, плотности и энергоэффективности. А TFT позволят создавать электронные продукты с новыми форм-факторами и стоимостью, недостижимой для кремния, тем самым значительно расширяя диапазон потенциальных приложений.

Микропроцессоры с разрядностью 8-бит и 4-бит соответственно

Промежуточный подход заключается в интеграции микропроцессорных кристаллов на основе кремния в гибкие подложки, что также называется гибридной интеграцией, когда кремниевая пластина утончается, а кристаллы из пластины интегрируются в гибкую подложку. Хотя интеграция тонкого кремниевого кристалла предлагает краткосрочное решение, этот подход по-прежнему опирается на традиционные дорогостоящие производственные процессы. Следовательно, это не жизнеспособное долгосрочное решение, позволяющее производить миллиарды повседневных смарт-объектов, которые ожидаются в следующем десятилетии и далее.
В исследовании, которое будет представлено на Международном симпозиуме по компьютерной архитектуре ISCA 2022, трансатлантическая команда представляет простой, но полнофункциональный пластиковый процессор, который можно изготовить по цене менее 1 цента. Команда из Университета Иллинойса разработала 4-битные и 8-битные процессоры специально для того, чтобы минимизировать размер и максимизировать процент производимых рабочих интегральных схем. Чип 4-битной версии сработал, выдав 81 % производительности, и этого достаточно, чтобы преодолеть барьер в 1 цент.

Испытательная установка для пластикового микрочипа

Архитектура 4-битного пластикового микрочипа
Пластиковые процессоры были изготовлены с использованием гибкого тонкоплёночного полупроводника, оксида индия, галлия и цинка (IGZO), который может быть построен из пластика и способного работать даже при изгибе вокруг миллиметрового радиуса. Но в то время, когда надёжный производственный процесс является обязательным условием, именно дизайн возымел большее значение.
Вместо того, чтобы адаптировать существующую архитектуру микроконтроллера для пластика, команда Иллинойса начала с нуля создавать конструкцию под названием Flexicore. Производительность падает очень быстро, если увеличивать количество проводящих каналов. Зная это, команда разработала конструкцию, способную свести к минимуму количество необходимых каналов. Помогло использование 4-битной и 8-битной логики вместо 16-битной или 32-битной. Как и разделение памяти, в которой хранятся инструкции, от памяти, в которой хранятся данные. Но команда также сократила количество и сложность инструкций, которые процессор способен выполнять.

Сравнение кремния и IGZO на примере дисплея телевизора
Почему не кремний?
Вам может быть интересно, почему кремниевые процессоры не могут выполнять работу сверхдешёвых гибких вычислений. По сравнению с пластиком кремний дорог и негибок, но если сделать чип достаточно маленьким, пластик мог бы и не понадобиться. Тем не менее, кремний не справляется с этой задачей по двум причинам: во-первых, хотя площадь схемы можно сделать сверхмалой, всё же нужно оставить сравнительно большое пространство по краям, чтобы чип можно было вырезать из пластины. В случае такого простого микроконтроллера, как Flexicore, вокруг края будет больше места, чем области, содержащей схемы. Более того, понадобится ещё больше места для размещения достаточного количества контактных площадок ввода-вывода, чтобы данные и питание могли попасть на чип. Внезапно получается большая площадь дорогостоящего пустого кремния, что увеличивает расходы выше критической отметки в 0,01 доллара США.
Команда ещё больше упростила, разработав процессор таким образом, чтобы он выполнял инструкцию за один такт вместо многоступенчатых конвейеров современных процессоров. Затем они разработали логику, реализующую эти инструкции путем повторного использования частей, что ещё больше уменьшило количество вентилей.

Всё это привело к созданию 4-битного FlexiCore площадью 5,6 квадратных миллиметра, состоящего всего из 2104 полупроводниковых устройств (примерно столько же, сколько транзисторов в Intel 4004 1971 года) по сравнению с примерно 56 340 устройствами для PlasticARM. Это на порядок меньше, чем у самых маленьких кремниевых микроконтроллеров с точки зрения количества вентилей. Команда также разработала 8-битную версию FlexiCore, но она пока не дала положительных результатов.
С PragmatIC Semiconductor команда из Иллинойса произвела пластины с пластиковым покрытием, заполненные 4-битными и 8-битными процессорами, протестировала их при различных напряжениях в нескольких программах. Эксперимент кажется простым, но он новаторский. Большинство исследовательских процессоров, созданных с использованием некремниевых технологий, дают настолько низкую производительность, что результаты сообщаются с одного или, в лучшем случае, нескольких работающих чипов. Это первая работа, в которой кто-либо получал данные с нескольких микросхем для любой некремниевой технологии.
Не удовлетворившись таким успехом, команда разработала инструмент проектирования для изучения архитектурных оптимизаций для различных приложений. Например, инструмент показал, что энергопотребление можно значительно снизить, если немного увеличить количество вентилей.

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

A shader is a small program executed on the GPU, and of course it takes some time to get compiled and loaded. Usually, compiling and loading a single GPU program does not take much time, but shaders often have a lot of «variants». Complex shaders have multiple preprocessor directives (defines) for various cases, each combination of these directives defines a shader variant. So we end up having to compile many thousands of slightly different GPU programs. Compiling shaders on demand at runtime causes freezes and requires extra memory. In order to reduce this overhead, all required shader combinations are parsed, compiled, and stored in the shader cache. Loading precompiled shaders from cache is much faster. Шейдер — это небольшая программа, выполняемая на графическом процессоре, и, конечно же, для ее компиляции и загрузки требуется некоторое время. Обычно компиляция и загрузка одной программы GPU не занимает много времени, но шейдеры часто имеют много «вариантов». Сложные шейдеры имеют несколько директив препроцессора (определений) для различных случаев, каждая комбинация этих директив определяет вариант шейдера. В итоге нам приходится компилировать тысячи немного разных программ на GPU. Компиляция шейдеров по запросу во время выполнения вызывает зависания и требует дополнительной памяти. Чтобы уменьшить эти накладные расходы, все необходимые комбинации шейдеров анализируются, компилируются и сохраняются в кеше шейдеров . Загрузка предварительно скомпилированных шейдеров из кеша происходит намного быстрее.

Shader cache for OpenGL represents a pre-translation of shaders from UUSL to GLSL, not a compilation. It is generated 5-10 times faster than for DirectX, but uses 5-6 times more disk space. Кэш шейдеров для OpenGL представляет собой предварительный перевод шейдеров из UUSL в GLSL , а не компиляцию. Он генерируется в 5-10 раз быстрее, чем для DirectX, но использует в 5-6 раз больше дискового пространства.
Примечание

DirectX shaders cache generated for debug builds should not be used for release builds, as shader compilation is performed without optimizations. Re-generate DirectX shaders cache for your release build for maximum performance (ensured by optimized compilation). Кэш шейдеров DirectX, созданный для отладочных сборок, не следует использовать для сборок выпуска, так как компиляция шейдеров выполняется без оптимизации. Повторно сгенерируйте кеш шейдеров DirectX для вашей сборки релиза для максимальной производительности (обеспеченной оптимизированной компиляцией).

There are no special requirements for shaders caching such as installing or setting up any additional software. Нет никаких особых требований к кешированию шейдеров, таких как установка или настройка какого-либо дополнительного программного обеспечения.

Every time when the Engine fails to retrieve a shader from the cache, the required shader is compiled and added to cache automatically. However, this may cause your application to «hiccup» (freeze for a while). Which is totally unacceptable for many applications (e.g. real-time simulators). So, the point is that you should have the most complete shader cache containing all variants that are used in your application. Каждый раз, когда движку не удается получить шейдер из кеша, требуемый шейдер компилируется и автоматически добавляется в кеш. Однако это может привести к спайку в вашем приложении (зависанию на некоторое время). Что совершенно неприемлемо для многих приложений (например, симуляторов в реальном времени). Итак, дело в том, что у вас должен быть самый полный кеш шейдеров, содержащий все варианты, которые используются в вашем приложении.
Примечание

Shaders cache should be generated for float- and double-precision builds separately, as each of them uses its own shader cache (i.e. cache generated for float precision is not suitable for a double-precision build). In case your application is released with both builds float and double, you’ll have to generate shaders cache twice. Кэш шейдеров должен создаваться отдельно для сборок с плавающей точкой и двойной точностью, поскольку каждый из них использует свой собственный кеш шейдера (т.е. кеш, сгенерированный для точности с плавающей точкой, не подходит для сборки с двойной точностью). Если ваше приложение выпущено с обоими сборками float и double, вам придется дважды сгенерировать кеш шейдеров.

Precompilation of all shaders is an important feature guaranteeing, that at the time your project is completed and final builds are ready to be handed over to customers, you will have a complete shader cache. This significantly reduces the number of freezes in the final release build and smooths your application’s framerate. Shaders are precompiled for all materials in the project. Предварительная компиляция всех шейдеров — важная функция, гарантирующая, что когда ваш проект будет завершен и окончательные сборки будут готовы к передаче клиентам, у вас будет полный кеш шейдеров. Это значительно уменьшает количество зависаний в окончательной сборке выпуска и сглаживает частоту кадров вашего приложения. Шейдеры предварительно скомпилированы для всех материалов в проекте.

This feature is available via the Precompile All Shaders button on the toolbar near the Play button or via the Editor section of the Settings window when a world is loaded. Эта функция доступна с помощью кнопки Precompile All Shaders на панели инструментов рядом с кнопкой Play или через раздел Editor окна Settings при загрузке мира.


Precompile All Shaders option on the toolbar and in the Editor section of the Settings window Параметр Precompile All Shaders на панели инструментов и в разделе Editor окна Settings

You can use it in one of the following ways: Вы можете использовать его одним из следующих способов:
Constant background precompilationПостоянная фоновая предварительная компиляция
When this button is enabled, each time you create a new material, you’ll see the following message on shader compilation in the viewport: Когда эта кнопка включена, каждый раз, когда вы создаете новый материал, вы будете видеть следующее сообщение о компиляции шейдера в области просмотра:
Примечание

You can stop the process of shaders cache generation in case the UnigineEditor’s UI response has become too slow via the corresponding button right on the compilation message. Вы можете остановить процесс генерации кеша шейдеров в случае, если ответ пользовательского интерфейса UnigineEditor стал слишком медленным, нажав соответствующую кнопку прямо в сообщении компиляции.
Materials, for which the shaders were not yet compiled, will be temporarily replaced with base ones colored in grey and having no textures. This may take a couple of seconds depending on your computer’s performance. This option guarantees, that you always have a complete shader cache for the selected graphics API. Материалы, для которых еще не были скомпилированы шейдеры, будут временно заменены базовыми, окрашенными в серый цвет и не имеющими текстур. Это может занять несколько секунд в зависимости от производительности вашего компьютера. Эта опция гарантирует, что у вас всегда будет полный кеш шейдеров для выбранного графического API.
Precompilation on demandПредварительная компиляция по запросу
Sometimes constant background compilation of shaders may disturb and slow down your work, this is typical for some engines. UNIGINE lets you disable shaders precompilation. You can enable it just before measuring performance of your final build. In this case shader cache generation will take much more time (up to half an hour) depending on your project’s complexity and selected graphics API. But it will be performed only once instead of slowing down your work each time you make changes to your materials. Иногда постоянная фоновая компиляция шейдеров может мешать и замедлять вашу работу, это типично для некоторых движков. UNIGINE позволяет отключить предварительную компиляцию шейдеров. Вы можете включить его непосредственно перед измерением производительности вашей окончательной сборки. В этом случае генерация кэша шейдеров займет гораздо больше времени (до получаса) в зависимости от сложности вашего проекта и выбранного графического API. Но это будет выполняться только один раз вместо того, чтобы замедлять вашу работу каждый раз, когда вы вносите изменения в свои материалы.
Примечание

This mode is recommended for graphics programmers to save time on recompilation when changing states of materials. Этот режим рекомендуется программистам графики для экономии времени на перекомпиляцию при изменении состояния материалов.

Forced shader precompilation ensures, that you have the most complete world-independent shaders cache for all materials in your project. However, changing some local settings, such as the ones for geodetic pivot, terrain, water, or clouds (e.g. changing some material state via the Tracker or your application logic) still leads to recompilation of shaders, but just a local one performed only for the corresponding type of objects. Принудительная предварительная компиляция шейдеров гарантирует, что у вас будет наиболее полный независимый от мира кеш шейдеров для всех материалов в вашем проекте. Однако изменение некоторых локальных настроек, таких как настройки геодезической оси, ландшафта, воды или облаков (например, изменение состояния материала с помощью Tracker или логики вашего приложения), по-прежнему приводит к перекомпиляции шейдеров, но только локальным одна выполняется только для соответствующего типа объектов.

The following actions should be performed to generate the most complete shader cache for your project: Для создания наиболее полного кеша шейдера для вашего проекта необходимо выполнить следующие действия:
Open all worlds, that contain geodetic pivot, terrain, water, or clouds. Откройте все миры, содержащие геодезические точки, рельеф, воду или облака.
For each of these worlds perform the following:
water — put a scene camera over water, under water and at the waterline between the two media. water — put a scene camera over water, under water and at the waterline between the two media.
terrain — put a scene camera high above the terrain and move it to the terrain surface. terrain — put a scene camera high above the terrain and move it to the terrain surface.
clouds — put a scene camera over above the clouds, under the clouds and inside the clouds. clouds — put a scene camera over above the clouds, under the clouds and inside the clouds.
water — put a scene camera over water, under water and at the waterline between the two media.terrain — put a scene camera high above the terrain and move it to the terrain surface.clouds — put a scene camera over above the clouds, under the clouds and inside the clouds. Для каждого из этих миров выполните следующие действия:
water — put a scene camera over water, under water and at the waterline between the two media. вода — поместите камеру сцены над водой, под водой и на ватерлинии между двумя средами.
terrain — put a scene camera high above the terrain and move it to the terrain surface. местность — поместите камеру сцены высоко над ландшафтом и переместите ее на поверхность ландшафта.
clouds — put a scene camera over above the clouds, under the clouds and inside the clouds. облака — поместите камеру сцены над облаками, под облаками и внутри облаков.
Create and launch tracks for all material states, that you plan to switch via your application’s logic. Создайте и запустите треки для всех состояний материала, которые вы планируете переключать с помощью логики вашего приложения.
Примечание

To minimize run-time recompilation of shaders for materials, whose states are to be changed via the application logic, you can also create separate materials having the required state values and switch between these materials instead of changing states. Чтобы свести к минимуму перекомпиляцию шейдеров для материалов, состояния которых должны быть изменены с помощью логики приложения, вы также можете создавать отдельные материалы, имеющие требуемые значения состояния, и переключаться между этими материалами вместо изменения состояний.

Output shader cache for DirectX / OpenGL is generated inside the data folder: Кэш выходных шейдеров для DirectX / OpenGL создается внутри папки data :
- shader_d3d11.cache
- shader_gl.cache

Do not put shader cache files to UNG archives! You will not have a substantial file size reduction, as cache files already use LZ4 compression. Moreover, in this case new shaders, that can be generated on your end user’s side, won’t be added to cache. Не помещайте файлы кеша шейдеров в архивы UNG! У вас не будет существенного уменьшения размера файла, поскольку файлы кеша уже используют сжатие LZ4. Более того, в этом случае новые шейдеры, которые могут быть сгенерированы на стороне вашего конечного пользователя, не будут добавлены в кеш.

As your project is completed and final builds are ready to be handed over to customers, you should copy both cache files ( shader_gl.cache and shader_d3d11.cache ) to the data directory of the final build. Когда ваш проект завершен и финальные сборки готовы к передаче клиентам, вам следует скопировать оба файла кеша ( shader_gl.cache и shader_d3d11.cache ) в каталог data окончательной сборки.

If you pass a project name via the command line or on engine initialization:
Shell-команды
-project_name "YourProject"
you should copy shader cache files to the following directory: Если вы передаете имя проекта через командную строку или при инициализации движка:
Shell-команды
-project_name "YourProject"
- Windows — C:/Users//YourProject/
- Linux — /home//.YourProject/
Последнее обновление: 23.06.2023