Драконье Стекло или рассказ о игровом редакторе Larian Studios

в 15:05, , рубрики: .net, C#, c++, Gamedev, larian studios, wpf, Блог компании Larian Studios, никто не читает теги, разработка игр

larian_dublin_logo Привет! Это снова Larian Studios. Уф, у нас прошёл релиз, и теперь наконец-то появилось время продолжить делиться с вами нашим опытом и наработками.

Сегодня я расскажу о самом главном инструменте, с помощью которого родилось уже 4 проекта — о кофемашине внутреннем редакторе игры. Редактор доступен в ограниченном (для моддеров и игроков) виде в Steam/GoG, поэтому каждый, кто приобрел игру, может скачать его и попробовать бесплатно.

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

Ну и еще расскажу, чем занимаются Tools Programmer в нашей студии.

«Человек есть животное, владеющее инструментами. Нигде вы не найдете человека без его инструментов. Без них он ничто, с ними всё.»
Томас Карлейль

«The Divinity Engine Toolset» (или как мы его называем, «Glasses») — это внутренний инструмент, игровой редактор, используемый Larian для создания своих игр. Его история началась с «Dragon Commander» и продолжается на протяжении уже 6 лет. Состоящий из большого количества компонентов, он объединяет в себе инструменты как для геймдизайнеров, левелдизайнеров, скриптеров, так и для аниматоров и художников. Наш редактор — это постоянно меняющийся и растущий организм, который постоянно адаптируется под новый стек технологий и список требований каждого отдела студии, поэтому основное его свойство — это модульность и легкость в подключении новых plugin'ов.

А что лежит в основе?

Все наши игры написаны с использованием C++, и Glasses является дополнительной надстройкой над игрой, что позволяет нам повторно использовать функционал движка для реализации необходимых задач. Таким образом, например, пользователи редактора могут играть в игру, не выходя из него и не запуская еще один процесс, что сильно облегчает тестирование квестов, атмосфер и боевых сцен.

Изначально игровой редактор был написан с использованием WinForms, поэтому связующим звеном между инструментарием и игрой является C++/CLI прослойка, которая позволяет транслировать структуры данных из игры в редактор и vice versa. Разумеется, одним WinForms сыт не будешь, поэтому так же используются сторонние фреймворки, как например ScintillaNet для редактора скриптов.

WinForms? Ой-ой..

И правда, но это было раньше. Сейчас редактор удачно мигрировал на WPF, и, благодаря модульной архитектуре, производить переход можно было «на лету», т.е. вводить новые фичи и плагины уже на WPF с возможностью обращения к старым окнам и опциям на WinForms. Надо отметить, что WPF довольно сильно сократил время разработки новых контроллов и окон, а так же позволил повысить общее качество интерфейса редактора.

Драконье Стекло или рассказ о игровом редакторе Larian Studios - 2

Одно кольцо, чтоб править всеми

В любом большом проекте рано или поздно участники начинают использовать систему контроля версий. Кто-то копирует на флешки, кто-то использует git, мы в Larian используем perforce (p4). И если использование p4 программистами сложностей не вызывает — все довольно легко интегрируется в среды разработки, то с остальными отделами все может быть сложнее. Отсутствие информации о статусе файлов в системе контроля версий вынуждает дизайнеров, художников ставить дополнительные инструменты и усложнять процесс создания контента («перед началом работы надо обязательно сделать check out, иначе файл может быть read-only» и т.д.). Поэтому интеграция системы контроля версии в игровой редактор — это задача, решающая очень много проблем разом. Основная идея: «чем меньше художник, дизайнер думает о сторонних факторах, aka порядок выгрузки файлов или добавление новых файлов в систему контроля версий», тем больше у него времени на свои настоящие задачи. Вроде бы просто, но в то же время очень сильно повышает эффективность.

Следуя выше описанной идее, мы стараемся сократить количество сторонних инструментов, используемых нашими сотрудниками, вынося всю функциональность в виде плагинов к редактору. Вот еще один пример: изначально вся «математика» и данные игры (как часто будет выпадать это оружие, сколько урона наносит этот fireball, сколько жизней у этого стражника) находились в уютных таблицах excel, которые с помощью VB скриптов экспортировали данные в виде текстовых файлов в необходимом для игры формате. Это довольно быстрое и простое решение работало до момента, пока количество людей, работающих над игровыми данным, не выросло до такой степени, что нескольким людям потребовалось постоянно работать в одном файле, мерджить (merge) excel таблицы — задача не очень тривиальная, а вариант наложить ограничение «один человек — один файл» создает эффект бутылочного горлышка, и разработка сильно замедляется. Что же делать? Так появился Stats Editor — недавно сделанный плагин, который позволяет не только работать непосредственно с необходимым текстовым файлом напрямую с помощью нашего UI, но и так же совершать проверку вводимых данных, позволяя избежать многих часов дебага из-за одного неправильно поставленного значения.

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

All Spark

Также помимо небольших плагинов мы смогли полностью интегрировать довольно большие программы и сторонние редакторы. Например, VFX-редактор. Изначально VFX-художники пользовались отдельным инструментом, но команда программистов смогла полностью перенести его функциональность в редактор, позволив художникам редактировать и создавать эффекты прямо в игре. Позволяя объединять различные анимированные эффекты, регулируя и модернизируя их, пользователь может создавать огромное количество визуальной «магии», начиная от заклинаний, навыков и заканчивая эффектами окружающей среды и даже работой с камерой. Я бы с удовольствием рассказал об этом подробнее, но это скорее тема для отдельной статьи.

Драконье Стекло или рассказ о игровом редакторе Larian Studios - 3

Моддинг

Glasses — это редактор позволяющий создавать модификации к вышедшей игре. Что происходит, когда ты даешь игровой редактор игрокам? Реальным становиться всё, что казалось сложным или невозможным. Энтузиазм моддеров и игроков в желании создавать крутые вещи очень силен, и поэтому одной из наших задач было сделать редактор максимально доступным самой широкой аудитории. Потому что чем проще инструмент, тем больше появится дополнительного контента, а это очень сильно увеличивает цикл жизни игры. Все это приводит команду разработчиков к принятию важных архитектурных решений, которые позволяют добавлять, удалять и перезаписывать контент без ущерба для игры и текущего прогресса. В нашем случае это решение заключалось в разбитии игровых сущностей на «аддоны» и «проекты/приключения».

Если конкретнее, то обе сущности представляют собой набор данных (предметы, модели и скрипты), которые игрок может подключить к своей игре.

Драконье Стекло или рассказ о игровом редакторе Larian Studios - 4

Аддоны представляют собой «data packs» (паки контента), т.е. независимый набор моделей уровней, который любой игрок может подключить куда угодно. Наш опыт показывает, что если огромные пользовательские приключения добавляют очень много в игре, то небольшие модификации позволяют людям быстрее и проще экспериментировать с игровой логикой, подключая и отключая необходимые в нашем случае аддоны. Например, если игрок хочет добавить в игру больше различного оружия (и это не привязано к истории основной игры), или добавить цепочку новых квестов, для этого ему совершенно не нужно создавать большой проект, а достаточно все упаковать в небольшой независимый файл, который игроки по своему усмотрению смогут включать и передавать, не боясь, что их сохранения сломаются. Одним из примеров аддонов так же может быть набор уровней для режима «Гейм Мастера», где аддон — это фактически добавление нового контента, на основе которого игрок с ролью «гейм мастера» сможет создавать свои собственные истории.

Приключения. Если пользователь хочет сделать что-то огромное, с историей, с пересекающимися квестами и независимое от основной игры, — то этот тип модификаций как раз для него. Тут надо будет и работать со скриптами, и заниматься левел-дизайном и прочими крутыми штукам, которыми занимаются сотрудники Larian Studios для создания своей игры.

А что еще есть?

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

  • Инструмент «Genome» для созданий анимаций, эффектов animation blending и т.д.
  • Редактор для игровых скриптов.
  • Конечно же инструментарий для создания уровней, и их редактирования. Работа с terrain, атмосферами, декорированием уровней и т.д.
  • Возможности редактирования mesh'ей персонажей и создания целых наборов визуальных элементов для каждого вида существ; например, если хочется, чтобы один и тот же предмет по разному смотрелся на существах различного строения (нам не хотелось, чтобы один и тот же элемент снаряжения выглядел одинаково на эльфах, людях и гномах).
    Драконье Стекло или рассказ о игровом редакторе Larian Studios - 5

  • Инструмент для работы с локализацией.
  • Редактор диалогов.
  • Дополнительная визуализация. Разные триггеры, коллайдеры разной формы и типов должны быть визуально понятны и видны работающему с ними пользователю, поэтому запуск игры в редакторе позволяет увидеть их точное расположение и форму — так гораздо легче, например, контролировать игровую атмосферу в зависимости от передвижения игрока по уровню.
  • Редактор освещения. Мы используем PBR (physically based rendering) для создание реалистичного света. Для этого мы используем light probes и рассказ о их логике и генерации —
    это точно отдельная статья.
  • Функциональность, позволяющая создавать и редактировать AI шаблоны, и AI сетку, помогающая combat designers создавать интересные сражения.
  • Мощный редактор материалов.
    Драконье Стекло или рассказ о игровом редакторе Larian Studios - 6

А что-то говорили про Tools Programmer?

Вокруг этой позиции витает очень много неясных ассоциаций и одна из них утверждает, что «Tool Programmer не делает игру, а делает инструментарий для сотрудников компании и не имеет большого отношения к разрабатываемой игре». Этакий «программист на реализацию хотелок художников и дизайнеров».

Это совсем не так. Кто и делает игру — так это Tools Programmer. Постоянно маневрируя между двумя архитектурно разными проектами (игра и редактор), разработчик редактора является практически единственным в компании человеком, который всегда держит руку на пульсе каждой новой фичи в игре, будь то gameplay фича или новое дизайнерское решение. Интеграция новых технологий, инструментов и сторонних решений выполняется исключительно только Tools Programmer, потому что только он знает, как добавить ту или иную функциональность в доступном для людей не технического склада ума виде. Зачастую когда Gameplay и Engine разработчики замкнуты в своих собственных текущих задачах, именно Tools Programmer'у надо решать архитектурные вопросы, которые установят и наладят процесс разработки во всех частях студии на несколько лет вперёд.

Сейчас у нас в команде 5 программистов, занимающихся непосредственно разработкой The Divinity Engine Toolset. И нам мало! Так что если вдруг у вас есть желание помочь нам и поучаствовать в разработке очень крутого движка — пишите и приходите к нам =)

Автор: Артём Титов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js