Для почти всех из нас в прошедшем году нашлось куда больше времени на возлюбленные хобби. Кто-то сделал свою жизнь наиболее насыщенной методом просмотра телесериалов либо зависанием в играх, а вот программер Мэттью Уайлд предназначил время самоизоляции наиболее потрясающему проекту — созданию шейдера для бутылок с алкоголем в 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 уже была система освещения, потому для работы шейдера необходимо было узнать, какие значения употребляются при расчете освещения. Шейдер учитывает такие входные данные, как базисные цвета, текстуры и отражения как для воды, так и для самой бутылки, а потом соединяет воединыжды все это вкупе.
Тогда и выводится иной цвет. Для всякого пикселя, что и дает общий итог.
Шейдер для Alyx стал результатом одержимого сверханализа. Уайлд практически посиживал в подвале собственного дома, собирал различные бутылки и играл с ними, пытаясь узнать, как ведет себя жидкость снутри.
Вы видите шейдер, который является результатом всей проделанной работы. Это огромное количество страничек материала, которые просто не могут появиться на пустом месте сформированными. Это то, что обязано создаваться медлительно, поэтапно… а по ходу дела возникают разные идеи, которые вроде бы накладываются на прошлые.
Уайлд следил за настоящей бутылкой — пеной, образующейся на пиве, смотрел за тем, как жидкость улавливает свет — а опосля настраивал эти входные данные для шейдера так, чтоб его творение соответствовало действительности. Это схоже с созданием картины в стиле пуантилизма — пиксель за пикселем. Броско, что процесс никак не связан с моделированием.
[Шейдер] вправду заставлял жидкость вести себя так, как я лицезрел в действительности и задал в настройках. Нет ничего наиболее близкого к реальности, чем это. Да и нет никакой симуляции — просто наблюдение.
Отсюда и формулировка в примечаниях к патчу Alyx: «Сейчас снутри бутылок отображается жидкость, которая реагирует на тряску».
Отражение и преломление
Уже издавна для обработки отражений в играх употребляется кубическая карта. Но невзирая на внедрение трассировки лучей, в мгновение ока уйти от обычного подхода не выйдет. Кубическая карта представляет собой развертку 6 граней куба. Зависимо от того, куда ориентирована камера игрока, игра будет получать определенные характеристики определенной грани, чтоб сделать отражение. Вот почему в играх не работают зеркала — кубические карты не делают безупречных отражений, ну и необходимость в этом отсутствует.
В качестве примера можно вспомянуть Marvel’s Spider-Man на PS4: отражения в зданиях содержат какие-то элементы, расположенные вблизи, но при всем этом не являются четкой копией. В то же время часто разрабам удается сдержать наше недоверие, так как сделанные отражения смотрятся достаточно достоверно.
В этом шейдере употребляется этот же способ кубической карты не только лишь для сотворения отражений, да и для иллюзии преломления — свет не только лишь отражается, но к тому же проходит через объект.
Бутылки непрозрачны. Но они смотрятся такими, так как Alyx делает кубическую карту для ваших ориентировочных координат и проецирует конкретное, заблаговременно сделанное изображение на ту сторону бутылки, на которую вы смотрите. Для вас демонстрируют искаженный вид места, да и это всего только отлично справляющаяся с поставленной задачей иллюзия.
Внедрение [метода] для бутылок, которые по дефлоту делают преломления, где не все так буквально и верно… хорошая и полностью реализуемая мысль. Полагаю, помогает к тому же тот факт, что, когда кто-то глядит на стекло либо жидкость, подсознательно не осознает, какими эти преломления должны быть в действительности. Человек просто соглашается с тем, что лицезреет, принимает это за реальность. Звучит мало удивительно.
Когда шейдер накладывается на жидкость, то приходится применять двойные преломления кубической карты. Уайлд сочитает отражения поверх отражений, чтоб сделать воспоминание, что есть две поверхности — стеклянная бутылка и жидкость, «расположенная снутри».
Так и создается иллюзия воды снутри прозрачной бутылки, которая на самом деле непрозрачна и пуста.
Липовая физика
Но на этом игра с нашим мысленным порогом реализма не завершается. В случае с физикой вновь употребляются иллюзии, и никакой симуляции.
Все это фейк, сплошной обман. Обыкновенные наблюдения, опции и конфигурации значений до того времени, пока они не станут приближенными к эталону. Когда я трясу бутылку, [жидкость] мало покачивается. Потому и [шейдер] принуждает ее мало покачиваться, так как такие колебания смотрятся естественно.
Эти колебания — чуть ли не основная причина задержки релиза шейдера. Не было действенного метода передать информацию в игру. В конце концов, издержки на производительность оказались незначимыми, так как коллеги Уайлда из Valve сообразили, что данные могут храниться в цвете вершин шейдера.
Как произнес Уайлд в электрическом письме, цвет вершин — «пережиток наиболее ранешнего времени, до момента возникновения близких к реальности текстур и освещения».
В этом случае речь шла о цвете, который, на самом деле, нигде не употреблялся.
Колебания воды, направление гравитации, пена либо пузырьки — информация обо всем этом хранится в неиспользуемых RGB-каналах. Когда я очень трясу бутылкой, начинается перемешивание и плескание воды. Образование пузырьков либо пены также соединено со скоростью взбалтывания. Когда движение прекращается, они равномерно растворяются. Но практически все всеохватывающие вычисления — освещение, отражения и тени — все уже просчитывается для всякого объекта в игре, независимо от того, устраивает ли игрок безумие с бутылками либо нет.
Секрет фуррора
Невзирая на локдаун и обильное употребление алкоголя в период самоизоляции, Уайлд не был одинок при реализации шейдера и решении заморочек с производительностью. Зрительные эффекты Alyx создаются всей командой.
Сначала фуррор связан с тем, что уже с самого начала были доступны хорошие ассеты. Когда вы разрабатываете шейдер такового типа… вы подключаетесь к уже функционирующему сборочному потоку и имеющимся настройкам освещения. На самом деле, это попытка применять то, что уже есть, лишь как можно лучше.
Встряхнуть бутылку в настоящей жизни нетрудно, но куда проще, чем вынудить виртуальную бутылку отреагировать таковым же образом. Благодаря времени и долгим наблюдениям, алкоголь в бутылках Half-Life: Alyx смотрится так правдоподобно, что трудно поверить, что это иллюзия, а не реальная симуляция. И как бы продвинутыми не были технологии, игры лишь выигрывают от настолько незаурядного креативного мышления.
Больше увлекательных статей на Shazoo
- В Generation Zero можно безвозмездно сыграть до 4 мая
- Для DOOM Eternal вышел мод с графическими эффектами: тень от Палача, блики и другое
- Гайд Fallout 76 — спутники и романы
- Похоже, Half-Life: Alyx скоро получит поддержку Мастерской Steam
- Резня в тропических зарослях в новеньком трейлере шутера Predator: Hunting Grounds
Видео от Shazoo
Подписаться
- Via:polygon
Источник: