Как многие наверняка помнят, Underrail: Infusion создаётся на новом движке, который позволит Стигу не только воплотить в жизнь новые изощрённые механики, но и поднять на новый уровень визуальную составляющую игры. В этом дневнике он поделится последними достижениями на ниве улучшения графики.
Привет, чуваки.
За последние месяцы я добавил несколько новых функций в движок рендеринга. Я постараюсь не особо вдаваться в технические детали и доступно рассказать обо всех нововведениях.
1. Карты теней и динамические тени
Если взглянуть на старые скриншоты и видео с игровым процессом Infusion, можно заметить, что тени падают только на пол и при этом всегда квадратные — это потому, что я использовал импровизированную технику двухмерной трассировки лучей, создающую на полу иллюзию реалистичных теней. Таким образом, пол был единственным объектом, имевшим своего рода попиксельное затенение, а другие — вроде стен и монстров — считались либо полностью освещёнными определённым источником, либо нет, и это определялось с помощью воксельной трассировки лучей низкого разрешения (похоже работает зона видимости персонажа игрока).
Само собой, такое сочетание визуально казалось не особо целостным, приятным и правдоподобным, и я перешёл к старым добрым, проверенным временем картам теней. Я не буду вдаваться в подробности, поскольку в этом нет ничего нового, а технология хорошо задокументирована, и при желании вы можете ознакомиться с ней сами.
Однако отмечу один момент: она применяется в трёхмерных играх, а в нашей игре используются в основном предварительно отрендеренные двухмерные объекты, в которых нет необходимой для неё информации о геометрических параметрах. Таким образом, для работы технологии пришлось сгенерировать низкополигональные сетки, которые пока используются лишь с этой целью (но в будущем мы можем найти им и другие способы применения). Все новые графические ресурсы создаются сразу с готовыми сетками, а добавление к старым пока в процессе — именно поэтому я не могу показать сравнительные скриншоты, но вы заметите изменения в новых игровых областях. Думаю, эффект весьма внушителен.
Но хотя это довольно экономичный способ реализации затенения, как и в случае с другими моделями освещения в играх, его использование может заметно повлиять на производительность. Чтобы сберечь ресурсы компьютера, многие трёхмерные игры, особенно старые, используют запечённые в текстуры карты теней. В общем, может так статься, что на очень древних машинах возникнут некоторые проблемы с производительностью, однако пока я думаю, что настроек разрешения и сглаживания теней будет достаточно.
2. Жидкости
Теперь мы можем делать игровые области с различными жидкостями, поверхность которых моделируется посредством двух движущихся карт нормалей и технологии SSR. Позже я планирую добавить динамическую рябь от падения или всплывания, а также взаимодействия объектов. Кроме того, мне бы хотелось добавить объёмное освещение жидкостей.
Жидкости активно используются в игровом процессе — в зависимости от состава, они могут замедлять персонажей или даже наносить им урон (кислота и тому подобные), не говоря уж о вероятности утонуть, если голова персонажа окажется ниже её поверхности. Это даёт множество новых возможностей для создания игровых уровней, в которых игроку придётся повышать или понижать уровень жидкости в собственных целях.
Впрочем, некоторым монстрам наплевать на обычные жидкости, и среди них показанные в видео слизни. Таким образом, вы легко сбежите от этих тварей по суше, а вот по пояс в сточных водах у вас это вряд ли получится. В будущем в игре появятся новые враги, обитающие исключительно в жидкостях.
3. SSR и отражение света
В отличие от трёхмерных персонажей и монстров, для которых используется технология физически правильного рендеринга (PBR), для окружения применяется более традиционная техника диффузных текстур с частичным запеканием освещения и теней. Это придаёт нашей игре определённые сходства с классическими RPG на основе предварительно отрендеренной графики.
Один из её недостатков — весьма ограниченные возможности взаимодействия с динамическим освещением, что мешает игроку различать, например, глянцевые и матовые поверхности. Особенно сильно от этого страдают металлические поверхности, коих в Underrail немало — и на вид они выглядели пластиково. Чтобы это исправить, мы добавили текстуру шероховатости, которая используется для расчёта отражённого света. Кроме того, эта текстура применяется и в SSR, что позволяет игроку увидеть отражения окружающих объектов и персонажей на отполированных металлических поверхностях. Позднее я планирую проделать это и с зеркальными поверхностями, однако поскольку обработка идёт в реальном времени, следует учитывать возможное влияние на производительность.