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

151

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

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

Сегодня мы вернемся к уже знакомому нам движку Gamebryo и компании Obsidian, которая придумывала костыли, чтобы обойти его ограничения. Думаю, некоторые уже слышали эту историю, но я не могу пройти мимо и не рассказать. Сегодня вспомним финал Fallout: New Vegas.

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

У вашего персонажа отключалось управление, а его самого телепортировали в темную комнату-коробку, впритык к стене. А на саму стену просто натягивалась картинка-слайд.

Но самое забавное, что финальная речь должна была быть оформлена как диалог, чтобы переключение слайдов можно синхронизировать под окончание озвученных фраз. А диалог нельзя было запустить в пустоте, он должен быть привязан к персонажу. И Obsidian не придумали ничего лучше, чем поставить за этой стеной NPC, который и рассказывает вам историю. Этого персонажа нельзя встретить в игре, и его зовут Рон Рассказчик (Ron the Narrator).

То есть, когда вы в конце игры переживаете за судьбу пустыни Мохаве, ваш персонаж стоит носом к стене, как наркоман, а с другой стороны стоит второй мужик, точно так же носом к стене, и рассказывает вам то, чего никогда не будет.

Может вы тоже слышали про какие-то интересные костыли, о которых я еще не рассказывал? Пишите в комментарии, я их разберу и расскажу в своих постах.

Показать полностью 4
96

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

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

Всем привет! Не знаю, почему сразу не подумал рассказать про следующую игру, ведь я выкладываю её прохождение здесь, на YouTube и на RuTube. Сегодня мы поговорим про первого "Ведьмака".

Первое, что вспоминает большинство геймеров, когда заходит речь про первую часть компьютерных приключений Геральта — это боевка. Кто-то бросил игру из-за неё, кто-то, наоборот, остался в восторге. Я, если что, из второго лагеря (но я и из тех, кому понравилась боевка в Kingdom Come, особенно в первой). А сейчас я вам расскажу, почему она именно такая.

CD Projekt RED вообще изначально хотели сделать клон Diablo, но их первый прототип разгромили инвесторы. Тогда разработчики обратились к своим друзьям из BioWare, которые на очень приятных условиях лицензировали им свой движок Aurora, на котором те когда-то сделали игру Neverwinter Nights. Но был нюанс: этот движок был полностью заточен под правила D&D. Он не умел считать физическое попадание по врагу, а все атаки рассчитывались броском двадцатигранного кубика (d20).

По сути, полякам пришлось силой натягивать динамичный экшен на скелет пошаговой RPG.

То есть, когда вы наводите курсор на врага и нажимаете удар, игре на самом деле без разницы, как далеко вы от него и попали ли вообще. Под капотом запускается рандомайзер, к результату прибавляются характеристики Геральта, и итог сравнивается с классом брони врага. Если результат положительный, то наносится урон, если отрицательный — урона нет, а движок может принудительно запустить анимацию уклонения или блока для врага.

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

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

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

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

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

Всем привет! Сегодняшний костыль скорее всего не удивит фанатов Skyrim, но когда я увидел как этот костыль багует, мне сразу захотелось про него рассказать. Речь пойдет о маникенах.

Дело в том, что надеть комплект брони на статичную модель мебели довольно проблематично, из-за того что броня и одежда в играх реализована так, что движок точно должен знать где расположено плечо, где рука, а где голова. Если попробовать натянуть её на объект без скелета, то движок заглючит, потому что не будет знать где что должно находится. Но в Skyrim вы можете развесить свои трофей в собственном доме. Betheseda не стали изобретать велосипед, а просто создали расу Манекенов.

То есть эти вешалки на самом деле персонажи с натянутой текстурой дерева и включенным скриптом паралича. Уже звучит жутко, правда? Представьте, если бы вы узнали что ваш шкаф на самом деле живой, но парализованный. Может он даже смотрит сейчас на вас? Какого он о вас мнения?

Но самое интересное начинается, если игре не хватает ресурсов. Дело в том, что движок в игре грузит скрипты и локации параллельно, а у скриптов приоритет ниже. И у некоторых игроков (вроде как чаще всего это происходит, если накатить мод с HD-текстурами) после перемещения в дом случался шок, от того что манекены дышат, иногда бродят, смотрят в камеру. А когда скрипт паралича догружался, они замирали в тех позах, что их застали.

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

Вот один из примеров с просторов интернета:

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

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

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

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

Главная боль любой игры про космос — это ошибка округления координат (Floating-point precision loss). Память не резиновая. Пока вы топчетесь в центре карты, движок знает позицию объектов вплоть до миллиметра. Но стоит улететь на пару миллионов километров, и цифры становятся слишком большими. На точные дроби памяти уже не хватает, и движок начинает грубо округлять значения. Из-за этого 3D-модели прямо на ходу начинает трясти, физика ломается, а персонаж может просто выпасть сквозь пол.

Переписывать фундамент движка ради этого слишком долго и дорого, поэтому программисты используют изящный костыль — "плавающую точку начала координат" (Floating Origin). Суть обмана проста: в дальних путешествиях ваш герой на самом деле никуда не летит.

Очень наглядно это работает в Outer Wilds. Игра симулирует целую солнечную систему с честной физикой орбит. Если бы корабль просто летел от центра карты к краю, погрешность в вычислениях быстро разорвала бы его на куски. Поэтому игра делает финт ушами: как только вы отлетаете от центра на опасное расстояние, движок незаметно сбрасывает ваши координаты обратно в абсолютный ноль (0,0,0), где математика снова работает безупречно. И в ту же миллисекунду берет вообще всё — планеты, кометы, солнце — и сдвигает к вам на это же расстояние.

А главное, игрок этих скачков вообще не замечает. Получается, что при долгих перелетах корабль просто висит на месте, а игра тащит всю остальную вселенную ему навстречу.

А вот если на эту проблему забить, получатся знаменитые "Далекие земли" (Far Lands) из старых версий Minecraft. Если игрок уходил слишком далеко от точки старта, математике просто срывало крышу от гигантских чисел. Генерация ландшафта превращалась в сюрреалистическое месиво, сквозь которое герой проваливался в пустоту.

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

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

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

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

Всем привет! Поскольку это тринадцатый выпуск, логично будет затронуть жанр хоррора. Сегодня мы отвлечемся от графических хитростей и разберем интересное архитектурное решение — искусственный интеллект Ксеноморфа из Alien: Isolation.

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

Сам по себе Ксеноморф играет абсолютно честно. У него нет доступа к вашему местоположению. Он полагается исключительно на свои виртуальные сенсоры: сканирует геометрию уровня перед собой, реагирует на звук шагов, свет фонарика или писк детектора движения. Если вы сидите тихо в соседней комнате, сам по себе Чужой вас не найдет — он будет просто патрулировать отсеки по алгоритмам поиска.

Над Чужим работает глобальная система, которую называют "Режиссером". В отличие от самого монстра, Режиссер обладает полным всезнанием. Он в любую секунду точно знает ваши координаты, уровень здоровья и количество лута в инвентаре. Однако Режиссер не может убить вас или взять Чужого под прямой контроль, чтобы повести его по вашим следам.

Главная задача Режиссера — управлять шкалой стресса игрока.

Система постоянно замеряет темп игры. Если Ксеноморф долго гонял вас по уровню и стресс зашкаливает, Режиссер отправляет монстра в вентиляцию на другой конец карты. Игрок получает окно спокойствия, чтобы выдохнуть и собрать ресурсы.

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

В итоге разработчикам не пришлось заставлять NPC читать данные игрока. Разделение ролей на систему-координатора и самостоятельного исполнителя позволило создать убедительную иллюзию охотника, который всегда идет по пятам.

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

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

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

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

В 2001 году жанр шутеров тяготел к закрытым пространствам. Пока Quake 3 и Unreal Tournament гоняли игроков по тесным аренам, Serious Sam выкидывал нас в огромную пустыню и спускал лавину из сотен камикадзе и скелетов. При этом игра умудрялась выдавать стабильный FPS даже на откровенно слабых машинах.

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

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

Чтобы скрыть подвох, для каждого врага заранее отрендерили спрайты со всех ракурсов. Вы двигаетесь в сторону — движок мгновенно подменяет картинку монстра на кадр с нужным углом. И только когда враг подбегает на расстояние выстрела, картонка бесшовно превращается в 3D-модель. Этот фокус масштабируется до сих пор: в Serious Sam 4 по той же схеме рисуют до 100 000 врагов в кадре.

Второй технический трюк связан с физикой. Те, кто заходил в секретные комнаты, наверное помнят, что там можно было бегать по стенам и потолку вместе с врагами. Для 2001 года это было сложно реализовать — гравитация в движках обычно была жестко направлена вниз.

Чтобы заставить её работать в разные стороны и не перегрузить систему, Croteam максимально упростили обсчет столкновений. Классические хитбоксы-"коробки" вокруг моделей жрут много ресурсов на обсчет углов. Хорваты заменили их на сферы. Математически вычислить пересечение двух шаров в разы быстрее. Сэкономленную вычислительную мощность пустили на то, чтобы движок мог рассчитывать индивидуальные векторы гравитации для разных стен в одной комнате.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества