Костыли и пиксели #18
Друзья, всем привет! За разработкой своей антиспойлерной энциклопедии по книгам Warhammer я совсем забросил эту рубрику. Но сегодня решил её оживить. И раз уж я сейчас максимально погружён в мир Warhammer, то и игру возьму из этой же вселенной. А именно Dawn of War 2004 года. Речь пойдёт про sync kills — те самые эффектные добивания, когда космодесантник хватает орка за шею и красиво сворачивает её под камеру, а не просто убирает циферку здоровья до нуля.
Проблема в том, что sync kill — это заранее записанная анимация, где два конкретных юнита должны встать друг напротив друга ровно определённым образом: на нужном расстоянии, развёрнутые под нужным углом, иногда даже с точностью до позы рук. А в реальном бою юниты бегают, толкаются, машут оружием и оказываются друг к другу как попало — кто боком, кто спиной, кто вообще с разницей в пару метров. Ни о какой "ровно встали" речи не идёт.
Костыль тут известный по куче игр с похожими добиваниями (в Skyrim, For Honor, Sekiro это официально задокументировано): перед стартом анимации движок принудительно подгоняет позицию и разворот обоих юнитов под то, что нужно ролику — где-то лёгким доворотом, где-то заметным смещением. Характерный побочный эффект знаком многим: иногда юнит перед добиванием на мгновение дёргается или разворачивается как-то неестественно — и это как раз тот самый механизм подгонки, а не глюк физики.
Ну, а если вы еще не видели мой проект для читающих книги в мире Warhammer, вот ссылка на него: https://nav-eye.ru
Также присоединяйтесь к нашей Телеграм-группе! Там можем пообщаться, пообсуждаем лор и новый функционал, туда же можно закинуть фидбек, зарепортить баг и даже поделиться любимым мемом по вселенной (и не только): https://t.me/navigator_eye
Костыли и пиксели #17
Сегодня мы вернемся к уже знакомому нам движку Gamebryo и компании Obsidian, которая придумывала костыли, чтобы обойти его ограничения. Думаю, некоторые уже слышали эту историю, но я не могу пройти мимо и не рассказать. Сегодня вспомним финал Fallout: New Vegas.
Кто проходил её до конца, должен помнить, что игроку в финале показывают слайд-шоу, и закадровый голос рассказывает про последствия его решений. Но вариативность прохождения настолько велика, что разработчики понимали - в формате видео это все не уместится на диск. Да и склеивать десяток коротких видео было бы проблематично, это вам не начальный, заранее готовый ролик. Тогда было принято решение сделать концовку по-театральному.
У вашего персонажа отключалось управление, а его самого телепортировали в темную комнату-коробку, впритык к стене. А на саму стену просто натягивалась картинка-слайд.
Но самое забавное, что финальная речь должна была быть оформлена как диалог, чтобы переключение слайдов можно синхронизировать под окончание озвученных фраз. А диалог нельзя было запустить в пустоте, он должен быть привязан к персонажу. И Obsidian не придумали ничего лучше, чем поставить за этой стеной NPC, который и рассказывает вам историю. Этого персонажа нельзя встретить в игре, и его зовут Рон Рассказчик (Ron the Narrator).
То есть, когда вы в конце игры переживаете за судьбу пустыни Мохаве, ваш персонаж стоит носом к стене, как наркоман, а с другой стороны стоит второй мужик, точно так же носом к стене, и рассказывает вам то, чего никогда не будет.
Может вы тоже слышали про какие-то интересные костыли, о которых я еще не рассказывал? Пишите в комментарии, я их разберу и расскажу в своих постах.
Костыли и пиксели #16
Всем привет! Не знаю, почему сразу не подумал рассказать про следующую игру, ведь я выкладываю её прохождение здесь, на YouTube и на RuTube. Сегодня мы поговорим про первого "Ведьмака".
Первое, что вспоминает большинство геймеров, когда заходит речь про первую часть компьютерных приключений Геральта — это боевка. Кто-то бросил игру из-за неё, кто-то, наоборот, остался в восторге. Я, если что, из второго лагеря (но я и из тех, кому понравилась боевка в Kingdom Come, особенно в первой). А сейчас я вам расскажу, почему она именно такая.
CD Projekt RED вообще изначально хотели сделать клон Diablo, но их первый прототип разгромили инвесторы. Тогда разработчики обратились к своим друзьям из BioWare, которые на очень приятных условиях лицензировали им свой движок Aurora, на котором те когда-то сделали игру Neverwinter Nights. Но был нюанс: этот движок был полностью заточен под правила D&D. Он не умел считать физическое попадание по врагу, а все атаки рассчитывались броском двадцатигранного кубика (d20).
По сути, полякам пришлось силой натягивать динамичный экшен на скелет пошаговой RPG.
То есть, когда вы наводите курсор на врага и нажимаете удар, игре на самом деле без разницы, как далеко вы от него и попали ли вообще. Под капотом запускается рандомайзер, к результату прибавляются характеристики Геральта, и итог сравнивается с классом брони врага. Если результат положительный, то наносится урон, если отрицательный — урона нет, а движок может принудительно запустить анимацию уклонения или блока для врага.
Вся сложная хореография ведьмака — это просто набор анимаций под результаты бросков. А те самые знаменитые тайминги (когда курсор загорается огнем и вам нужно кликнуть для комбо) — это просто момент, когда технически заканчивается один раунд D&D, и движок разрешает вам "бросить кубики" для следующего хода.
Можете зайти ко мне в профиль и посмотреть прохождения без комментариев, чтобы увидеть, как Геральт не просто нарезает монстров, а напряженно играет с ними в кости на выживание.
Костыли и пиксели #15
Всем привет! Сегодняшний костыль скорее всего не удивит фанатов Skyrim, но когда я увидел как этот костыль багует, мне сразу захотелось про него рассказать. Речь пойдет о маникенах.
Дело в том, что надеть комплект брони на статичную модель мебели довольно проблематично, из-за того что броня и одежда в играх реализована так, что движок точно должен знать где расположено плечо, где рука, а где голова. Если попробовать натянуть её на объект без скелета, то движок заглючит, потому что не будет знать где что должно находится. Но в Skyrim вы можете развесить свои трофей в собственном доме. Betheseda не стали изобретать велосипед, а просто создали расу Манекенов.
То есть эти вешалки на самом деле персонажи с натянутой текстурой дерева и включенным скриптом паралича. Уже звучит жутко, правда? Представьте, если бы вы узнали что ваш шкаф на самом деле живой, но парализованный. Может он даже смотрит сейчас на вас? Какого он о вас мнения?
Но самое интересное начинается, если игре не хватает ресурсов. Дело в том, что движок в игре грузит скрипты и локации параллельно, а у скриптов приоритет ниже. И у некоторых игроков (вроде как чаще всего это происходит, если накатить мод с HD-текстурами) после перемещения в дом случался шок, от того что манекены дышат, иногда бродят, смотрят в камеру. А когда скрипт паралича догружался, они замирали в тех позах, что их застали.
Так экономия времени подарила игре один из самых жутких багов. Поэтому в следующий раз, когда зайдете в свой скайримский дом, присмотритесь к стойкам с броней повнимательнее. Они точно знают о вас больше, чем вы думаете.
Вот один из примеров с просторов интернета:
Костыли и пиксели #14
Всем привет! В 14-м выпуске предлагаю вылезти из тесных коридоров и посмотреть, как разработчики справляются с по-настоящему гигантскими пространствами.
Главная боль любой игры про космос — это ошибка округления координат (Floating-point precision loss). Память не резиновая. Пока вы топчетесь в центре карты, движок знает позицию объектов вплоть до миллиметра. Но стоит улететь на пару миллионов километров, и цифры становятся слишком большими. На точные дроби памяти уже не хватает, и движок начинает грубо округлять значения. Из-за этого 3D-модели прямо на ходу начинает трясти, физика ломается, а персонаж может просто выпасть сквозь пол.
Переписывать фундамент движка ради этого слишком долго и дорого, поэтому программисты используют изящный костыль — "плавающую точку начала координат" (Floating Origin). Суть обмана проста: в дальних путешествиях ваш герой на самом деле никуда не летит.
Очень наглядно это работает в Outer Wilds. Игра симулирует целую солнечную систему с честной физикой орбит. Если бы корабль просто летел от центра карты к краю, погрешность в вычислениях быстро разорвала бы его на куски. Поэтому игра делает финт ушами: как только вы отлетаете от центра на опасное расстояние, движок незаметно сбрасывает ваши координаты обратно в абсолютный ноль (0,0,0), где математика снова работает безупречно. И в ту же миллисекунду берет вообще всё — планеты, кометы, солнце — и сдвигает к вам на это же расстояние.
А главное, игрок этих скачков вообще не замечает. Получается, что при долгих перелетах корабль просто висит на месте, а игра тащит всю остальную вселенную ему навстречу.
А вот если на эту проблему забить, получатся знаменитые "Далекие земли" (Far Lands) из старых версий Minecraft. Если игрок уходил слишком далеко от точки старта, математике просто срывало крышу от гигантских чисел. Генерация ландшафта превращалась в сюрреалистическое месиво, сквозь которое герой проваливался в пустоту.
Выходит, чтобы подарить нам иллюзию бесконечного полета, разработчикам пришлось в прямом смысле заставить весь мир вращаться вокруг игрока.
Костыли и пиксели #13
Всем привет! Поскольку это тринадцатый выпуск, логично будет затронуть жанр хоррора. Сегодня мы отвлечемся от графических хитростей и разберем интересное архитектурное решение — искусственный интеллект Ксеноморфа из Alien: Isolation.
Во время игры может показаться, что Чужой откровенно читерит: он постоянно бродит где-то рядом и находит тебя, стоит только вылезти из укрытия. Возникает ощущение, что игра просто считывает ваши точные координаты и телепортирует монстра за спину. На деле ИИ устроен сложнее и делится на две независимые системы: макро- и микро-уровень.
Сам по себе Ксеноморф играет абсолютно честно. У него нет доступа к вашему местоположению. Он полагается исключительно на свои виртуальные сенсоры: сканирует геометрию уровня перед собой, реагирует на звук шагов, свет фонарика или писк детектора движения. Если вы сидите тихо в соседней комнате, сам по себе Чужой вас не найдет — он будет просто патрулировать отсеки по алгоритмам поиска.
Над Чужим работает глобальная система, которую называют "Режиссером". В отличие от самого монстра, Режиссер обладает полным всезнанием. Он в любую секунду точно знает ваши координаты, уровень здоровья и количество лута в инвентаре. Однако Режиссер не может убить вас или взять Чужого под прямой контроль, чтобы повести его по вашим следам.
Главная задача Режиссера — управлять шкалой стресса игрока.
Система постоянно замеряет темп игры. Если Ксеноморф долго гонял вас по уровню и стресс зашкаливает, Режиссер отправляет монстра в вентиляцию на другой конец карты. Игрок получает окно спокойствия, чтобы выдохнуть и собрать ресурсы.
Но если вы слишком долго и безопасно сидите в одном шкафчике, шкала стресса падает до минимума. В этот момент Режиссер вмешивается. Он не выдает точных координат, а просто скидывает Чужому примерную зону поиска, отправляя его в ваш отсек. Прибыв на место, Чужой снова включает свой честный алгоритм поиска и начинает искать источник шума.
В итоге разработчикам не пришлось заставлять NPC читать данные игрока. Разделение ролей на систему-координатора и самостоятельного исполнителя позволило создать убедительную иллюзию охотника, который всегда идет по пятам.















