Спрайтовые динамические тени
Спрайтовые динамические тени — великое и ужасное искусство наебать игрока, заставив его поверить, что под его пиксельным альтер эго на полу копошится нечто большее, чем просто чёрное пятно. Это технология времён, когда трехмерная графика делала первые неуверенные шаги, а мощности тогдашних калькуляторов хватало лишь на то, чтобы не взорваться от рендеринга пары полигонов. Данный артефакт инженерной мысли служил одной цели: прибить вечно парящего в вакууме персонажа к земле, создав иллюзию его присутствия в этом унылом мире.
Чёрный блин под ногами[править]
На дворе седая древность, эпоха первых PlayStation и олдовых ПК. Динамические тени? Расчёты в реальном времени? Забудь. Верхом технологического прогресса и объектом влажных фантазий любого геймдизайнера был… простой кружочек. Да-да, ты не ослышался. По сути, это был незамысловатый чёрный овал, который, словно верный пёс, таскался под персонажем, куда бы тот ни попёрся. Прыгает ли твой герой через пропасть или бежит от очередного монстра — этот блинчик, эта квинтэссенция лени и оптимизации, всегда был тут как тут.
Реализовано это было с изяществом, достойным гения. Брался самый обычный плейн или, для особо продвинутых, декаль, и просто проецировался строго вниз от центра тушки героя. Никакой тебе физики, никаких расчётов преломления света. Просто плоская, как шутки резидентов Камеди, текстура, приклеенная к полу. И ведь работало! Хомячки были в восторге, а разработчики получали свой профит, не насилуя слабое железо. Быстро, дёшево и сердито. А что ещё нужно для счастья?
Тень учится танцевать[править]
Но время шло, ЧСВ разработчиков росло, и простого кружочка стало мало. Игрокам хотелось реализма. И тогда какому-то сумрачному гению пришла в голову очередная гениальная мысль: а что, если вместо убогого блина подсовывать игроку нечто более осмысленное? Так зародилась продвинутая версия костыля — псевдодинамическая тень. Этот подход получил своё развитие ещё на старых консолях, где каждый байт и такт процессора был на счету.
Суть обмана вышла на новый уровень. Где-то высоко над головой персонажа невидимая камера делала его условный снимок строго сверху, причём для экономии ресурсов рендерился только сам герой, без всей этой вашей мишуры вроде окружения. Полученный силуэт, этакий фоторобот для бедных, в виде плоского спрайта проецировался на поверхность под ногами. И тут начиналась магия! Тень внезапно оживала: она повторяла анимации персонажа, дрыгала конечностями в такт его движениям и даже корректно ложилась на всякие лестницы и кубы. Игрок видел, как тень его персонажа бежит, прыгает и приседает, и млел от восторга, не подозревая, что его снова наебали, подсунув всего лишь плоский спрайт. Эта технология работала годами: персонажей фотографировали с видом сверху, получали их изображение, накладывали на спрайтик и таскали следом.
Как это работало (для задротов)[править]
Если ты, анон, не прогуливал информатику, то тебе будет интересно узнать, что вся эта махинация проворачивалась через так называемый render target. Это такая специальная область в памяти, куда можно отрисовать что-то отдельно от основного экрана.
*render target — буфер, область памяти, содержащая данные для рендеринга сцены. Обычно имеет один или более каналов.
В нашем случае туда с видом сверху рендерился персонаж, превращаясь в чёрно-белую маску. А уже эта маска, как дешёвая наклейка из жвачки, лепилась на пол. Иронично, что в современных движках, вроде Unreal Engine, подобная реализация «для примера» может оказаться довольно дорогой, ведь создаётся полноценный рендер таргет со всеми его каналами. Но это всё можно сделать и сильно дешевле, если не лениться. Впрочем, сейчас этим уже, понятное дело, никто не пользуется, так что это не более чем историческая справочка для олдфагов.
А как же настоящее освещение?[править]
Кстати, о срачах с движком. Вся эта возня с фейковыми тенями была вызвана не только слабостью железа, но и суровыми ограничениями тогдашних технологий освещения. Болью любого левел-дизайнера, работающего с запеканием света, была (и остаётся) ошибка о пересечении более четырёх источников света. Это священная корова Анрыла и его системы запекания света Lightmass. Суть в том, что на одну текстуру карты освещения (лайтмапу) не может влиять больше четырёх стационарных источников. Почему? Потому что в текстуре всего четыре канала (RGBA), и каждый свет занимает один канал. Всё, лимит.
Конечно, это можно обойти. Можно вручную указать, какой из источников света пойдёт в запекание, а какой останется полностью динамическим и не будет участвовать в этом шабаше. Можно даже настроить несколько лайтмап, и тогда каналов станет восемь. Но обычно левел-дизайнеры стараются просто не ставить больше четырёх лампочек в одном углу, чтобы не вызывать гнев машины. Хотя, справедливости ради, в пятом Анрыле запекание света и без того может намертво зависнуть на 0 % просто потому, что у него плохое настроение. Так что некоторые вещи, анон, не меняются.