avatar

От кино к киноиграм

опубликовал в Как я стал разработчиком игр
От кино к киноиграм
Привет, геймсетап!
Меня зовут Николай Горшков, от роду я девяностого года рождения, и занимаюсь преимущественно «режиссёрствованием» и «актерствованием» в кино. Но сейчас речь пойдёт исключительно о том, как из мира кино я перелез в мир игр, и почему так случилось. Эта статья носит даже не развлекательный, а скорее познавательный характер, так что надеюсь её прочтение будет для Вас не только интересным, но и полезным.

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


Итак, на этих страницах вы увидите все хроники создания моего проекта ORBOTS: от момента, когда он находился в состоянии зародыша до самых финальных штрихов. Я перечислю основные трудности, с которыми мне пришлось столкнуться на пути к его реализации, и чудесный опыт, который я извлёк при столкновении с каждой из них.
Пожалуй, основная сложность заключалась в самой выбранной технике – это видеоигра. Оно и понятно, ведь помимо хорошей режиссуры, операторского мастерства и, разумеется, работы художника-постановщика, здесь требуется множество дополнительных знаний и умений, не присущих кинематографу. Нужно понимать механику игры, как она работает на программном уровне – иначе будет сложно подстроить её под себя, чтобы она отвечала вашим задумкам.
В начале у меня не было почти никаких навыков в создании игр, поэтому данное решение было для меня чем-то типа вызова самому себе – а смогу ли я добиться хорошего результата в том, чего не умею? Надо полагать, работа была кропотливой и утомительной: каждый новый день я познавал много нового, медленно набивая шишки на собственных ошибках. Но в результате я освоил для себя ряд навыков, которые, без сомнения, смогут пригодиться мне в будущем.
Для удобства чтения все этапы работы разбиты по разделам. Пусть приведённый ниже текст поможет составить вам наиболее полное впечатление о процессе создания моего проекта.

ТЕМА ПРОЕКТА

Основная тема фильма – борьба против системы. Одинокий робот, отправленный на переплавку, вдруг оживает и пытается дать отпор неумолимому конвейеру. Конвейер показан поистине гигантским – робот бегает по механической руке, как будто муравей, затем прыгает по огромным шестерёнкам, чтобы не оказаться зажатым между ними, а в конце вообще оказывается под висящим прессом, который даже не влезает в кадр.
Весь фильм робот спасается с конвейерной ленты, и в итоге оказывается, что эта лента, как и сотни других, впадает в отдельную дорожку (которых, нетрудно догадаться, тоже великое множество), таким образом, еще больше увеличив ощущение ничтожности героев. Впрочем, они не отчаиваются и не перестают бороться дальше – всё-таки фильм позиционирует себя как заявка, и подразумевает продолжение.
Сюжет строится таким образом, что робот каждый раз, думая, что он спасся, на деле попадает в ещё большую передрягу. Фильм как бы говорит: «каждый момент – будь начеку! Как только ты расслабишься, система одержит над тобой верх!».
Так и в нашей жизни – никогда не стоит опускать руки в борьбе с системой, ведь пока мы боремся с ней, она не сможет нас раздавить.
ГЕРОИ ПРОЕКТА

В фильме три основных героя.
Первый и самый главный – робот-поводырь. Он не обладает никакими сверхспособностями. Это робот, созданный исключительно для того, чтобы переводить пожилых людей через дорогу. Мне было важно придумать ему такое занятие, которое бы делало его умилительным (тем самым, заставляя сопереживать ему), и в то же время сохраняло бы комичность истории.
Второй персонаж – будильник. На самом деле, в первоначальной версии сценария этого героя заменял другой робот, с которым главный герой сначала соперничал, а затем спасал на конвейере. Но получалось так, что этот персонаж почти не влиял на сюжет – у него не было своей определённой цели, он был нужен только для того, чтобы мотивировать главного героя. И в скором времени, пришла идея поменять робота на микроволновую печь и провести между ними любовную линию. Эта идея казалась хорошей, ведь микроволновка достаточно беспомощна, и сама уж точно не сможет спастись из-под опускающегося пресса. Кроме того, робот влюбляющийся в бытовой предмет – это отличная шутка, которая поддержит общий комичный стиль в работе!
Другое дело, что, уже работая над дизайном персонажа, мне никак не удавалось сделать микроволновую печь выразительной. Хотелось, чтобы она выражала свои эмоции через циферблат посредством смайликов из символов и чисел, но большую часть её тела занимала дверца, которая была по сути никак не задействована. Поэтому вскоре было решено сменить микроволновку на электронный будильник. Помимо циферблата, который занимал всю переднюю грань, сзади у него болтался провод, который играл роль собачьего хвоста, и помогал дополнительно выражать эмоции.
В фильме нет явно выраженного антагониста – им является сам конвейер. Это нечто огромное, нерушимое. На протяжении всего повествования конвейер, в который попал главный герой, не перестаёт нас удивлять. От гигантских механических рук мы приходим к еще более гигантским шестерёнкам, а затем к ещё более гигантским прессам. И кажется, что ему нет ни конца, ни края.
Конвейер олицетворяет систему, против которой начинает бороться наш герой – за выживание. Конвейер не показан жаждущим убить. Он просто сухо, монотонно делает свою работу. И эта бесчувственность заставляет бояться огромный механизм ещё больше.

РАБОТА НАД СЦЕНАРИЕМ

Хочу напомнить, что «Орботы» являются переосмыслением работы сделанной еще год назад. Там мы совместно с Михаилом Давыдовым впервые подошли к этой технике. В первую очередь мы старались показать максимальную интерактивность, когда зритель-игрок мог управлять буквально каждым движением персонажа. Но очень скоро я понял, что помимо простой демонстрации технических возможностей, эта затея вполне может вырасти в нечто большее, если приправить её хорошим сценарием и режиссурой. Это может быть не просто видеоигра, а фильм-игра! Ведь фильм, который даёт тебе возможность время от времени управлять персонажем (и, тем самым, влиять на развитие дальнейшего сюжета), заставляет тебя погрузиться в себя в разы глубже, чем обыкновенное кино.


Взяв на вооружение технику, отточенную в прошлом году, я начал работать над сценарием. В первой версии «Орботов» сценарий оставлял много вопросов, на которые даже не собирался отвечать: робот-уборщик, оказывающийся один на космической станции, ищет своего хозяина и в конце находит его мёртвым за рабочим местом. Это была скорее заявка на историю, чем сама история. Впрочем, там, как я уже писал ранее, упор шёл в основном на техническую составляющую и интерактив.
В этот раз мне хотелось донести более понятную и цельную историю, которая между тем включала бы в себя много экшен-сцен. После долгих поисков было решено поместить центральное действие на конвейер по переработке металлолома, куда случайным образом попадает главный герой и задачей всего фильма становиться выбраться оттуда. Такая локация давала большой простор для фантазии. Но всё равно чего-то не хватало.
Фильм должен был длиться от шести до восьми минут экранного времени, и мне показалось логичным ввести в сюжет второго персонажа, чтобы зрителю было не так скучно наблюдать за происходящим. В самом раннем варианте им стал второй робот, которого первый должен был спасать в кульминационный момент фильма. Но довольно скоро я понял, что проблема создаваемой работы не в том, что на одного единственного персонажа скучно смотреть восемь минут, а в том, что ему попросту не сопереживаешь.
Осознав свой промах, я решил взять в команду профессионального сценариста, который бы свежим взглядом посмотрел на историю и смог подсказать, как сделать её лучше. При первой же встрече мы отмели явно лишние эпизоды, которые выбивались из общего сюжета (например, в первом варианте сценария был эпизод, когда главный герой обнаруживал внутри своего корпуса таймер с обратным отсчётом, который впоследствии оказывался счётчиком до очередного дня рождения) и сошлись во мнении на том, что необходимо придумать пролог, в котором показывалась бы жизнь робота до попадания на конвейер.
Кадры из сцены с таймером. Художник: Мария Солярчук
Кадры из сцены с таймером. Художник: Мария Солярчук
Кадры из сцены с таймером. Художник: Мария Солярчук
Кадры из сцены с таймером. Художник: Мария Солярчук

Вступительный пролог должен был быть в меру коротким и не перетягивать на себя одеяло. Мы подошли к нему серьёзно, поскольку именно этот эпизод фильма отвечает за то, будем ли мы любить и сопереживать героям или нет. За несколько недель было придумано по меньшей мере двадцать различных вариантов завязки, от пафосных и драматичных, до абстрактных и смешных. В одном из них два робота-друга шли по тротуару пустынного футуристического города и изнывали от жары, а затем, увидев на противоположной стороне дороги автомат с одной единственной холодной баночкой робо-колы, пускались наперегонки, и их сбивала машина, вследствие чего их обоих отбрасывало прямиком в кузов грузовика, который отвозил металлолом на конвейер. В другом варианте второй персонаж оказывался не роботом-другом, а дедушкой главного героя, которого тот собирался отправить в пансионат для пожилых роботов, который впоследствии оказывался замаскированным заводом по переработке металлолома. Также был вариант, когда робот жертвовал собой, спасая играющего на проезжей части ребёнка, но мы посчитали его чересчур драматичным для нашего весёлого экшена.
В конце концов, придя к выводу, что второй персонаж создан по сути только для того, чтобы мотивировать первого, мы решили заменить его на бытовой предмет. Это добавляло юмора истории и беззащитности спасаемому персонажу, ведь обыкновенной микроволновке или будильнику будет сложнее спастись из-под опускающегося пресса, чем роботу, хотя бы потому что у него нет рук и ног. Затем мы поняли, что главному герою нужно придумать какую-то работу, ради которой он и был сконструирован, чтобы она в то же время была связана с дорогой (если уж мы решили, что он отправляется на конвейер из-за того, что его сбивает автомобиль) и поддерживала юмор в сюжете. Перебрав уйму вариантов, мы остановились на роботе-поводыре, который всю жизнь переводил пожилых людей через дорогу. Наконец, наши потуги выросли в сценарий, где робот-поводырь, переводя слепого старика через дорогу, засматривался на рекламный щит с изображением нового будильника и влюблялся в него. Он застывал на месте, паря в своих мечтах об их совместном времяпрепровождении, и его сбивала машина. В финале истории робот, преодолев множество препятствий, всё-таки спасал будильник, который волею судьбы тоже оказался на конвейере, но в последнем кадре мы делали отъезд, в котором было видно, что всё это время робот шёл вглубь конвейера, а не к выходу из него, и над ними нависал гигантский пресс. Такая открытая концовка позволяла при желании продолжить историю и развить её в нечто большее, чем восьмиминутную фильм-игру.

ИЗОБРАЗИТЕЛЬНОЕ РЕШЕНИЕ
Работа над изобразительным решением велась очень долго и тщательно. За всё время создания образ главного персонажа менялся несколько раз, а вместе с ним и художники. В первоначальной версии игры, созданной ещё в начале 2012 года, у персонажа не было рук и ног – он представлял собой обычный шар. Честно говоря, его форма ничем не оправдывалась, кроме разве что названия («Орботы» — это не сложная анаграмма слова «Роботы» и одновременно интересная игра слов «Orb» шар, и «Bot» робот). И поскольку в прошлой истории практически не было экшен-сцен, такой образ робота не вызывал никаких нареканий. Но теперь, согласно новому сценарию, главному герою приходилось много бегать и прыгать, и если бы оставили его в прежнем виде, это смотрелось бы очень сомнительно.
Поиск образа Орбота. Художник: Юрий Орлов
Перед нами встала довольно сложная задача – создать такого персонажа, основой которого бы являлся шар, чтобы оправдать название (мне показалось, что оно очень удачно звучит, и ужасно не хотелось его менять), и в то же время сделать его не похожим на остальных «круглых» персонажей. Впрочем, этого так и не получилось, поскольку главного героя до сих пор продолжают сравнивать в Майком Вазовски из Пиксаровской «Корпорации Монстров».
Итак, было принято решение сделать робота антропоморфным. Кроме того, главный герой, в отличие от первоначальной задумки, где робот изъяснялся синтезированным человеческим голосом, не мог говорить, поэтому нам было важно сделать максимально выразительный образ, чтобы все эмоции считывались через его мимику.
Поиск образа Орбота. Художник: Юрий Орлов
Как видите, в представленном концепт-арте этого сделать не удалось. Здесь он выглядит довольно громоздким и грозным, даже несмотря на свою улыбку. Кроме того, он не имеет ничего общего с шаром.
Довольно скоро было принято решение сделать робота в минималистичном стиле, без лишних деталей, которые к тому же добавили бы забот при моделировании. Поскольку робот является машиной, созданной человеком, он должен выглядеть как некий прибор. И чтобы подчеркнуть футуристичность, в качестве основного цвета художником был предложен белый цвет (в соответствии со стереотипами, все предметы будущего имеют скруглённые углы и белый цвет).
Поиск образа Орбота. Художник: Дмитрий Кононович
Поиск образа Орбота. Художник: Дмитрий Кононович
Поиск образа Орбота. Художник: Дмитрий Кононович
Однако лицо робота, предложенное в эскизах выше, не подошло. Дело в том, что будильник по задумке должен был передавать свои эмоции через циферблат посредством символов и чисел. И если бы мордочка главного героя также представляла собой экран со сменяющимся выражением лица, это было бы копированием одного и того же приёма, а шутка повторённая дважды теряет к себе интерес.
Белый цвет пошел на пользу главному герою – его образ быстрее считывался и легче воспринимался. По первоначальной задумке главного героя отправляли на металлолом из-за поношенного вида, а вовсе не из-за того, что он по случайности попал под машину и был отброшен в кузов грузовика, поэтому его текстура была очень ржавой. Некоторые люди из фокус группы даже примечали, что он больше похож на комок грязи с большим глазом посредине, чем на робота из будущего.
Разработка персонажа в 3D: мимика
Разработка персонажей в 3D
Разработка персонажей в 3D
Работа с окружением также принесла немало хлопот. В фильме не было явного антагониста – им был конвейер в целом. Он представлял собой нечто большое, нерушимое, с чем бессмысленно бороться. Мне было важно персонализировать все приборы, которые там находятся, чтобы внутри конвейера появилась своя жизнь. В частности, была придумана печь в виде устрашающей рожицы с огромными острыми дверцами-зубьями, которая переваривает несчастных роботов в робо-колу.
Разработка окружения. Печь. Художник: Екатерина Сударкина
Чтобы добиться устрашающего эффекта и ощущения ничтожности главного героя по сравнению с конвейером, мы намеренно неправдоподобно увеличили все механизмы в размере.
Если говорить о цвете в игре, то здесь преобладают синие тона. Вся картинка, за исключением разве что пролога, пропущена через синий фильтр, благодаря чему создаётся ощущение холода (что уж тут говорить, в фильме-игре нет ни единого органического существа, кроме слепого старика в прологе, который появляется на несколько секунд, но он не в счёт).
Разработка окружения. Город. Художник: Дмитрий Кононович
Разработка окружения. Город. Художник: Дмитрий Кононович
Разработка окружения. Город. Художник: Дмитрий Кононович
Разработка окружения. Город. Художник: Дмитрий Кононович
Кроме того, одним художником было предложено использовать на конвейерной ленте свет, бьющий снизу вверх – это могло добавить больше нагнетания обстановки.
Разработка окружения. Наброски конвейерной ленты. Художник: Elle Lansen
Разработка окружения. Наброски конвейерной ленты. Художник: Elle Lansen
В целом, думаю, что методом проб и ошибок нам всё-таки удалось добиться гармонии в изображении фильма.
МОДЕЛИРОВАНИЕ И ОПТИМИЗАЦИЯ

Моделирование персонажей и окружения стало ещё одной сложностью на пути к созданию игры. У меня было несколько человек, готовых помочь в моделировании, но все они оказывались скорее временными, нежели постоянными. Кроме того, выходило так, что нужные мне люди находились далеко от Москвы, и поэтому с ними приходилось вести удалённую работу. Что, конечно, сказывалось на результате, а вернее, на времени до этого результата. Так, давая моделеру очередное задание, я просто садился и ждал, поскольку без полученной модели я не мог продолжить работу, а моделер часто пролетал установленные сроки. Поняв, что таким образом я никогда не закончу свою работу, мне пришлось учиться моделированию параллельно. О чём, надо признать, я нисколько не жалею, ибо получил бесценный опыт.
Здесь стоит учесть один важный момент: моделирование для фильмов и моделирование для игр – принципиально разные вещи. И если я задумал сделать фильм-игру полностью на игровом движке, который само собой вносит определённые коррективы, мне нужно было прочувствовать различия между этими двумя методами на собственной шкуре.
Говоря более конкретно, в кинематографе модели могут иметь сколько угодно полигонов, потому что там всё рендерится в видеофайл, который затем воспроизводится с одной и той же частотой. А вот в игровой индустрии важен каждый полигон, поскольку там картинка рендерится в реальном времени, прямо в тот момент, когда мы её смотрим. Соответственно, чтобы достичь максимальной плавности воспроизведения, нужно грамотно распределять эти самые полигоны, ведь чем их больше в кадре, тем больше затрачивается оперативной и видеопамяти на их прорисовку. Таким образом, помимо всего прочего, здесь необходимо думать ещё и об оптимизации моделей и частиц в кадре, поэтому сделать красивую картинку в игре так, чтобы она при этом не тормозила – настоящее искусство!
Есть несколько хитрых приёмов, для того чтобы повысить качество изображения и при этом не потерять в скорости. Прежде всего, хочется отметить приём с наложением карты нормалей. В 3D-пакете создаётся некая высокодетализированная модель, в которой может быть любое число полигонов, а затем с неё снимается так называемая карта нормалей – текстура, содержащая информацию обо всех неровностях, расположенных на объекте. Далее создаётся вторая модель, аналогичная первой, но с урезанным количеством полигонов (обычно несколько тысяч), и на неё накладывается карта, которую мы сняли с первой модели. Таким образом, у нас выходит низкополигональная модель со всеми неровностями и деталями, присущими первой. Для создания качественных карт нормалей я использовал программу под названием CrazyBump.
Также стоит грамотно распределять свет в кадре. Каждый источник света создаёт дополнительные тени, отбрасываемые от объектов, и на прорисовку каждой тени также затрачивается определённое количество памяти. Поэтому локальные источники света желательно использовать только в случае крайней необходимости, а лучше и вовсе ограничиваться одним глобальным освещением, а светотени запекать в текстуры. Запекание теней – это еще одна хитрость, способствующая оптимизации игры. Говоря кратко, суть этого приёма в том, что тени накладываются на модель отдельной текстурой, а не симулируются в режиме реального времени. Это разительно увеличивает скорость просчёта в кадре. Но лучше использовать этот приём только для декораций и прочих маловажных объектов.
Анимация также влияет на просчёт – чем больше анимационных ключей, тем большая нагрузка идёт на память. Как выход – нужно стараться использовать минимальное количество ключей в анимации, либо просто воспользоваться опцией «reduce animation keyframes» при импорте в движок Unity.
И, разумеется, шейдеры. Шейдеры – это некие микропрограммы, обрабатывающие изображение для получения какого-либо эффекта. При создании графического изображения видеокарта компьютера получает информацию о вершинах, а дальше сама высчитывает цвет пикселей. Шейдеры позволяют задать и цвет пикселя, и положение вершин в экранном пространстве. Таким образом, благодаря шейдерам мы можем получить эффект прозрачного стекла или зеркала с отражениями, либо создать имитацию волосяного покрова на лысой поверхности. В моём случае помимо вышеперечисленных был применён так называемый туншейдинг («toon» — мультфильм, «shading» — затемнение) – шейдер, приводящий 3D-изображение к «мультяшному» стилю: утрирующий градиент и добавляющий характерный контур по граням объекта, из-за чего он начинает отдавать «комиксностью».
Демонстрация работы шейдеров на примере кадра из игры
Демонстрация работы шейдеров на примере кадра из игры
Логично предположить, что количество шейдеров в кадре также влияет на производительность, поэтому ими не стоит злоупотреблять.
Но вернёмся к моделям. В начале своего пути к диплому, я ничего не знал о тонкостях моделирования, и сразу же попался в капкан. Первая модель персонажа насчитывала в себе около ста тридцати тысяч полигонов – огромное количество для одной игровой модели! Понятно, что игра начинала подтормаживать, и мне пришлось задуматься об усечении полигонов.
Ранняя модель главного героя. Моделлер: Надин Морозова
Ранняя модель главного героя. Моделлер: Надин Морозова
Однако на деле оказалось легче сделать модель заново, чем так дотошно редактировать уже готовую. Для моделирования был использован пакет Autodesk 3Ds MAX 2013. Новая модель, сделанная с учётом всех ошибок, насчитывала всего около четырёх тысяч полигонов и была вполне пригодна для игры.
Низкополигональные модели роботов, выполненные в 3Ds MAX
После того как модели были созданы, их было необходимо раскрасить. Для покраски моделей я использовал очень мощный инструмент Autodesk Mudbox. Он позволял рисовать кистью прямо по модели, что серьёзно упрощало процесс создания качественных текстур.
Низкополигональные модели декораций
Низкополигональные модели декораций
Это также было в новинку для меня, но я довольно быстро освоился и добился не плохих результатов.

РИГГИНГ И АНИМАЦИЯ
После того как были созданы нужные персонажи, их надо было заставить двигаться. Для этого требовался риггинг. Риг – это термин в компьютерной анимации, который описывает набор зависимостей между управляющими и управляемыми элементами, созданный таким образом, чтобы управляющих элементов было меньше, чем управляемых. Его назначение – упростить манипуляцию большим количеством объектов.
Создав в 3Ds MAX стандартный скелет Biped, я подстроил его под мою модель и применил модификатор Skin, чтобы модель стала чем-то вроде кожи, нанизанной на этот скелет. Опять же, не имея опыта в этом занятии, поначалу я делал много глупостей, но благодаря документации и различным видеоурокам я постепенно начал совершенствовать свои навыки.
Что касается непосредственно анимации, то ею тоже пришлось заниматься мне. На ранних стадиях работы у меня была идея использовать для анимирования персонажей заготовленные motion capture движения, либо даже создать их самому, используя устройства kinect, которое позволяет распознавать движение тела и мимики в трёхмерном пространстве. Однако очень скоро я понял, что подобная технология обеспечивает слишком реалистичную анимацию, а моя история всё-таки стремится быть больше утрированной и мультяшной, чем с претензией на реальность. В конечном итоге я использовал motion capture лишь для нескольких движений в игре, а всю остальную часть сделал собственноручно в 3Ds MAX.

Построение анимации делилось на два типа: для так называемых «катсцен», когда зритель-игрок смотрит происходящее как фильм, и для самой игры, когда он может управлять персонажем. Первый тип походил на традиционное создание трёхмерной анимации – когда моделируется и анимируется вся сцена целиком, а потом вставляется в движок и проигрывается всего один раз. Второй тип – это короткий цикл анимации, который импортируется в Unity и зацикливается на программном уровне. Таким образом, мною было создано несколько коротких циклов анимации с разными движениями орбота (ходьба, бег, прыжок и т.п.), в среднем по тридцать кадров каждый, и уже внутри движка слепленные воедино. Благодаря скриптам, при нажатии определённой кнопки воспроизводилась нужная анимация, и мы могли управлять действиями персонажа так, как нам этого хотелось. Помимо зацикливания в Unity была опция так называемой «ping-pong» анимации – когда воспроизведение доходит до последнего ключа и не повторяется заново, а возвращается обратно, напоминая движение шарика в одноимённой игре. Этот способ анимации также был использован в моей работе.
Вот таких помощников по горло :)
Вот таких помощников по горло :)

СКРИПТИНГ

Одна из важнейших особенностей, которая отличает создание видеоигры от создания кинофильма это, конечно же, программирование. И в «Орботах» его огромное количество.
Прошлая версия игры, которая делалась мною на четвёртом курсе, была также построена на движке Unity, и за то время я успел немного освоить язык скриптов, поэтому при создании диплома я чувствовал себя гораздо свободнее. Признаюсь, в самом начале стоял выбор между тремя движками: CryEngine, Unreal Development Kit и Unity. Первые два обещали несравненную графику и хорошую оптимизацию, но также требовали больших познаний в программировании. На Unity же существовало много специализированных плагинов, сильно упрощающих работу со скриптами. В частности Playmaker, который приглянулся мне своей простотой – с помощью него в игре написано по меньшей мере 70% программного кода.
Событийный ряд в «Орботах» строился в основном через так называемые триггеры. Триггер – это некая система, обладающая способностью длительно находится в одном из двух устойчивых состояний и чередовать их под воздействием внешних сигналов. Говоря проще, в играх – это определённый участок на уровне, не видимый глазу, который, при вхождении в него того или иного объекта, вызывает запрограммированное действие. Например, у нас есть Орбот, который бежит по конвейерной ленте. Впереди него находится пресс, который отыгрывает зацикленную анимацию – поднимается и опускается. К дну этого пресса прицеплен триггер, который мы не видим, но если персонаж коснётся его, то срабатывает программа, которая сообщает игроку о смерти героя и запускает игровой уровень заново.
Но помимо препятствий я использовал триггеры и для управления камерой, чтобы сделать картинку более живой. Во втором уровне, где Орбот с будильником под рукой бежит от огромной катящейся бочки камера закреплена на одном месте, и мы не можем управлять ею так, как это было реализовано в первом уровне. Поскольку монтаж в этом эпизоде исключён как таковой (иначе бы игрок не смог должным образом сосредоточиться), и вся сцена разворачивается в одном кадре, я решил сыграть на внутрикадровом монтаже. На протяжении всего уровня было разбросано множество триггеров, при соприкосновении с которыми срабатывала анимация отъезда, наезда или какого-нибудь ракурса камеры. В «Орботах» есть хороший пример в моменте, когда робот оказывается перед тремя большими прессами. Здесь камера разворачивается в профиль и срабатывает скрипт, который переключает управление персонажем из полноценного 3D, в псевдо-2D, вследствие чего он может двигаться только в двух плоскостях. Это добавляет живости геймплею и делает игру менее однообразной.
Я старался максимально разнообразить геймплей. Каждый уровень, который мы наблюдаем, отличается как по своей конструкции, так и по управлению: в первом уровне мы свободно крутим камеру и катаемся верхом на движущихся платформах; во втором уровне мы бежим, преследуемые огромной бочкой, и не можем остановиться, иначе наступит незамедлительная смерть героя, а в третьем уровне (который пришлось убрать из-за большого экранного времени) персонаж должен был падать вниз, а мы должны были управлять его падением и следить, чтобы он не разбился.
Но вернёмся к разговору о системе триггеров. По этому же принципу построена работа звука в игре. Пожалуй, первый бросающийся в глаза пример – стекло. При столкновении с ним срабатывает триггер, который воспроизводит звук бьющегося стекла, а само стекло, благодаря встроенному физическому движку, разбивается на части (что любопытно, осколки генерируются произвольно, то есть программа сама рассчитывает площадь и количество осколков в зависимости от силы удара). Уровень звука симулируется в трёхмерном пространстве – если объект отдаляется, то звук отдаляется вместе с ним. Также можно настроить реверберацию в зависимости от типа помещения. Это добавляет реализма происходящему.
Подводя итог, работа со скриптами была изнурительной и неблагодарной, но тем не менее принесла бесценный опыт.

ВОТ И ВСЁ

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

Кадр из игры
Кадр из игрыКадр из игрыКадр из игры
Кадр из игры
+6
1
1695
  • 4 комментария

    avatar
    Очень понравился рассказ.
    Хотелось бы поиграть в данную игру

    От себя
    Только, думаю, больше подходит под тему «История одного проекта», а не «Как я стал разработчиком игр». Это моё личное мнение
    avatar
    Меня все мучает вопрос. А что стало с дедушкой, которого переводил роботот через дорогу, когда того сбила машина?

    Спойлер
    Только, думаю, больше подходит под тему «История одного проекта», а не «Как я стал разработчиком игр». Это моё личное мнение
    Поддерживаю
    avatar
    Ну, благодаря этому одному проекту я и стал разработчиком, так что думаю история уместна :)
    По поводу дедушки — не переживайте, он по инерции пошёл вперёд и таки благополучно перешёл на другую сторону :)
    avatar
    Только я вижу сходство?!



    Любовь к неодушевлённому предмету
    Чтобы оставить комментарий необходимо .