Да пребудет с вами прокрутка: теория и практика по камере в платформерах [2/2]
Первая часть
От переводчика. OlegKozlov рассказал о приёмах камеры в своей игре «Несыть». Из-за большого количества трафика и не слишком верно действующего JS якорь перебрасывает куда угодно, только не на комментарий, поэтому сделаю копию здесь.
Ну и по поводу навязчивости и комфорта. Было тяжело переводить и ещё тяжелее вычитывать, анимация в периферийном зрении очень мешала, да и нагруженные анимацией страницы заглючивали «рыжую». И простите, что на день бросил первую часть под замок.
Подсказываем, куда идти, близко ли цель и что рядом важного
Мы уже рассмотрели, как сделать, чтобы поле зрения игрока соответствовало управлению, и как показать то, что игрок хочет видеть — в нашем треугольнике это взаимодействие. Также мы осветили множество способов сделать прокрутку ненавязчивой, но действенной (комфорт). Теперь, как режиссёры игры, попробуем обратить внимание публики на то, что мы сами хотим ей показать — то ли ради контекста, то ли чтобы подчеркнуть течение игры, то ли ради драмы и сюжета.
Wonder Boy, ещё одна моя любимица, быстрый платформер, в котором можно идти только вперёд через старое доброе одностороннее окно свободного хода. В отличие то Super Mario Bros., там нет зоны разгона, плавно ускоряющей камеру, но есть другая интересная техника, которую я называю «рельсы». Камера ставится и движется так, чтобы предвосхищать будущие преграды.
Пятое поколение приставок, среди них PlayStation и Nintendo 64, открыло новые аппаратные возможности, положив начала грубому, но настоящему 3D. Приёмы трёхмерной камеры — сами по себе захватывающая и многогранная тема, но поддержка 3D повлияла и на двухмерные игры. Разработчики теперь могут приближать камеру, наклонять вид и даже сочетать 2D и 3D — то, что мы сейчас называем 2,5D, когда игра идёт на двухмерной плоскости, но в объёмном мире.
Одна из таких игр — Klonoa для PlayStation. Управление там обычное двухмерное, но дело происходит в проработанном трёхмерном мире. Камера идёт по трёхмерному маршруту, который ведёт нас по игре, привлекая внимание к игровым и сюжетным деталям. Этот маршрут включает не только положение камеры, но и угол съёмки с масштабом. Но маршрут не жёсткий: камера может упреждать движение игрока и реагировать на прыжки.
Такая камера дала разработчикам богатый инструментарий, позволяющий предвосхитить, удивить или встревожить. Как только камера в Klonoa отъезжает, чтобы показать босса, понятно, что делать дальше.
Donkey Kong Country предложила несколько интересных концепций, которые впоследствии стали стандартом: разработчики получили инструментарий, чтобы менять поведение камеры от уровня к уровню (и даже в отдельных частях уровня). Участки, где надо бежать без оглядки, давали далёкий обзор вперёд. А там, где надо обследовать, обзор примерно равный в обе стороны.
Как мы видим в Klonoa, трёхмерные ландшафты дают нам кинематографические инструменты, и среди них — наезд и трансфокация (зум). Зум — это смена угла зрения (FOV), а наезд — физическое движение камеры взад-вперёд, к цели или от неё. Задача у них общая, сменить рамки кадра, но подход разный; наезд даёт лучший эффект присутствия. Чем зум отличается от наезда — читайте сайты и базы данных по кинематографу; то и другое для простоты будем называть «зум». А конкретно — «зум на всех».
Например, в Yoshi’s Story кадр строится вокруг Йоши, босса и колонны — ведь игроку нужны цель и край поля. Камера не только наводится на эти элементы, но и подстраивает масштаб (наездом-отъездом), чтобы в кадр уместилось всё.
В Insanely Twisted Shadow Planet проработанная камера, учитывающая скорость игрока (упреждение по движению), вашу цель (упреждение по управлению), и одна из первых, использовавших аттракторы, направлявшие внимание игрока на определённые объекты. Подробнее об этой выдающейся камере — в блоге ITSP.
В ITSP используется кольцевой аттрактор, установленный вокруг врагов и контрольных точек. Как только игрок входит во внешний радиус, камера начинает сдвигаться по закону взвешенного среднего. Во внутреннем радиусе положение игрока вообще не берётся в счёт, камера смотрит на точку. У разных объектов разные кольца, они могут перекрываться, давая плавное перемещение от аттрактора к аттрактору.
Есть много способов привлечь внимание к деталям игры, но кольцо — один из самых надёжных. Возможны и «отталкиватели» камеры, отводящие её от объекта: скажем, чтобы было чувство ожидания и тайны — или просто чтобы сделать скрытый элемент.
Aether — красивая Flash-игра, сделанная в 2008 году Эдмундом Макмилленом и Тайлером Глэйелом, и там своеобразный подход к ракурсу. Около планеты экран поворачивается, что означает безопасную зону, к тому же тяжесть всегда направлена вниз. Вы летите сквозь пространство, попадаете в гравитационное поле, и экран начинает поворачиваться к источнику гравитации.
Обсуждение игровой камеры было бы неполным без Limbo. Чтобы создать необычную атмосферу, здесь варьируется яркость, положение и зум. В Limbo у каждой части уровня свои характеристики: камера привязывается к определённой точке экрана, и различные объекты подтягивают её к себе.
Ещё одна несложная, но эффективная техника — это ракурс на регион, как в Geometry Wars. Она объединяет положение корабля с центром поля. Поэтому экран постоянно движется вместе с кораблём со скоростью вдвое меньшей. Игрок всегда неявно знает, где он на поле, по сдвигу экрана. Это отлично работает с небольшим замкнутым полем, особенно когда угрозы обычно идут из центра.
Vessel — классическая головоломка, где игрок должен подмечать разные элементы, решая задачи, связанные с жидкостью. Потому ракурс камеры очень важен. Как и в Geometry Wars, Strange Loop решила задачу, направив камеру на регион — только на сей раз она почти не двигается, пока игрок работает над головоломкой. Вот такая современная интерпретация старых «комнатных» головоломок — только в Vessel комната может быть разного размера и с разными характеристиками.
Разработчики Vessel додумались до умной идеи: хоть камера и смотрит на регион, она слегка ходит за игроком. Это даёт сильное чувство управления, даже в ограниченном пространстве. А когда игрок решит головоломку и покинет регион, камера уже движется, и не надо её ускорять рывком, чтобы навести на другой регион.
Другой способ продемонстрировать камерой внимание и драматизм — по действиям игрока исполнять запрограммированные жесты камерой. Tomba — интересная игра, из первого урожая псевдотрёхмерных игр для PlayStaton. Камера обычно снимает прямо, но если игрок лезет с этажа на этаж, она занимает другую позицию. Удивительное чувство управления достигается тем, что камера улетает за спину, показывая, что впереди.
Жесты по геймплейным событиям бывают разные: движения по разным осям и траекториям, реагирующие, предвосхищающие, и так далее. Я уверен, что мы только начали исследовать, как связать действия игрока и поведение камеры.
Хороший пример, показывающий, какой потенциал кроется в геймплейных жестах — Aztez, ожидаемая игра-файтинг. В зависимости от сближения бойцов и суперударов, она меняет угол съёмки и наезжает-отъезжает, подчёркивая удары и добавляя драматизма.
В Streets of Rage, классической избивалке от Sega, камера тупо следует за действом простейшим односторонним окном, как обычно в избивалках. Но время от времени она уходит за экран и вместо игрока показывает нечто, проясняющее сюжет и нагнетающее драмы.
Это очень мощная система, дающая разработчикам возможность сделать кинематографическую остановку, не отходя от игрового контекста. Это как видеовставка без видео и без вставки.
The Behemoth широко пользовались кинорельсами в играх Alien Hominid и Castle Crashers. Много раз игра приостанавливалась и отъезжала к боссу или сюжетному элементу. Это выполняет две задачи — вводит в курс сюжета и показывает, куда стремиться — и при этом не отвлекает внимание от игры.
Как сосредоточиться на нескольких объектах
Даже одна цель в кадре не так проста. А что делать, если игроков (или целей) несколько?
Gauntlet был новаторской игрой в зачистку подземелий, очень передовая игра для своего времени. Когда на экране несколько игроков, она просто удерживала камеру на их средней позиции. Как только кто-то убежит (или отстанет) на целый экран, никто не может двигаться. А если кто-то бросит джойстик, все застряли — ведь никто не пересечёт (и не оттолкнёт) край экрана.
Такая же техника в Samurai Gunn, но доведённая до крайности, чтобы подчеркнуть чумовую обстановку. Это особенно подчёркивается частыми остановками и затемнениями экрана. Что касается камеры, поскольку игроки постоянно воскресают и телепортируются, средняя позиция отъезжает, быстро меняя ракурс. Даже обычного упора в край тут нет, камера может выехать за край уровня. Это хорошо подходит к атмосфере, но неудобно для стороннего зрителя. А когда дело доходит до управления, игрок даже может вывести персонажа за экран, если нужно, и никто этому не мешает.
Другой подход можно найти в старом добром Street Fighter, во всех играх франшизы. Там горизонтальное окно свободного хода, так что большую часть боя камера на месте. Как и с любым свободным ходом, игрок, упёршийся в край окна, тянет и камеру. Когда камера движется, она может потянуть за собой и других игроков, так что все в экране. Камера (и игроки) застревают, если оба тянут окно в противоположных направлениях.
Другая франшиза, сказавшая новое слово в коллективной игре,— Super Smash Bros. Уже в первой игре была выдающаяся работа с камерой. Super Smash Bros. смотрит на среднее для всех игроков, и отводит камеру назад, когда расстояние между ними растёт.
И сегодня эта система работает: так, в ROCKETSROCKETSROCKETS она применена с двойной целью: уместить всё в один кадр, и направить игроков в центр, наказывая, если они не лезут в ближний бой.
Как показано в Never Alone, можно усреднить позиции для скольких угодно актёров, в одиночной или сетевой, возможно, с разными весами для усреднения.
В Spelunky другой подход к конфликту позиций: камера смотрит только на одного. Когда он умирает, факел (белый флаг) переходит к другому. Это становится элементом геймплея: для всех, кто за экраном, тикает таймер.
Пусть игрок сам управляет взглядом
Иногда разработчику нужно дать дополнительную визуальную информацию по выбору игрока. Один из способов это решить — дать игроку управление камерой.
Снова-таки, Super Mario World был одним из первых с дополнительным управлением камерой. Боковые кнопки толкают камеру в нужном направлении. Может быть, это и умная мысль, но её часто критикуют как бесполезную: редко когда игроки замечают эту функцию.
В общем, проблема ручного управления в SMW — неинтуитивность. Стандартное управление для хождения не даёт никакой связи с боковыми кнопками.
Хороший пример интуитивного управления камерой есть в Osmos. Не похоже на типичный платформер, конечно, но в Osmos применён более тонкий способ. Колесо мыши на компьютере и щипок на планшете — это неплохо связывает управление и действие.
Мы уже видели, что в Jazz Jackrabbit 2 дополнительные кнопки для вертикальной прокрутки полностью повторяют горизонтальные, и потому ведут себя ясно и предсказуемо.
Если нужно вручную расширять поле зрения, лучше пользуйтесь теми же кнопками, что уже есть, как в Spelunky, где кнопки «вверх» и «присесть» отвечают и за обзор вверх-вниз.
Всё управление пропало!
Как мы уже видели в нашем исследовании, если камера управляется чётко и красиво, начинает ощущаться единство между игроком и заэкранным миром. Верно и обратное: если камера начнёт ходить сама по себе — например, трястись — это сильный драматический приём, демонстрирующий: оно сильнее, чем сам игрок.
Я попробовал разыскать, кто первым затряс экран. И не удивился, когда пришёл к другой игре Миямото, 1983 года — Mario Bros. Экран трясётся не во всех версиях, скорее всего из-за горящих сроков или технических ограничений.
Mario Bros. (Nintendo, 1983)
Трясущийся экран (и приостановка игры, приводящая к такому же эффекту) практиковался во многих и многих играх, и практически во всех играх Vlambeer. JW, дизайнер из Vlambeer, подробно рассказывает об этом.
Super Crate Box (Vlambeer, 2010)
Из всех «лоскутков» соберём камеру именно под наши нужды
Вы уже вложили много сил и внимания в игру, прорисовывая каждую деталь. Камера, как и любой другой элемент игры, тоже заслуживает внимания. Прежде чем вы наладите простейшую привязанную камеру, попробуйте охарактеризовать, как камера должна вести себя в игре.
Вот несколько простейших правил, которые верой служили мне, когда я писал свою игру, и в конце концов привели к этому исследованию.
Это не ограничивается работой с камерой. Это относится ко всем граням вашей игры: графике, аудио, движку и так далее.
Вот отличный пример подгонки камеры к геймплею. The Legend of Kage (Taito) был одним из первых двухосных платформеров. (Интересный факт: и одной из первых, если не единственной, с движением справа налево.) Посмотрите на горизонтальное окно свободного хода. Много грандиозных битв происходят на деревьях, и ширина окна в точности совпадает с толщиной ствола, чтобы камера не дёргалась в бою.
Ещё один хороший пример подгонки систем к вашему гемплею есть в Shinobi. С его высокими прыжками потребовалось высокое окно свободного хода, почти на весь экран. Чтобы камера далеко не уехала, она потихоньку возвращается на исходную позицию.
Sonic the Hedgehog, быстрый платформер с движением по обеим осям. Узкое окно сделано, чтобы Соник всегда был в центре, ведь всегда нужно видеть, что приближается впереди. По вертикали окно выше, чтобы небольшие прыжки не сдвигали окно. В противовес платформенный возврат восстанавливает вертикальное выравнивание, как только Соник встанет на платформу.
Когда Соник ударяется на скорости в край, особенно в «мёртвой петле» или в затяжном падении, получается изрядный рывок. Чтобы уменьшить его, окно сделали невысоким и узким — тогда скорость вряд ли будет велика.
Когда нужно смотреть далеко вперёд, а движение может быть в обоих направлениях, естественный выбор — двойное упреждение. Есть несколько способов перетянуть камеру в новую точу привязки. Блестяще решила этот вопрос Cave Story, динамически меняя скорость камеры в зависимости от скорости игрока (то есть базовая скорость плюс скорость игрока). В Bonanza Bros. другой подход: камера движется, когда движется игрок, что работает для игры в ограбление, но совсем не обязательно — для насыщенного врагами платформера вроде Cave Story.
А в Fez на вас не прут полчища врагов, так что простое окно свободного хода имеет смысл. Разработчик Fez умно вписал классическую методику в уникальный дизайн. Поскольку опорная точка для разворота измерений — ближайший угол, можно предположить, что пространство сзади важнее, чем пространство спереди. Во время разворота камера свигается так, чтобы Гомес оказался подальше от края экрана.
Подход из Vessel — замечательное решение для головоломки с одной задачкой на комнату. Поэтому камера смотрит на комнату, подбирая положение и зум, чтобы всё было видно игроку. Стои́т она нежёстко, немного сдвигаясь, когда игрок ходит: это улучшает чувство управления и слегка разгоняет камеру, прежде чем герой перейдёт в другой регион. Вместе выходит хорошее сочетание предустановленного кадра и чуткого управления.
Как мы уже видели, в The Swapper сильный сюжет и уникальная атмосфера. Добились всего этого, просто манипулируя камерой по запрограммированным рельсам. Это добавляет кинематографичности, но не дезориентирует, как обычная видеовставка.
Какие решения я принял
В Mushroom 11 основательно проработанная камера, основанная на «регионах». Каждый уровень составляется из десятков таких регионов, и в каждом регионе свой прямоугольный «коридор», ограничивающий движение камеры, и свой уровень зума.
Регионы перенумерованы по порядку, и камерой управляет тот кусок гриба, который в регионе с наибольшим номером. Как только любой кусочек, даже одна клетка, попадёт в следующий регион, камера начинает следовать за этим кусочком.
Все клетки, пропавшие из виду, погибают, так что камера должна быть точной, ведь на кону многое. Пример сверху: игроку даётся достаточно места, чтобы построить решение, а как только гриб доползёт до нового региона, камера быстро перелетает туда. И край экрана не уничтожит ни одной важной клетки.
Регионы бывают двух типов: усредняющие и прогрессирующие. От этого зависит, куда камера целится. Как только точка прицела определилась, камера перелетает туда, оставаясь при этом в прямоугольном «коридоре» региона.
Усредняющий регион
Если нужно, чтобы игрок управлял несколькими колониями клеток, или нет чёткого направления движения, регион объявляется усредняющим. Он усредняет позиции всех клеток, так что камера целится в самый большой кусок гриба. Также этот механизм подходит для закрытых комнат с головоломками, где все куски рядом друг с другом (а иначе какой-то погиб бы, выйдя за экран).
Прогрессирующий регион
Регионы с линейным устройством сосредоточиваются на грибе, который ушёл дальше всех. Это определяется по заранее установленному направлению движения в регионе — а отставшие грибы игнорируются. Заодно добавляется статическое упреждение, неплохо сочетающееся с такими регионами.
Достопримечательности
В каждом из регионов может использоваться ракурс на объект. Если гриб в этом регионе, некоторые объекты и существа притягивают камеру, руководствуясь запрограммированным или динамическим коэффициентом. Очевидная кандидатура на такой подход — боссы.
Сглаживание
Сглаживание достигается комбинацией упреждения по движению и физического сглаживания. Коэффициент сглаживания зависит от скорости гриба: когда он движется быстро, камера точная и резкая, когда пользователь аккуратно подрезает грибок — она медленно ползёт.
В игре нет прыжков, так что естественно применять упреждение по движению. Камера нацеливается туда, где гриб (или среднее нескольких грибов) будет через долю секунды, давая точное поведение и предвосхищая будущую обстановку.
С таким поведением камера отлично отрабатывает множество кусков с разным размером и скоростью, которые постоянно разрастаются и быстро движутся от региона к региону.
Автопрокрутка: игрок никак не управляет прокруткой, но имеет полное право определять, где в кадре ему быть.
Возврат камеры: постоянно снижать «увод» камеры, подтягивая её к игроку.
Географический ракурс: разные уровни или части уровней настраивают камеру по-своему.
Двойное упреждение: когда игрок меняет направление движения, камера меняет ракурс и смотрит вперёд.
Жесты камерой: по игровому событию камера исполняет запрограммированное движение.
Зум на всех: трансфокация или отъезд, чтобы в кадр поместилось всё.
Кинематографические рельсы: камера приостанавливает своё обычное поведение и снимает что-то сюжетно важное, скрытое за экраном.
Линейное сглаживание: постоянно снижать расстояние между камерой и игроком по формуле линейной интерполяции.
Окно свободного хода: сдвигать камеру, как только игрок упрётся в край окна.
Платформенный возврат: камера возвращается к игроку, как только он приземлится на платформу.
Привязанная камера: камера всегда смотрит на героя.
Ракурс на объект: ракурс определяется объектами игрового мира — например, аттракторами.
Ракурс на регион: камера смотрит на некоторую точку, скомбинированную с положением игрока.
Рельсы: запрограммированный маршрут камеры.
Статическое упреждение: больше места для обзора в главном направлении.
Толкающая зона разгона: когда персонаж в зоне, постепенно ускоряем камеру, пока не сравняется со скоростью персонажа.
Тянущая зона разгона: как только игрок пересечёт границу окна, разгоняем камеру, пока она не сравняется по скорости с персонажем.
Упор в край: устанавливается жёсткий край, за который камера выйти не может.
Упреждение по движению: камера гонится за будущим (экстраполированным) положением игрока.
Упреждение по управлению: камера подбирает упреждение в зависимости от состояния управления.
Усреднённая позиция: камера нацеливается на среднее из всех целей.
Физическое сглаживание: камера — физическое тело, постоянно летящее к целевой точке.
От переводчика. OlegKozlov рассказал о приёмах камеры в своей игре «Несыть». Из-за большого количества трафика и не слишком верно действующего JS якорь перебрасывает куда угодно, только не на комментарий, поэтому сделаю копию здесь.
Что сделано в «Несыти»…
1. Упреждение по движению: точка привязки камеры вынесена вперёд от центра червя, причём чем быстрее он ползёт, там дальше она выносится.
2. Упреждение по управлению: когда игрок начинает сжимать червя для прыжка, то вынос точки привязки камеры ещё усиливается заранее передвигая камеру в ту область, куда червь сейчас прыгнет.
3. Линейное сглаживание — камера плавно стремится к точке своей привязки, тем быстрее, чем больше разница между фактическим положением камеры (центра экрана) и точкой её привязки.
4. Плюс масштаб всего происходящего завязан на размер червя, когда червь увеличивается, то камера «отъезжает». Причём делает это тремя-четыремя ступенчатыми переключениями, чтобы игрок ощущал, что его червь вырос. Если делать плавно, то рост и изменение масштабов игры нивелируются и не приносят удовольствия.
5. Упор в край. Камера «упирается» в края уровня, становясь более статичной и позволяя голове червя сильно смешаться от центра экрана, буквально упираться головой в его край.
2. Упреждение по управлению: когда игрок начинает сжимать червя для прыжка, то вынос точки привязки камеры ещё усиливается заранее передвигая камеру в ту область, куда червь сейчас прыгнет.
3. Линейное сглаживание — камера плавно стремится к точке своей привязки, тем быстрее, чем больше разница между фактическим положением камеры (центра экрана) и точкой её привязки.
4. Плюс масштаб всего происходящего завязан на размер червя, когда червь увеличивается, то камера «отъезжает». Причём делает это тремя-четыремя ступенчатыми переключениями, чтобы игрок ощущал, что его червь вырос. Если делать плавно, то рост и изменение масштабов игры нивелируются и не приносят удовольствия.
5. Упор в край. Камера «упирается» в края уровня, становясь более статичной и позволяя голове червя сильно смешаться от центра экрана, буквально упираться головой в его край.
Ну и по поводу навязчивости и комфорта. Было тяжело переводить и ещё тяжелее вычитывать, анимация в периферийном зрении очень мешала, да и нагруженные анимацией страницы заглючивали «рыжую». И простите, что на день бросил первую часть под замок.
Направление
Подсказываем, куда идти, близко ли цель и что рядом важного
Мы уже рассмотрели, как сделать, чтобы поле зрения игрока соответствовало управлению, и как показать то, что игрок хочет видеть — в нашем треугольнике это взаимодействие. Также мы осветили множество способов сделать прокрутку ненавязчивой, но действенной (комфорт). Теперь, как режиссёры игры, попробуем обратить внимание публики на то, что мы сами хотим ей показать — то ли ради контекста, то ли чтобы подчеркнуть течение игры, то ли ради драмы и сюжета.
Wonder Boy, ещё одна моя любимица, быстрый платформер, в котором можно идти только вперёд через старое доброе одностороннее окно свободного хода. В отличие то Super Mario Bros., там нет зоны разгона, плавно ускоряющей камеру, но есть другая интересная техника, которую я называю «рельсы». Камера ставится и движется так, чтобы предвосхищать будущие преграды.
Wonder Boy (Sega, 1986) |
Рельсы: запрограммированный маршрут камеры Зона свободного хода (односторонняя) Статическое упреждение |
Пятое поколение приставок, среди них PlayStation и Nintendo 64, открыло новые аппаратные возможности, положив начала грубому, но настоящему 3D. Приёмы трёхмерной камеры — сами по себе захватывающая и многогранная тема, но поддержка 3D повлияла и на двухмерные игры. Разработчики теперь могут приближать камеру, наклонять вид и даже сочетать 2D и 3D — то, что мы сейчас называем 2,5D, когда игра идёт на двухмерной плоскости, но в объёмном мире.
Одна из таких игр — Klonoa для PlayStation. Управление там обычное двухмерное, но дело происходит в проработанном трёхмерном мире. Камера идёт по трёхмерному маршруту, который ведёт нас по игре, привлекая внимание к игровым и сюжетным деталям. Этот маршрут включает не только положение камеры, но и угол съёмки с масштабом. Но маршрут не жёсткий: камера может упреждать движение игрока и реагировать на прыжки.
Klonoa: Door to Phantomile (Namco, 1997) |
Рельсы (нежёсткие, включающие масштаб и угол съёмки) Зона свободного хода (по вертикали) Линейное сглаживание Двойное упреждение |
Такая камера дала разработчикам богатый инструментарий, позволяющий предвосхитить, удивить или встревожить. Как только камера в Klonoa отъезжает, чтобы показать босса, понятно, что делать дальше.
Donkey Kong Country предложила несколько интересных концепций, которые впоследствии стали стандартом: разработчики получили инструментарий, чтобы менять поведение камеры от уровня к уровню (и даже в отдельных частях уровня). Участки, где надо бежать без оглядки, давали далёкий обзор вперёд. А там, где надо обследовать, обзор примерно равный в обе стороны.
Donkey Kong Country (Rare Ltd / Nintendo, 1994) |
Линейное сглаживание Привязанная камера (по вертикали) Географический ракурс: разные уровни или части уровней настраивают камеру по-своему Двойное упреждение |
Как мы видим в Klonoa, трёхмерные ландшафты дают нам кинематографические инструменты, и среди них — наезд и трансфокация (зум). Зум — это смена угла зрения (FOV), а наезд — физическое движение камеры взад-вперёд, к цели или от неё. Задача у них общая, сменить рамки кадра, но подход разный; наезд даёт лучший эффект присутствия. Чем зум отличается от наезда — читайте сайты и базы данных по кинематографу; то и другое для простоты будем называть «зум». А конкретно — «зум на всех».
Например, в Yoshi’s Story кадр строится вокруг Йоши, босса и колонны — ведь игроку нужны цель и край поля. Камера не только наводится на эти элементы, но и подстраивает масштаб (наездом-отъездом), чтобы в кадр уместилось всё.
Yoshi’s Story (версия для N64; Nintendo, 1997) |
Зум на всех: трансфокация или отъезд, чтобы в кадр поместилось всё. Двойное упреждение Окно свободного хода (по вертикали) Платформенный возврат Ручное управление |
В Insanely Twisted Shadow Planet проработанная камера, учитывающая скорость игрока (упреждение по движению), вашу цель (упреждение по управлению), и одна из первых, использовавших аттракторы, направлявшие внимание игрока на определённые объекты. Подробнее об этой выдающейся камере — в блоге ITSP.
Insanely Twisted Shadow Planet (Shadow Planet Productions, 2011) |
Ракурс на объект: ракурс определяется объектами игрового мира — например, аттракторами (положение и зум задаётся кольцевым аттрактором, установленным вокруг врагов и контрольных точек). Упреждение по движению Упреждение по управлению Физическое сглаживание |
Есть много способов привлечь внимание к деталям игры, но кольцо — один из самых надёжных. Возможны и «отталкиватели» камеры, отводящие её от объекта: скажем, чтобы было чувство ожидания и тайны — или просто чтобы сделать скрытый элемент.
Aether — красивая Flash-игра, сделанная в 2008 году Эдмундом Макмилленом и Тайлером Глэйелом, и там своеобразный подход к ракурсу. Около планеты экран поворачивается, что означает безопасную зону, к тому же тяжесть всегда направлена вниз. Вы летите сквозь пространство, попадаете в гравитационное поле, и экран начинает поворачиваться к источнику гравитации.
Aether (Edmund McMillen, Tyler Glaiel / Armor Games, 2008) |
Ракурс на объект (камера поворачивается в направлении тяжести) Привязанная камера Линейное сглаживание |
Обсуждение игровой камеры было бы неполным без Limbo. Чтобы создать необычную атмосферу, здесь варьируется яркость, положение и зум. В Limbo у каждой части уровня свои характеристики: камера привязывается к определённой точке экрана, и различные объекты подтягивают её к себе.
Limbo (Playdead, 2010) |
Географический ракурс (зум, точка привязки и яркость) Привязанная камера (точка привязки меняется) Ракурс на объект (некоторые события, например, атаки врагов, подтягивают камеру) Физическое сглаживание |
Ещё одна несложная, но эффективная техника — это ракурс на регион, как в Geometry Wars. Она объединяет положение корабля с центром поля. Поэтому экран постоянно движется вместе с кораблём со скоростью вдвое меньшей. Игрок всегда неявно знает, где он на поле, по сдвигу экрана. Это отлично работает с небольшим замкнутым полем, особенно когда угрозы обычно идут из центра.
Geometry Wars (Bizarre Creations, 2003) |
Ракурс на регион: камера смотрит на некоторую точку (например, центр поля), скомбинированную с положением игрока (в данном случае — среднее арифметическое того и другого) |
Vessel — классическая головоломка, где игрок должен подмечать разные элементы, решая задачи, связанные с жидкостью. Потому ракурс камеры очень важен. Как и в Geometry Wars, Strange Loop решила задачу, направив камеру на регион — только на сей раз она почти не двигается, пока игрок работает над головоломкой. Вот такая современная интерпретация старых «комнатных» головоломок — только в Vessel комната может быть разного размера и с разными характеристиками.
Vessel (Strange Loop Games, 2012) |
Ракурс на регион (камера смотрит на точку, но слегка ходит вместе с игроком) Географический ракурс (в разных районах разные точки привязки и зум) Ракурс на объект Физическое сглаживание Кинематографические рельсы |
Разработчики Vessel додумались до умной идеи: хоть камера и смотрит на регион, она слегка ходит за игроком. Это даёт сильное чувство управления, даже в ограниченном пространстве. А когда игрок решит головоломку и покинет регион, камера уже движется, и не надо её ускорять рывком, чтобы навести на другой регион.
Другой способ продемонстрировать камерой внимание и драматизм — по действиям игрока исполнять запрограммированные жесты камерой. Tomba — интересная игра, из первого урожая псевдотрёхмерных игр для PlayStaton. Камера обычно снимает прямо, но если игрок лезет с этажа на этаж, она занимает другую позицию. Удивительное чувство управления достигается тем, что камера улетает за спину, показывая, что впереди.
Tomba! (Whoopee Camp, 1997) |
Жесты камерой: по игровому событию камера исполняет запрограммированное движение (ракурс меняется в зависимости от состояния персонажа) Двойное упреждение (по горизонтали) Платформенный возврат Окно свободного хода (по вертикали) |
Жесты по геймплейным событиям бывают разные: движения по разным осям и траекториям, реагирующие, предвосхищающие, и так далее. Я уверен, что мы только начали исследовать, как связать действия игрока и поведение камеры.
Хороший пример, показывающий, какой потенциал кроется в геймплейных жестах — Aztez, ожидаемая игра-файтинг. В зависимости от сближения бойцов и суперударов, она меняет угол съёмки и наезжает-отъезжает, подчёркивая удары и добавляя драматизма.
Aztez (Team Colorblind, ожидается) |
Жесты камерой: наезд-отъезд и смена угла съёмки в зависимости от игровых действий Привязанная камера (по вертикали) Линейное сглаживание Зум на всех |
В Streets of Rage, классической избивалке от Sega, камера тупо следует за действом простейшим односторонним окном, как обычно в избивалках. Но время от времени она уходит за экран и вместо игрока показывает нечто, проясняющее сюжет и нагнетающее драмы.
Streets of Rage (Sega, 1991) |
Кинематографические рельсы: камера приостанавливает своё обычное поведение и снимает что-то сюжетно важное, скрытое за экраном. Географический ракурс Окно свободного хода (одностороннее, только между схватками — обычное поведение избивалок) |
Это очень мощная система, дающая разработчикам возможность сделать кинематографическую остановку, не отходя от игрового контекста. Это как видеовставка без видео и без вставки.
The Behemoth широко пользовались кинорельсами в играх Alien Hominid и Castle Crashers. Много раз игра приостанавливалась и отъезжала к боссу или сюжетному элементу. Это выполняет две задачи — вводит в курс сюжета и показывает, куда стремиться — и при этом не отвлекает внимание от игры.
Alien Hominid (The Behemoth, 2004) |
Географический ракурс Кинематографические рельсы Окно свободного хода (одностороннее, только между схватками — обычное поведение избивалок) |
Двое в камере, не считая собаки
Как сосредоточиться на нескольких объектах
Даже одна цель в кадре не так проста. А что делать, если игроков (или целей) несколько?
Gauntlet был новаторской игрой в зачистку подземелий, очень передовая игра для своего времени. Когда на экране несколько игроков, она просто удерживала камеру на их средней позиции. Как только кто-то убежит (или отстанет) на целый экран, никто не может двигаться. А если кто-то бросит джойстик, все застряли — ведь никто не пересечёт (и не оттолкнёт) край экрана.
Gauntlet (Atari Games, 1985) |
Усреднённая позиция: камера нацеливается на среднее из всех целей |
Такая же техника в Samurai Gunn, но доведённая до крайности, чтобы подчеркнуть чумовую обстановку. Это особенно подчёркивается частыми остановками и затемнениями экрана. Что касается камеры, поскольку игроки постоянно воскресают и телепортируются, средняя позиция отъезжает, быстро меняя ракурс. Даже обычного упора в край тут нет, камера может выехать за край уровня. Это хорошо подходит к атмосфере, но неудобно для стороннего зрителя. А когда дело доходит до управления, игрок даже может вывести персонажа за экран, если нужно, и никто этому не мешает.
Samurai Gunn (Teknopants, 2013) |
Усреднённая позиция Линейное сглаживание Нет упора в край (чтобы достичь чумовой атмосферы, отказались даже от этого, так что экран постоянно в движении) |
Другой подход можно найти в старом добром Street Fighter, во всех играх франшизы. Там горизонтальное окно свободного хода, так что большую часть боя камера на месте. Как и с любым свободным ходом, игрок, упёршийся в край окна, тянет и камеру. Когда камера движется, она может потянуть за собой и других игроков, так что все в экране. Камера (и игроки) застревают, если оба тянут окно в противоположных направлениях.
Street Fighter (Capcom, 1987) |
Окно свободного хода (горизонтальное, упёршийся в край окна тянет за собой камеру, которая увлекает остальных персонажей) |
Другая франшиза, сказавшая новое слово в коллективной игре,— Super Smash Bros. Уже в первой игре была выдающаяся работа с камерой. Super Smash Bros. смотрит на среднее для всех игроков, и отводит камеру назад, когда расстояние между ними растёт.
Super Smash Bros. (HAL Laboratory / Nintendo, 1999) |
Зум на всех Усреднённая позиция (технически камера стремится к ней) Линейное сглаживание |
И сегодня эта система работает: так, в ROCKETSROCKETSROCKETS она применена с двойной целью: уместить всё в один кадр, и направить игроков в центр, наказывая, если они не лезут в ближний бой.
ROCKETSROCKETSROCKETS (Radial Games, 2014) |
Зум на всех Усреднённая позиция |
Как показано в Never Alone, можно усреднить позиции для скольких угодно актёров, в одиночной или сетевой, возможно, с разными весами для усреднения.
Never Alone (Upper One Games, 2014) |
Физическое сглаживание Усреднённая позиция Кинематографические рельсы Географический ракурс Ракурс на объект |
В Spelunky другой подход к конфликту позиций: камера смотрит только на одного. Когда он умирает, факел (белый флаг) переходит к другому. Это становится элементом геймплея: для всех, кто за экраном, тикает таймер.
Spelunky (Derek Yu / Mossmouth, 2008–2012) |
Привязанная камера Линейное сглаживание Ручное управление (кнопками ↑↓) |
Ручное управление
Пусть игрок сам управляет взглядом
Иногда разработчику нужно дать дополнительную визуальную информацию по выбору игрока. Один из способов это решить — дать игроку управление камерой.
Снова-таки, Super Mario World был одним из первых с дополнительным управлением камерой. Боковые кнопки толкают камеру в нужном направлении. Может быть, это и умная мысль, но её часто критикуют как бесполезную: редко когда игроки замечают эту функцию.
Super Mario World (Nintendo, 1990) |
Географический ракурс Платформенный возврат Окно свободного хода (по вертикали, срабатывает редко) Двойное упреждение (включается по порогу) Ручное управление (по горизонтали, дополнительными кнопками пульта) |
В общем, проблема ручного управления в SMW — неинтуитивность. Стандартное управление для хождения не даёт никакой связи с боковыми кнопками.
Хороший пример интуитивного управления камерой есть в Osmos. Не похоже на типичный платформер, конечно, но в Osmos применён более тонкий способ. Колесо мыши на компьютере и щипок на планшете — это неплохо связывает управление и действие.
Osmos (Hemisphere Games, 2009) |
Привязанная камера Ручное управление (сенсорный щипок и колесо мыши меняют масштаб) |
Мы уже видели, что в Jazz Jackrabbit 2 дополнительные кнопки для вертикальной прокрутки полностью повторяют горизонтальные, и потому ведут себя ясно и предсказуемо.
Jazz Jackrabbit 2 (Epic Games, 1998) |
Линейное сглаживание (по вертикали) Упреждение по управлению: камера подбирает упреждение в зависимости от состояния управления (в данном случае — клавиш-стрелок) [ручное управление] (как частный случай упреждения по управлению) |
Если нужно вручную расширять поле зрения, лучше пользуйтесь теми же кнопками, что уже есть, как в Spelunky, где кнопки «вверх» и «присесть» отвечают и за обзор вверх-вниз.
Spelunky (Derek Yu / Mossmouth, 2008–2012) |
Привязанная камера Линейное сглаживание Ручное управление (кнопками ↑↓) |
Трясущаяся камера
Всё управление пропало!
Как мы уже видели в нашем исследовании, если камера управляется чётко и красиво, начинает ощущаться единство между игроком и заэкранным миром. Верно и обратное: если камера начнёт ходить сама по себе — например, трястись — это сильный драматический приём, демонстрирующий: оно сильнее, чем сам игрок.
Я попробовал разыскать, кто первым затряс экран. И не удивился, когда пришёл к другой игре Миямото, 1983 года — Mario Bros. Экран трясётся не во всех версиях, скорее всего из-за горящих сроков или технических ограничений.
Mario Bros. (Nintendo, 1983)
Трясущийся экран (и приостановка игры, приводящая к такому же эффекту) практиковался во многих и многих играх, и практически во всех играх Vlambeer. JW, дизайнер из Vlambeer, подробно рассказывает об этом.
Super Crate Box (Vlambeer, 2010)
Собственная камера
Из всех «лоскутков» соберём камеру именно под наши нужды
Вы уже вложили много сил и внимания в игру, прорисовывая каждую деталь. Камера, как и любой другой элемент игры, тоже заслуживает внимания. Прежде чем вы наладите простейшую привязанную камеру, попробуйте охарактеризовать, как камера должна вести себя в игре.
Вот несколько простейших правил, которые верой служили мне, когда я писал свою игру, и в конце концов привели к этому исследованию.
- Найдите, в чём своеобразие вашей игры.
- Посмотрите, как в других играх решили ваши задачи.
- Улучшите эти решения.
Это не ограничивается работой с камерой. Это относится ко всем граням вашей игры: графике, аудио, движку и так далее.
Вот отличный пример подгонки камеры к геймплею. The Legend of Kage (Taito) был одним из первых двухосных платформеров. (Интересный факт: и одной из первых, если не единственной, с движением справа налево.) Посмотрите на горизонтальное окно свободного хода. Много грандиозных битв происходят на деревьях, и ширина окна в точности совпадает с толщиной ствола, чтобы камера не дёргалась в бою.
The Legend of Kage (Taito, 1985) |
Привязанная камера (по вертикали) Окно свободного хода (по горизонтали, совпадает с толщиной дерева) |
Ещё один хороший пример подгонки систем к вашему гемплею есть в Shinobi. С его высокими прыжками потребовалось высокое окно свободного хода, почти на весь экран. Чтобы камера далеко не уехала, она потихоньку возвращается на исходную позицию.
Shinobi (Sega, 1987) |
Возврат камеры (по вертикали) Окно свободного хода (по вертикали) Привязанная камера (по горизонтали) Статическое упреждение |
Sonic the Hedgehog, быстрый платформер с движением по обеим осям. Узкое окно сделано, чтобы Соник всегда был в центре, ведь всегда нужно видеть, что приближается впереди. По вертикали окно выше, чтобы небольшие прыжки не сдвигали окно. В противовес платформенный возврат восстанавливает вертикальное выравнивание, как только Соник встанет на платформу.
Когда Соник ударяется на скорости в край, особенно в «мёртвой петле» или в затяжном падении, получается изрядный рывок. Чтобы уменьшить его, окно сделали невысоким и узким — тогда скорость вряд ли будет велика.
Sonic the Hedgehog (Sega, 1991) |
Платформенное выравнивание Окно свободного хода Статическое упреждение Ручное управление |
Когда нужно смотреть далеко вперёд, а движение может быть в обоих направлениях, естественный выбор — двойное упреждение. Есть несколько способов перетянуть камеру в новую точу привязки. Блестяще решила этот вопрос Cave Story, динамически меняя скорость камеры в зависимости от скорости игрока (то есть базовая скорость плюс скорость игрока). В Bonanza Bros. другой подход: камера движется, когда движется игрок, что работает для игры в ограбление, но совсем не обязательно — для насыщенного врагами платформера вроде Cave Story.
Cave Story (Studio Pixel, 2004) |
Привязанная камера (по вертикали) Двойное упреждение Физическое сглаживание Ручное управление (по вертикали) |
А в Fez на вас не прут полчища врагов, так что простое окно свободного хода имеет смысл. Разработчик Fez умно вписал классическую методику в уникальный дизайн. Поскольку опорная точка для разворота измерений — ближайший угол, можно предположить, что пространство сзади важнее, чем пространство спереди. Во время разворота камера свигается так, чтобы Гомес оказался подальше от края экрана.
Fez (Polytron, 2012) |
Окно свободного хода (по горизонтали, сохраняется при развороте измерений) Привязанная камера (по вертикали) Линейное сглаживание Географический ракурс Ручное управление (правым рычажком) |
Подход из Vessel — замечательное решение для головоломки с одной задачкой на комнату. Поэтому камера смотрит на комнату, подбирая положение и зум, чтобы всё было видно игроку. Стои́т она нежёстко, немного сдвигаясь, когда игрок ходит: это улучшает чувство управления и слегка разгоняет камеру, прежде чем герой перейдёт в другой регион. Вместе выходит хорошее сочетание предустановленного кадра и чуткого управления.
Vessel (Strange Loop Games, 2012) |
Ракурс на регион (камера смотрит на точку, но слегка ходит вместе с игроком) Географический ракурс (в разных районах разные точки привязки и зум) Ракурс на объект Физическое сглаживание Кинематографические рельсы |
Как мы уже видели, в The Swapper сильный сюжет и уникальная атмосфера. Добились всего этого, просто манипулируя камерой по запрограммированным рельсам. Это добавляет кинематографичности, но не дезориентирует, как обычная видеовставка.
The Swapper (Facepalm Games, 2013) |
Упреждение по управлению Физическое сглаживание Географический ракурс Ракурс на объект Кинематографические рельсы |
Mushroom 11
Какие решения я принял
В Mushroom 11 основательно проработанная камера, основанная на «регионах». Каждый уровень составляется из десятков таких регионов, и в каждом регионе свой прямоугольный «коридор», ограничивающий движение камеры, и свой уровень зума.
Mushroom 11 (Untame, ожидается) |
>>> Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; статическое упреждение; ракурс на объект (в разных регионах по-разному) Упреждение по движению Физическое сглаживание (коэффициенты зависят от скорости) |
Регионы перенумерованы по порядку, и камерой управляет тот кусок гриба, который в регионе с наибольшим номером. Как только любой кусочек, даже одна клетка, попадёт в следующий регион, камера начинает следовать за этим кусочком.
Mushroom 11 (Untame, ожидается) |
>>> Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; статическое упреждение; ракурс на объект (в разных регионах по-разному) Упреждение по движению Физическое сглаживание (коэффициенты зависят от скорости) |
Все клетки, пропавшие из виду, погибают, так что камера должна быть точной, ведь на кону многое. Пример сверху: игроку даётся достаточно места, чтобы построить решение, а как только гриб доползёт до нового региона, камера быстро перелетает туда. И край экрана не уничтожит ни одной важной клетки.
Регионы бывают двух типов: усредняющие и прогрессирующие. От этого зависит, куда камера целится. Как только точка прицела определилась, камера перелетает туда, оставаясь при этом в прямоугольном «коридоре» региона.
Усредняющий регион
Если нужно, чтобы игрок управлял несколькими колониями клеток, или нет чёткого направления движения, регион объявляется усредняющим. Он усредняет позиции всех клеток, так что камера целится в самый большой кусок гриба. Также этот механизм подходит для закрытых комнат с головоломками, где все куски рядом друг с другом (а иначе какой-то погиб бы, выйдя за экран).
Mushroom 11 (Untame, ожидается) |
Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») >>> Усреднённая позиция; статическое упреждение; ракурс на объект (в разных регионах по-разному) Упреждение по движению Физическое сглаживание (коэффициенты зависят от скорости) |
Прогрессирующий регион
Регионы с линейным устройством сосредоточиваются на грибе, который ушёл дальше всех. Это определяется по заранее установленному направлению движения в регионе — а отставшие грибы игнорируются. Заодно добавляется статическое упреждение, неплохо сочетающееся с такими регионами.
Mushroom 11 (Untame, ожидается) |
Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; >>> статическое упреждение; ракурс на объект (в разных регионах по-разному) Упреждение по движению Физическое сглаживание (коэффициенты зависят от скорости) |
Достопримечательности
В каждом из регионов может использоваться ракурс на объект. Если гриб в этом регионе, некоторые объекты и существа притягивают камеру, руководствуясь запрограммированным или динамическим коэффициентом. Очевидная кандидатура на такой подход — боссы.
Mushroom 11 (Untame, ожидается) |
Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; статическое упреждение; >>> ракурс на объект (в разных регионах по-разному) Упреждение по движению Физическое сглаживание (коэффициенты зависят от скорости) |
Сглаживание
Сглаживание достигается комбинацией упреждения по движению и физического сглаживания. Коэффициент сглаживания зависит от скорости гриба: когда он движется быстро, камера точная и резкая, когда пользователь аккуратно подрезает грибок — она медленно ползёт.
В игре нет прыжков, так что естественно применять упреждение по движению. Камера нацеливается туда, где гриб (или среднее нескольких грибов) будет через долю секунды, давая точное поведение и предвосхищая будущую обстановку.
Mushroom 11 (Untame, ожидается) |
Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; статическое упреждение; ракурс на объект (в разных регионах по-разному) >>> Упреждение по движению >>> Физическое сглаживание (коэффициенты зависят от скорости) |
С таким поведением камера отлично отрабатывает множество кусков с разным размером и скоростью, которые постоянно разрастаются и быстро движутся от региона к региону.
Mushroom 11 (Untame, ожидается) |
Географический ракурс (в каждом регионе свой зум и свой прямоугольный «коридор») Усреднённая позиция; статическое упреждение; ракурс на объект (в разных регионах по-разному) >>> Упреждение по движению >>> Физическое сглаживание (коэффициенты зависят от скорости) |
Словарь
Автопрокрутка: игрок никак не управляет прокруткой, но имеет полное право определять, где в кадре ему быть.
Возврат камеры: постоянно снижать «увод» камеры, подтягивая её к игроку.
Географический ракурс: разные уровни или части уровней настраивают камеру по-своему.
Двойное упреждение: когда игрок меняет направление движения, камера меняет ракурс и смотрит вперёд.
Жесты камерой: по игровому событию камера исполняет запрограммированное движение.
Зум на всех: трансфокация или отъезд, чтобы в кадр поместилось всё.
Кинематографические рельсы: камера приостанавливает своё обычное поведение и снимает что-то сюжетно важное, скрытое за экраном.
Линейное сглаживание: постоянно снижать расстояние между камерой и игроком по формуле линейной интерполяции.
Окно свободного хода: сдвигать камеру, как только игрок упрётся в край окна.
Платформенный возврат: камера возвращается к игроку, как только он приземлится на платформу.
Привязанная камера: камера всегда смотрит на героя.
Ракурс на объект: ракурс определяется объектами игрового мира — например, аттракторами.
Ракурс на регион: камера смотрит на некоторую точку, скомбинированную с положением игрока.
Рельсы: запрограммированный маршрут камеры.
Статическое упреждение: больше места для обзора в главном направлении.
Толкающая зона разгона: когда персонаж в зоне, постепенно ускоряем камеру, пока не сравняется со скоростью персонажа.
Тянущая зона разгона: как только игрок пересечёт границу окна, разгоняем камеру, пока она не сравняется по скорости с персонажем.
Упор в край: устанавливается жёсткий край, за который камера выйти не может.
Упреждение по движению: камера гонится за будущим (экстраполированным) положением игрока.
Упреждение по управлению: камера подбирает упреждение в зависимости от состояния управления.
Усреднённая позиция: камера нацеливается на среднее из всех целей.
Физическое сглаживание: камера — физическое тело, постоянно летящее к целевой точке.