Для многих из нас в прошлом году нашлось куда больше времени на любимые хобби. Кто-то сделал свою жизнь более насыщенной путем просмотра сериалов или зависанием в играх, а вот программист Мэттью Уайлд посвятил время самоизоляции более грандиозному проекту — созданию шейдера для бутылок с алкоголем в Half-Life: Alyx.
Шейдеры были добавлены в игру еще в майском патче, и буквально сразу обрели популярность среди геймеров и разработчиков. Объяснить это легко — они выглядят действительно круто. Шейдер делает бутылки прозрачными и добавляет в них жидкость, которая реагирует на любые движения естественным образом.
Портал Polygon решил разобраться в принципе работы шейдера, и пообщался с Уайлдом. Мы перевели этот материал. Оригинал по ссылке выше.
Spent a good chunk of lock-down doing this important work. Boozy liquid shader, now available in the latest update for Half-Life: Alyx pic.twitter.com/Iw9h98pmEg
— Matthew Wilde (@skilful) May 28, 2020
Уайлд — разработчик визуальных эффектов, входящий в рабочий штат Valve. Но пока шла разработка Alyx, Мэттью был занят Dota Underlords. Он создал шейдер бокала с вином для персонажа Dota Джула. Это в свою очередь привлекло внимание Скотта Далтона из команды Half-Life: Alyx. Среди локаций Alyx есть огромное множество бутылок, а события одного-конкретного уровня разворачиваются на винокурне и требуют частого взаимодействия с бутылками.
Создание шейдера, который сделает бутылки с жидкостью более реалистичными, повысило бы общие впечатления от уровня. Да и Уайлду не нужно было начинать с нуля: игра была практически готова, имела детализированные ассеты и мощную систему освещения.
В игре было множество моделей бутылок, которые имели красивые текстуры и выглядели великолепно. Поэтому идея казалась многообещающей.
Но дата релиза Alyx была уже не за горами, поэтому за отведенное время было невозможно создать новый шейдер, который не вызвал бы проблем с производительностью.
Если бы речь шла о какой-то случайной бутылке… вероятно, проблем не возникло. Но в данном случае затрагивался уровень с винокурней, содержащей тысячи предметов реквизита и бутылок.
Шейдер так и не был включен в релизную версию игры. Уайлд был разочарован, но все-таки сумел совладать с эмоциями. Half-Life: Alyx вышла 23 марта 2020 года. В тот же день Джей Инсли, губернатор Вашингтона, издал указ о начале карантина, в результате Valve перестала работать в офисе.
И тут, внезапно, у всех появилось много свободного времени. Локдаун позволил нам сделать то, чем мы не могли заняться раньше.
Создание шейдера
Шейдеры — программы, которые задают внешний вид трехмерных объектов. В данном случае речь идет о пиксельном шейдере, который задает цвет каждому пикселю в зависимости от того, как на него падает свет. Все, что отображается в игре, имеет свой шейдер.
Просто некоторые шейдеры используются гораздо чаще остальных.
В конечном счете, шейдеры связаны со многими видимыми нам деталями. Рендеринг чего-либо в 3D — например, всех бороздок и узлов на древесной коре — требует много времени и расходует производительность. Но шейдер может создать иллюзию коры дерева, брони, кожи или пенящегося пива в бутылке даже в том случае, если объект, к которому он применяется, состоит исключительно из гладких многоугольников.
Попав на домашний карантин, Уайлд вернулся к созданию шейдера. В Alyx уже была система освещения, поэтому для работы шейдера нужно было выяснить, какие значения используются при расчете освещения. Шейдер учитывает такие входные данные, как базовые цвета, текстуры и отражения как для жидкости, так и для самой бутылки, а затем объединяет все это вместе.
И тогда выводится другой цвет. Для каждого пикселя, что и дает общий результат.
По материалам: shazoo.ru