В качестве одной из новых рубрик блога, хочу сделать «Взгляд со стороны». В ней я буду рассказывать о негативных или положительных решениях в геймдеве, если рассматривать ситуацию с позиции обычного игрока. Отчасти познавательная, но совершенно дружелюбная для тех, кто из терминологии знает лишь слово «текстурки» и «фпс». Начнем, пожалуй, с одной из распространенных и довольно ужасных привычек разработчиков. А именно нарочитое добавление динамического освещения в свои игры. Сейчас объясню.

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

Статическое

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

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

Данный вариант освещения создается в игровых редакторах и просчитывается еще на стадии разработки. Поэтому железо игрока почти не задействовано в его генерации внутри самой игры. Это значительно повышает количество кадров в секунду, улучшая восприятие всей сцены целиком. При запуске мы подгружаем уже готовые лайтмапы и они сделаны так, как то задумал разработчик. Замечательно. Так в чем минус?

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

А динамическое что?

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

В чем плюсы и минусы этого подхода? Из очевидного:

Резкий рост нагрузки на вычислительные мощности железа. Данный процесс не просто съедает очень много ресурсов, но и сильно обременяет разработчиков, которые вынуждены выбирать между оптимизацией и концептуальной задумкой сделанного уровня.
Постоянная генерация подобных текстур не дает им в должной мере отрендерится и, в отличии от статики, направленные лучи света плохо отражаются, почти не рассеиваются, а генерируемые тени, чаще всего, получаются глубокими и очень черными. (Рендер – визуализация модели и ее атрибутов в конечном виде)

+ В совокупности с подвижными объектами мы получаем реалистичное поведение освещения. Именно такого, каким мы его видим в реальной жизни. Изменяющегося в зависимости от наших или чужих действий.
+ Игровая сцена выглядит живой, даже если почти целиком состоит из монолитных, неразрушимых объектов. А если и источники освещения подвижны, то можно крейгазмировать (kreygasm) на постоянной основе.

Так, это ясно. Ты то что хотел поведать?

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

Как это делают профессионалы:

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

Как это делают вышеупомянутые засранцы?

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

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

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

Согласитесь, если взять ранние версии игры Rust, то глаза невольно начинаются вытекать. Лишь из-за неумения работать с инструментарием движка Unity.

Глубокие тени Rust

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

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