Серия «Костыли и пиксели»

223

Костыли и пиксели #11

Серия Костыли и пиксели

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

Хороший пример — A Plague Tale: Requiem. В первой части на экране одновременно могло находиться до 5 000 крыс. В сиквеле разработчики из Asobo Studio решили увеличить это число до 300 000.

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

Разработчики использовали неординарный подход: они перестали воспринимать орду как совокупность отдельных существ и начали работать с ней как с динамической жидкостью. Те крысы, что находятся в непосредственной близости от игрока, — это честные 3D-модели. У них есть простой ИИ, они реагируют на свет и умеют кусать персонажа. Их относительно немного, поэтому нагрузка на систему в норме.

Вся остальная масса крыс на среднем и дальнем расстоянии — это не отдельные юниты. Это единая геометрическая сетка (меш), которая деформируется по законам гидродинамики. Для игры эта орда выглядит как одна большая "волна", которая просто обтекает препятствия. Чтобы эта "живая вода" выглядела реалистично, поверх сетки накладываются шейдеры и анимации, имитирующие копошение тел. Вы видите тысячи грызунов, но видеокарта в этот момент просто отрисовывает один сложный объект, меняющий форму. Вместо классического ИИ для толпы они применили расчеты, которые обычно используются для симуляции воды или дыма. В результате получилась одна из самых технологичных сцен в современных играх, которая на поверку оказалась очень элегантным и экономным техническим решением.

UPD: Тут можно посмотреть как это выглядит:

Показать полностью 1 1
72

Костыли и пиксели #10

Серия Костыли и пиксели

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

Наверное, многие помнят легендарный стелс-экшен Splinter Cell. Главное правило выживания для спецагента Сэма Фишера звучало просто: выстрелил по лампочкам, зашел в густую тень, датчик света на интерфейсе потемнел — и вот враги уже в упор вас не видят. Но как игра понимает, что вы находитесь именно в тени?

Мы, как обычные геймеры, скажем: "Ну, движок просто проводит невидимые лучи от лампочки до персонажа, и если на пути есть стена, значит свет на героя не падает".

Звучит логично. Но на дворе был 2002 год. Освещение в Splinter Cell было революционным: там был динамический свет, лучи мягко пробивались сквозь жалюзи, а лампочки раскачивались от выстрелов. Заставить слабый процессор первого Xbox каждую секунду математически высчитывать, падают ли лучи от всех этих сложных источников на каждую косточку трехмерного Сэма Фишера, было физически невозможно. Приставка бы просто сгорела.

И тогда программисты Ubisoft применили визуальный хак, который вошел в историю видеоигр. Они почти полностью отказались от математики.

Вместо того чтобы высчитывать траекторию света, разработчики добавили крошечную, невидимую виртуальную камеру и повесили ее прямо над главным героем. Несколько десятков раз в секунду эта невидимая камера делает крошечный скриншот вашего героя. Дальше всё максимально примитивно. Игра берет этот скриншот (он скрыт в оперативной памяти и не выводится на экран) и просто усредняет цвета его пикселей.

  • Если пиксели на фото в основном черные или темно-серые, код передает сигнал искусственному интеллекту врагов: "Всё ок, он в тени, игнорируйте его".

  • Но стоит вам высунуться под уличный фонарь, пиксели на невидимом скриншоте становятся белыми. Игра моментально бьет тревогу: "Он светится, открывайте огонь!".

Самое смешное, что эта камера не могла видеть Фишера со всех сторон — это перегрузило бы приставку. Камера была одна. Из-за этого алгоритм иногда сбоил: если у Сэма под ярким фонарем торчал только ботинок, на крошечном скриншоте он занимал слишком мало пикселей. Система усредняла картинку, решала, что 95% героя всё еще во тьме, и охранники в упор не замечали торчащую на свету ногу!

Показать полностью 2
674

Костыли и пиксели #9

Серия Костыли и пиксели

Сегодня, спустя почти 20 лет, шутер F.E.A.R. (2005) считается эталоном умных врагов в видеоиграх. Те, кто застал релиз, наверняка до сих пор с мандражом вспоминают перестрелки с местными отрядами клонов.

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

На самом деле никакого командного интеллекта в игре нет и в помине. Вся их "гениальность" — это психологическая иллюзия.

Ведущий программист ИИ Джефф Оркин использовал систему, где каждый бот — эгоист. Ему плевать на напарников, он решает только свои личные проблемы в конкретную секунду. Если по боту стреляют, а рядом стоит стол, его личная цель — выжить. Бот просто опрокидывает стол и садится за него. Если другому боту неудобно палить с его позиции, а слева есть свободный коридор, он просто идет туда, чтобы найти ракурс получше.

Спрашивается, откуда тогда берется эта пугающая командная работа? Секрет кроется в болтливости.

Разработчики поняли: если заставить ботов просто озвучивать вслух свои эгоистичные решения, мозг игрока сам свяжет их в тактическую картину.
Когда бот решает уйти в левый коридор, он орет в рацию: "Обхожу с фланга!".
Когда у другого бота в этот момент кончаются патроны и он прячется, он кричит: "Прикройте, перезаряжаюсь!".
А третий бот, который просто сидит за перекинутым столом и стреляет в вас, рапортует: "Держу его на мушке!".

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

Показать полностью 2
82

Костыли и пиксели #8

Серия Костыли и пиксели

В 2002 году The Elder Scrolls III: Morrowind стала хитом не только на ПК, но и на первой консоли Xbox. Игроки были в восторге от огромного открытого мира. Но за стабильной работой игры стоял один из самых радикальных и наглых костылей.

Оригинальный Xbox имел всего 64 мегабайта оперативной памяти. Morrowind была слишком сложной и массивной игрой для такого железа. Она постоянно отслеживала положение тысяч предметов: если вы выкинули вилку на другом конце карты, игра обязана была помнить, где она лежит.

Из-за этого программисты Bethesda столкнулись с фатальной проблемой — утечками памяти. Чем дольше вы играли и чем больше локаций посещали, тем сильнее забивалась оперативная память консоли. В какой-то момент Xbox просто "захлебывался", и игра намертво зависала. Найти и исправить все утечки памяти в коде такого гигантского открытого мира до релиза было физически невозможно.

Чтобы спасти игру, команда Тодда Говарда пошла на хитрость.

Они написали скрипт, который постоянно мониторил свободную оперативную память Xbox. Когда игра понимала, что память почти забита (оставалось критически мало мегабайт) и консоль вот-вот зависнет, она ждала удобного момента — когда игрок решит перейти в новую локацию и на экране появится надпись "Загрузка". В этот момент игра отправляла железу Xbox системную команду на жесткую аппаратную перезагрузку.

То есть, пока вы сидели перед телевизором и смотрели на полоску загрузки, ваша приставка на самом деле физически выключалась, мгновенно включалась обратно, очищала кэш, перезагружала операционную систему, запускала Morrowind с нуля и сразу загружала ваш последний автосейв. Для игрока этот процесс выглядел просто как очень долгий экран загрузки (иногда он мог длиться пару минут).

Показать полностью 3
204

Костыли и пиксели #7

Серия Костыли и пиксели

Замечали, как в дорогих сюжетных играх последних лет — будь то God of War, Tomb Raider или The Last of Us — главный герой время от времени намеренно задерживается? То он протискивается через узкую расщелину в скале, то с усилием поднимает какую-нибудь балку, то внезапно замедляется, прижимает палец к уху и надолго зависает в разговоре по рации. И, конечно, ни о каком беге в этот момент речи не идёт.

На первый взгляд кажется, что всё это — ради атмосферы и киношности. Но если копнуть чуть глубже, становится ясно: перед нами один из самых изящных трюков индустрии, который в своё время массово закрепил шутер Gears of War.

Когда Epic Games работали над первой частью, им хотелось выжать максимум из Unreal Engine 3. Игра и правда выглядела впечатляюще: массивные персонажи, проработанная броня, разрушенные улицы. Но была загвоздка — железо. Xbox 360 предлагал всего 512 МБ оперативной памяти, а данные тянулись с не самого быстрого DVD.

Игроки, как это обычно бывает, не склонны притормаживать — они бегут вперёд. А вот система за ними не всегда успевала: новые зоны и текстуры банально не подгружались вовремя. В худшем случае это означало баги, зависания или тот самый ненавистный чёрный экран с надписью "Загрузка", который ломает весь темп.

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

Пока вы спокойно идёте и слушаете диалог, за кадром происходит совсем не спокойная работа: движок освобождает память от уже пройденного участка и тут же подгружает следующий. Как только разговор заканчивается — всё готово, можно снова бежать дальше. По тому же принципу работают и "тяжёлые" двери, которые герой открывает чуть дольше, чем хотелось бы.

Фокус оказался настолько удачным, что быстро разошёлся по всей индустрии. Узкие проходы, медленные пролёты камеры, вынужденные паузы в движении — всё это не только про атмосферу, но и про аккуратно спрятанные загрузки, которые сегодня стали почти незаметной нормой.

Показать полностью 2
103

Костыли и пиксели #6

Серия Костыли и пиксели

В 1992 году первая часть Mortal Kombat разорвала залы игровых автоматов. Интернета не было, поэтому любые секреты передавались из уст в уста. Главной легендой тех лет стал таинственный красный ниндзя по имени Ермак (Ermac). Дети божились, что видели его своими глазами, а геймеры стирали пальцы в кровь, пытаясь выполнить секретные условия для боя с ним.

Всё началось с экрана технической статистики. Владельцы залов могли вызвать специальное меню, чтобы проверить, как работает автомат. Там была строчка, которая называлась ERMACS. Самое забавное, что в списке она находилась прямо под счетчиком "Бои с Рептилией"(настоящим секретным персонажем игры). Игроки увидели загадочное слово ERMACS рядом с Рептилией и логично решили, что это имя еще одного скрытого бойца.

На самом деле строчка ERMACS расшифровывалась максимально скучно — Error Macros (ошибки макросов). Это была программа, которую написал лично Эд Бун, один из авторов игры. Она просто ловила системные сбои в коде, чтобы автомат не зависал намертво, а пытался восстановить работу, записывая ошибку в этот счетчик. Никакого отношения к персонажам это не имело.

Но тут в дело вмешалась пресса. Игрок по имени Тони Кейси отправил в игровой журнал Electronic Gaming Monthly полароидный снимок экрана аркадного автомата. На фото был изображен желтый ниндзя Скорпион, но из-за качества снимка (или намеренной ретуши) он выглядел ярко-красным, а на экране было написано "ERMAC WINS". Журнал опубликовал фото, и мир сошел с ума.

Позже Эд Бун официально заявит: код первой Mortal Kombat был устроен так, что палитра Скорпиона физически не могла заглючить и стать красной, а имя не могло измениться на ERMAC. Фотография в журнале была наглым фейком. Но было уже поздно.

Разработчики из студии Midway годами пытались объяснить фанатам, что Ермака не существует. Во второй части игры они даже вставили издевательские послания: секретная героиня Джейд иногда выскакивала на экран с фразой "Ermac Who?" (Ермак Кто?), а среди зашифрованных сообщений была анаграмма "CEAMR ODSE NTO EXITS" (Ermac does not exist).

Но фанаты требовали своего красного ниндзя. И в 1995 году, при релизе Ultimate Mortal Kombat 3, Эд Бун сдался. Разработчики официально добавили Ермака в список бойцов.

Показать полностью 2
114

Костыли и пиксели #5

Серия Костыли и пиксели

UPD: Автор этого костыля подтвердил, что это было, но не попало в итоговую сборку
https://www.wcnews.com/news/update/16279

В 1990 году студия Origin Systems готовилась к релизу своего амбициозного космического симулятора Wing Commander. Игра была настоящим прорывом для своего времени, но за день до отправки мастер-диска в печать разработчики столкнулись с катастрофой.

Дело в том, что игра работала под MS-DOS. В те времена программы использовали специальные менеджеры памяти (EMM386). И вот беда: каждый раз, когда игрок нажимал кнопку "Выйти в DOS", игра не могла корректно выгрузить свои данные из памяти.

Вместо нормального выхода из игры, система намертво крашилась и выдавала страшный черный экран с системным сообщением об ошибке: EMM386 Memory allocation error.

До релиза оставались всего ничего. Искать причину утечки памяти в тысячах строк кода было физически некогда. Любой перенос даты выхода стоил бы студии огромных денег. Ситуация казалась безвыходной.

Тогда ведущий программист Кен Демарест принял самое ленивое и одновременно гениальное решение в истории геймдева.

Он понял, что сама игра работает идеально, а сбой происходит только в момент выхода. Значит, если игрок уже решил закончить сессию, зависание компьютера ему особо не повредит — он все равно собирался выключать ПК или перезагружаться. Единственное, что смущало, это пугающий текст ошибки от DOS.

Кен открыл системный файл менеджера памяти через HEX-редактор. Он нашел в машинном коде строчку с текстом той самой ошибки EMM386 Memory allocation error и... просто стер её. А на освободившееся место вписал: Thank you for playing Wing Commander!

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

Никто даже не догадывался, что каждый раз, читая это вежливое прощание, они на самом деле смотрели на критический экран смерти своей операционной системы.

Показать полностью 3
329

Костыли и пиксели #4

Серия Костыли и пиксели

Первая PlayStation вышла в середине девяностых и имела на борту всего 2 мегабайта оперативной памяти. Мне кажется сейчас этого не хватит даже на иконку приложения в смартфоне. Но когда вышел первый Crash Bandicoot, игроки и критики открыли рты: игра выдавала такую графику, количество полигонов и дальность прорисовки, которые казались невозможными на этом железе.

Как студия Naughty Dog (тогда состоявшая буквально из двух человек — Энди Гэвина и Джейсона Рубина) умудрилась это сделать? Они просто наплевали на все правила и хакнули консоль.

Дело в том, что Sony вместе с приставками выдавала разработчикам специальные библиотеки кода и строго-настрого запрещала лезть напрямую к железу и дисководу. Схема работы была классической: консоль грузит кусок уровня с диска в те самые 2 МБ оперативки, игрок его проходит, затем черный экран загрузки — и грузится следующий кусок. Красиво и масштабно при таком раскладе не сделаешь, память забивалась моментально.

Энди и Джейсон поняли, что официальными методами игру своей мечты они не слепят. Тогда они полностью выкинули стандартный код Sony для работы с памятью дисководом.

Вместо этого Гэвин сел и написал собственный сложнейший драйвер на низкоуровневом ассемблере. Его самописный код заставлял дисковод PS1 крутиться безостановочно. Пока Крэш бежал по уровню, система в фоновом режиме удаляла из памяти деревья и ящики, которые остались позади, и прямо на лету подгружала с диска новые куски уровня вперед.

Сегодня эта технология используется в любой современной игре. Но в 1996 году провернуть такое на 2 мегабайтах оперативки считалось черной магией.

Интересное началось, когда Naughty Dog отправили готовую игру на сертификацию в японский офис Sony. Японские инженеры просто офигели от увиденного. По всем официальным мануалам компании то, что сделали американцы, должно было либо намертво вешать систему, либо физически сжечь лазер дисковода от непрерывной работы. Sony всерьез хотела забраковать проект.

Но код Энди Гэвина оказался настолько гениальным, что игра работала как часы, не ломала консоль и выглядела на голову выше конкурентов. Sony пришлось пропустить этот жесткий костыль в релиз, а Крэш в итоге стал неофициальным маскотом PlayStation.

Показать полностью 2
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества