/dev: призывая дракона ЧМ
Как мы превратили "Птичье гнездо" в драконье логово.
Мы всегда стремились сделать каждый Чемпионат мира захватывающим и запоминающимся событием, однако в 2017 году нам захотелось проверить, сможем ли мы зайти еще дальше. Во время подготовки к церемонии открытия финала мы собрали команду, чтобы воплотить в реальность заветную мечту всех гиков: призвать дракона.
Из League of Legends в жизнь
Планируя глобальные соревнования, мы никогда не упускаем возможность отдать дань уважения стране, в которой будет проводиться турнир. В этом году ЧМ проходил в Пекине, поэтому стало просто необходимо включить в программу элементы китайской культуры. Мы готовили церемонию открытия с февраля 2017 года, и за это время у нас появились маски пекинской оперы в форме лиц чемпионов LoL, игра на музыкальном инструменте эрху, выступление Джея Чоу, а также песня “Legends Never Die” в исполнении группы Against the Current. Но не хватало чего-то особенного – такого, что подчеркнуло бы размах и масштаб пекинского стадиона.
В поисках этого последнего штриха мы устроили настоящий мозговой штурм, и наш выбор пал на технологию дополненной реальности – искусство введения графических элементов в окружающий нас реальный мир. Дополненная реальность создается с помощью настоящей камеры, контролирующей виртуальную через движок визуализации. При этом изображения накладываются друг на друга и зрителю кажется, что иллюзия стала реальностью. Эта технология не в новинку для спорта – ее уже использовали в традиционных международных соревнованиях и даже в киберспорте, например на турнире The International по Dota 2. Мы и сами применяли ее на турнирах NA LCS, MSI и ЧМ – однако нам хотелось создать нечто более грандиозное.
Одними из первых идей для церемонии открытия стали сцены с Райзом, атакующим магией все вокруг, и с Эш, выпускающей стрелы прямо из проекционного экрана. Еще была одна шутка, которую мы повторяли годами: “Пусть прилетит дракон и сядет где-нибудь на сцене”. Тогда у нас не было портала на Рунтерру, чтобы призвать настоящего дракона (еще не вечер!), а на момент появления шутки не существовало и доступной технологии, которая позволила бы убедительно изобразить парящего над стадионом дракона. Наконец, к 2017 году технология дополненной реальности достигла такого высокого уровня, что мы решили ее и опробовать. Мы собрали команду безумных гениев в области компьютерных технологий и инноваций и задали им вопрос: “Можем ли мы создать дракона?”
За последние годы дополненная реальность показала отличные результаты на телевидении, однако мы все-таки переживали, что с ее помощью нельзя создать реалистичного дракона. Вот с какими трудностями нам предстояло столкнуться.
- Как заставить дракона пролететь над “Птичьим гнездом” и сесть на краю сцены?
- Как добиться того, чтобы дракон реалистично отбрасывал тень не только на сцену, но и на стены самого стадиона?
- Сможем ли мы в день церемонии скорректировать освещение, чтобы оно гармонично сочеталось с погодой?
- В какой момент появление дракона окажется наиболее эффектным?
Драконы не во сне, а наяву
Нам хотелось, чтобы в небе над Пекином появилось существо, вызывающее трепет и восхищение, а ведь самый могущественный и грозный монстр в League of Legends – это как раз Старший дракон.
Заручившись поддержкой своих партнеров, мы набросали совершенно новые эскизы для особой модели и анимации Старшего дракона. Мы рассматривали множество различных идей, однако при взгляде на эскизы нам стало ясно, что нет более захватывающей концепции, чем та, которая бы сделала и без того эпичный образ самого грозного зверя Ущелья еще круче. Мы решили во что бы то ни стало сохранить его узнаваемость, чтобы игроки сразу же увидели в парящем над сценой монстре своего дружелюбного соседа – Старшего дракона.
Пытаясь не прогадать с новым более реалистичным образом дракона, мы изучили каждую деталь этого зверя и разглядели его буквально с ног до головы, не забыв даже о крыльях.
Перебрав множество версий каждой из этих деталей, мы подготовили финальный эскиз.
Когда эскиз был готов, мы перешли к трехмерной графике. Обычно мы используем предварительно отрендеренные анимации, однако в этом случае наши задачи не ограничивались качественной детализацией модели – нужно было сделать так, чтобы она могла корректно отображаться в реальном времени.
Что такое рендеринг в реальном времени?
Рендеринг в реальном времени дает возможность создавать анимацию практически мгновенно. С предварительно отрендеренными анимациями на создание 10-секундной сцены может уйти несколько часов (например, в фильме “История игрушек 3” обработка одного кадра занимала в среднем 7 часов). Даже если вы никогда не слышали о рендеринге в реальном времени, вы, скорее всего, уже с ним знакомы: именно так ваша графическая карта воспроизводит изображение в играх.
В нашем случае такая технология была необходима, чтобы камеры могли вести съемку церемонии под любым углом. Поэтому нам приходилось следить за числом полигонов и вершин, которые использовались для создания модели дракона, – только так мы сумели избежать задержек в прямом эфире и ошибок отображения. Точно так же мы стараемся не переборщить с полигонами и во время работы над игрой: всегда очень важно сохранить баланс между качеством и производительностью.
Вот как шла работа над моделью:
Другая команда в этот же самый момент работала над анимацией полета дракона. В поисках вдохновения мы обратились к нашим любимым произведениям о драконах, в том числе фильму “Сердце дракона” и сериалу “Игра престолов”. Нам хотелось понять, как повел бы себя дракон, если бы оказался в “Птичьем гнезде”. Как бы он пролетел над стадионом? Как бы приземлился? Как бы отреагировал на людей внизу?
Наша первая анимационная концепция выглядела так: Старший дракон парил над стадионом с Кубком призывателей в лапах и приземлялся, чтобы поставить его на сцену. В конце концов мы отказались от этой идеи в пользу 16-метрового надувного кубка, который бы поднимался из земли одновременно с появлением дракона. Кроме того, настоящий Кубок призывателей даже дракону не поднять.
Мы пробовали разместить Старшего дракона в нескольких местах и даже заставить его взаимодействовать с артистами – например пытались обставить все так, будто танцоры убегают в страхе или прижиматься к земле. В конце концов мы пришли к следующему выводу: если бы дракон был настоящим, то при виде тысяч людей ему бы захотелось убедить окружающих, что главный здесь он. Это же Старший дракон, поэтому расположить его прямо в центре стадиона и у всех на виду стало для нас единственным решением.
Когда работа над анимацией была в самом разгаре, мы столкнулись с очередной проблемой: дракон оказался широковат в кости. Дело в том, что во время приземления его крылья проходили сквозь декорации стадиона, полностью разрушая иллюзию. Кроме того, нельзя было разглядеть его тень, а она для большей реалистичности должна была падать прямо на зрителей (вообще это имитация тени дракона, которая проектировалась на определенную часть аудитории). Мы планировали слегка уменьшить размер модели, но в итоге выбрали другой вариант, на котором бы остановился и сам дракон: изменили траекторию его полета. Мы скорректировали его приземление таким образом, чтобы тень падала верно, а сам дракоша не касался стен стадиона.
Хекстек в реальном времени
Затем мы определились со списком условий, необходимых для воспроизведения плавной анимации и поддержания качества, которого мы изначально пытались добиться.
- Анимация в реальном времени должна быть синхронизирована с частотой кадров трансляции (59,94fps).
- Дракон должен отбрасывать мягкие тени на геометрические объекты, сопоставимые по габаритам с “Птичьим гнездом”.
- Необходимо создать трехмерную маску, чтобы дракон мог появиться позади стадиона в момент прибытия и завершающей части полета, а также позади игроков в момент приземления.
- Освещение сцены должно соответствовать свету вокруг, а также в реальном времени регулироваться на случай изменений погодных условий.
- Необходимо создать возможность для оперативной цветовой коррекции модели дракона, чтобы параметры яркости и контраста изображения были синхронизированы с камерами.
- Необходимо использовать две подвижные камеры и подключить к ним по движку визуализации.
- Необходимо создать возможность для воспроизведения анимации двумя движками одновременно, чтобы синхронизировать изображения в момент переключения между камерами.
- Анимацию нужно запустить в строго определенный момент, чтобы она идеально ложилась на музыку.
- Необходимо спланировать положение и работу камер, чтобы операторы смогли вести съемку сцены с выгодного ракурса.
Мы хотели убедиться в том, что все перечисленное выше у нас получится, поэтому собрали необходимое оборудование и призвали Старшего дракона на свою парковку. Вот запись проверки, от которой у нас захватило дух (уж простите за грязный объектив).
Уже на стадионе в Пекине нам предстояло всего за неделю подготовить оборудование, убедиться в стабильности сетевого соединения для корректной синхронизации камер, проверить работу звука, отрепетировать воспроизведение анимации, а самое главное – проследить за тем, чтобы во время трансляции дракон выглядел идеально. В дополнение к этому мы должны были проделать стандартную для ЧМ организационную работу.
Всего мы репетировали выступление с танцорами и драконом шесть или семь раз. Во время этих репетиций нам удалось выяснить, что только идеальная слаженность в работе с камерами и артистами позволит избежать случаев, когда дракон ненароком кого-нибудь раздавит (ему не привыкать, но несолидно как-то). Танцоры оттачивали свои движения неделями, поэтому любые изменения с нашей стороны могли запросто устроить на сцене хаос.
Мы решили скрыть раздавленных артистов с помощью грамотного приближения камер:
Все кадры, которые вы видите, были сделаны обычным оператором. Мы воспроизводили полет дракона бесчисленное множество раз, чтобы наши операторы смогли найти идеальное положение для начала съемки, выучили порядок действий и точно знали, когда следует приближать камеру к дракону. Нам хотелось, чтобы съемка не выглядела постановочной, а при просмотре видео казалось, что дракон застал операторов врасплох.
Вот как один из операторов выглядел в тот момент, когда снимал полет дракона над зрителями.
За десять минут до начала трансляции мы заметили, что позиция маски дракона немного сместилась (приземление дракона выглядело так, словно он садился где-то внутри сцены, а не на самом краю). К сбою могло привести множество причин, включая даже такие незначительные, как случайно сдвинутый на пару сантиметров штатив камеры (например, из-за вибрации). До начала выступления оставались минуты, и нам пришлось загрузить приложение для редактирования графики и немного приподнять дракона. Заодно мы скорректировали его цвет, чтобы он больше соответствовал текущему на тот момент освещению стадиона. И вот наконец пришло время выпустить нашего Старшего дракона на волю.
Громкое удивление зрителей в тот самый момент, когда дракон спикировал с крыши, заставило нас содрогнуться. Именно такой реакции игроков мы и ждали. Мы сделаем все, чтобы от нашей работы у вас и дальше оставались только самые приятные впечатления, которыми можно поделиться с семьей и друзьями. Мы не сойдем с этого пути, и в будущем вас обязательно ждет нечто столь же великолепное. А пока эксперименты Riot Games еще не увенчались успехом и наши домашние змеи не произвели на свет живого малыша-Барона, мы будем ставить себе все более амбициозные цели, чтобы в очередной раз вывести Чемпионат мира на более грандиозный уровень, а также отблагодарить вас за ежедневный вклад в развитие и процветание этого сообщества.