Новые чудеса оптимизации: как делали игру «Принц Персии»

Новые чудеса оптимизации: как делали игру «Принц Персии»

Как сделать плавную анимацию, если доступно всего несколько кадров

Когда-то мы писали о том, как создавали и оптимизировали старые игры для приставок. Теперь взглянем на это с другой стороны: как на слабом железе создать очень интересную и визуально богатую игру. Что делать, если память почти закончилась, а нам нужны дополнительные персонажи? Ну и вообще как делали старые игры. 

👉 Эта статья — краткий пересказ видео с канала Ars Technica, где создатель игры Джордан Мехнер делится историями о разработке игры. Если знаете английский, посмотрите видео в оригинале, а если нет — читайте дальше:

Каратека

До «Принца Персии» Джордан создал «Каратеку» — игру для компьютера Apple 2. Смысл такой: игрок играет за персонажа-каратиста, который движется вперёд и сражается с другими каратистами на своём пути. Сложность разработки была в том, что у большинства пользователей Apple 2 было всего:

  • 16 килобайт оперативной памяти на всё, включая работу операционной системы и служебных программ;
  • 4-цветный монитор с разрешением 140 на 192 пикселя;
  • процессор на 1 мегагерц — это в несколько тысяч раз меньше, чем у самого простого нынешнего офисного ноутбука.

Новые чудеса оптимизации: как делали игру «Принц Персии»
Компьютер Apple 2.
Новые чудеса оптимизации: как делали игру «Принц Персии»
Игра «Каратека» на Apple 2.

Успех «Каратеке» принесла относительная реалистичность анимации персонажей: они довольно точно повторяли движения настоящих каратистов, и для того времени и железа это выглядело круто. 

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

Новые чудеса оптимизации: как делали игру «Принц Персии»
Так двигается настоящий каратист.
Новые чудеса оптимизации: как делали игру «Принц Персии»
А так это отрисовано по кадрам в «Каратеке».

Движения персонажей в «Принце Персии»

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

Джордан применил тот же подход, что и в «Каратеке», но вывел его на новый уровень: он позвал своего брата и попросил выполнить его все трюки, которые будут в игре у персонажа. Каждый трюк, от простого бега до длинных прыжков с разбега, Джордан снимал на камеру:

Новые чудеса оптимизации: как делали игру «Принц Персии»

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

Новые чудеса оптимизации: как делали игру «Принц Персии»
Новые чудеса оптимизации: как делали игру «Принц Персии»

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

Новые чудеса оптимизации: как делали игру «Принц Персии»
В работу пошли только те кадры, где изменение положения игрока было заметным на глаз
Новые чудеса оптимизации: как делали игру «Принц Персии»

А вот что получилось в итоге после оцифровки анимации:

Новые чудеса оптимизации: как делали игру «Принц Персии»

Как сделать ещё одного персонажа, когда не хватает памяти

Изначально в «Принце Персии» не было врагов — игрок должен был просто пройти все подземелья и ловушки, чтобы добраться до принцессы. Чтобы игра стала интереснее, разработчик решил добавить в неё противника. 

Но проблема была в том, что новому персонажу нужны:

  1. Свой уникальный внешний вид, чтобы никто не перепутал его с кем-то ещё.
  2. Своя анимация движения.
  3. Своя логика работы и реакции на то, что происходит в игре.

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

Решение придумали такое: 

  1. Использовать битовую команду EOR (исключающее или), чтобы при наложении EOR-маски на модель игрока получить её контур — цветной по краям и чёрный внутри.
  2. Так как это просто маска, которая накладывается на модель игрока, то новую анимацию придумывать не нужно — достаточно будет на неё наложить ту же маску.

Во время разработки это выглядело так и заняло всего 4 команды:

Новые чудеса оптимизации: как делали игру «Принц Персии»

Глядя на результат, разработчик понял, что у него получился как бы теневой двойник главного героя. Чтобы объяснить его внешний вид, Джордану пришлось придумать целую историю прохождения игрока через зеркало: в тот момент, когда герой проходит сквозь зеркало, с обратной стороны выходит тот самый теневой персонаж:

Новые чудеса оптимизации: как делали игру «Принц Персии»
Новые чудеса оптимизации: как делали игру «Принц Персии»

Чему это нас учит

По классике, «раньше программисты могли написать игру на 3 килобайта, и она игралась лучше, чем современные поделки». Но это старая сказка, так будут говорить всегда. 

Интересно вот что: большая часть решений в этой игре — не программистская, а смысловая и художественная. На основании чего записать движения? Какие кадры выбрать? Что должно быть в сюжете? Это история о том, что программирование — это не столько знание синтаксиса, сколько решение творческих задач. 

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

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Читаете «Код»? Зарабатывайте на коде
Сфера ИТ и разработки постоянно растёт и требует новых кадров. Компании готовы щедро платить даже начинающим разработчикам, а опытных вообще отрывают с руками. Обучиться на разработчика можно в «Яндекс Практикуме».
Начать карьеру
Читаете «Код»? Зарабатывайте на коде Читаете «Код»? Зарабатывайте на коде Читаете «Код»? Зарабатывайте на коде Читаете «Код»? Зарабатывайте на коде
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Мальчик заливает на FTP, мужчина поднимает Git

Зачем нужен контроль версий и что делать, если ваши друзья его используют.

hard
7 неочевидных свойств файла, которые могут многое рассказать
7 неочевидных свойств файла, которые могут многое рассказать

Открывать файл необязательно 🙂

easy
130 тысяч рублей за работу бэкенд-разработчика. Что это значит?
130 тысяч рублей за работу бэкенд-разработчика. Что это значит?

Что нужно делать, чтобы получать столько же.

easy
Что такое перегрузка операторов
Что такое перегрузка операторов

Для тех, кто пытался, но не понял.

hard
Карьера в Selectel: приходите строить большие российские облака
Карьера в Selectel: приходите строить большие российские облака

Кто нужен, чтобы развивать российскую ИТ-инфраструктуру

easy
Зачем нужны базы данных
Зачем нужны базы данных

И какие они бывают.

easy
Если вы гуманитарий, вы очень нужны в ИТ
Если вы гуманитарий, вы очень нужны в ИТ

Самое простое объяснение, почему технарям не обойтись без гуманитариев.

easy
Декомпозиция задач: что это и зачем нужно
Декомпозиция задач: что это и зачем нужно

И как сделать так, чтобы всё шло по плану.

easy
Кто такой дата-сайентист

Если вы не знаете, чем заняться ближайшие 15 лет, — идите в дата-сайенс, помогите нейросетям захватить мир.

easy
Двоичный калькулятор из бусин и палок
Двоичный калькулятор из бусин и палок

Выглядит странно, но при этом всё работает

easy
easy