Игровой движок Banshee. Интервью с разработчиком

Игровой разработчик, который пробует писать игровой движок довольно частое явление. Абсолютно разные по функционалу и сложности. Я даже встречал где-то фразу, что “игровой программист, не писавший собственный игровой движок — не выглядит хорошим и увлеченным специалистом”. И в большинстве своем все мы (программисты) пробовали писать небольшие движки.

Но сегодня, я хотел бы познакомить Вас с особенным парнем. Марко Пинтера — разработчик игрового движка Banshee. Марко многие годы в одиночку разрабатывает большой движок, с отличным редактором и системой рендеринга. Я написал ему в линкедин и он согласился немного рассказать о себе и своем движке.

*original interview in English, исходный код Banshee github repository

> Привет, Марко, расскажи о себе. Сколько тебе лет? Откуда ты? Где учился?
Меня зовут Марко, мне 30 лет, я игровой разработчик из Хорватии. У меня диплом по специальности программное обеспечение факультета организации и информатики в Хорватии. В основном, если говорить о разработке игр — я самоучка. Программирование было моей страстью с малых лет. А программирование игр — особенно привлекало своей сложностью.

Помимо программирования в свободное время я люблю играть в видео-игры, больше всего люблю story-based и RPG. Еще я интересуюсь психологией, с целью лучшего понимания того как работает мозг. Чтобы улучшить обучаемость, качество работы и в целом повысить свою продуктивность.

> Чем ты занимался до Banshee?
Во время моего обучения, я работал над различными игровыми проектами как хобби. В конце концов один из этих проектов привлек внимание разработчика игр в США, который предложил мне работу. Это был мой первый шаг в развитие профессиональной игры. Я проработал там около трех лет, после чего они решили расшириться, и я получил должность лидера в собственной студии. Мы работали в основном над маленькими и средними 3D-играми Unity.

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

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

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

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

Примерно через год я переписал большую часть кода, оставил некоторые barebone-системы и решил построить движок с нуля.

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

> Как долго ты работаешь над своим игровым движком?
Прошло пять лет с тех пор, как я написал первую строку кода. Последние два из этих пяти лет были связаны с работой на полную ставку, а раньше мне приходилось совмещать время на разработку Banshee с работой, что было не очень удобно.

> Каким образом появилось название для твоего игрового движка? Почему “Banshee”?
Слово Бан-ши, звучит цепляюще, как мне кажется, никакого особого значения нет. Так же никакого software-тайтла с таким именем не было, что позволило мне сделать сайт, который легко будет находиться в поисковиках.

> Есть ли сейчас какие-то игры сделанный на Banshee?
На Banshee пока нет выпущенных игр, но есть парочка. Они находятся на очень раннем этапе развития. Движок по-прежнему нестабилен, и код часто меняется, что затрудняет разработку. Бета первой стабильной версии будет выпущена позднее в этом году. Она, по большей части, будет использоваться в продакшне.

> Ты ведешь работы над Banshee в одиночку?
Я работаю один, мне изредка помогают несколько ребят-контрибьюторов.

> Как ты концентрируешься на работе?
Стараюсь держать несколько задач in-progress. Если фокус с одной задачи утекает, то я переключаюсь на другую более интересную. Если вообще ничего не получается — большая доза черного кофе.

> Вдохновлялся ли ты Unity и другими игровыми движками?
Unity была огромным источником вдохновения, особенно в плане простоты использования, расширяемости редактора и быстрого времени итераций разработки. Это то, что я определенно хочу отразить в редакторе Banshee и API-интерфейсе своей системы скриптов. Но во многих отношениях я также чувствовал, что Unity слишком ограничивает ее закрытость. Banshee, с другой стороны, полностью открытый и построенный с акцентом на расширяемость игровой движок. В сочетании с полным API C++ и модульной конструкцией он даст Вам абсолютную свободу делать то, что Вы пожелаете.

Unreal & Frostbite были моим вдохновением, они являются примером в технологиях рендеринга и высокой производительности. Оба эти факторы очень важны в развитии Banshee.

> Какая у тебя цель с Banshee? Какие планы и задачи?
Есть две основные цели:
1. Создать игровой движок, с интуитивно понятным и простым в использовании редактором и скриптовым API, с возможностью быстрой итеративной разработки, основанным на высокопроизводительном многопоточном ядре. Все это позволит создавать на этом движке большие игровые тайтлы с ультрасовременной графикой.

2. Обеспечить чтобы Banshee имела высококачественную, хорошо продуманную, чистую и документированную кодовую базу, которую легко понять и модифицировать. Это обеспечит совершенствование движка, как мной, так и open source сообществом.

Что касается текущего положения, то сейчас Banshee находится на финишной прямой. Вскоре будет v1.0 BETA. Осталось закончить рендеринг, порт для Linux и Mac, за которым последует тестирование и полишинг.

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

> Есть ли у проекта какие-то спонсоры?
Нет, никаких спонсоров. Только мои накопления.

> Репозиторий Banshee на github’е наверняка выглядит как отличное портфолио. Большие студии наверняка пытались нанять тебя?
Мне писали из известных студии с момента когда я выложил Banshee на github. Это очень лестно, в общем-то это именно то о чем я мог мечтать еще в студенческие годы, но моя работа над Banshee для меня сейчас приоритетнее.

> Расскажи о части твоего игрового движка, которой ты больше всего гордишься
Очевидно, я субъективен, но мне просто очень нравится общий дизайн Banshee. Я чувствую, что код очень чистый и аккуратный, я нахожу его легким в навигации, и даже когда мне нужно внести серьезные изменения, в конечном итоге это относительно легко сделать. Я нахожу именно этот фактор невероятно важным, потому что это означает, что я могу продолжать совершенствовать его, не переживая за то, что он превратится в запутанную, беспорядочную массу, в которую в превращаются многие игровые движки.

Игровой движок Banshee. Скриншот PBR

> Опиши, пожалуйста, фичи системы рендеринга. Какие идеи и подходы лежат в ее основе?
Система рендеринга — это то, над чем я сейчас работаю, и ежедневно вношу улучшения. Это гибридный tiled deferred/clustered forward рендерер, поддерживающий PBS с помощью BRDF Кука-Торранса (Cook-Torrance BRDF).

Система рендеринга поддерживает HDR, гамма-коррекцию, tonemapping с настраиваемой характеристической кривой, баланс белого, экспозицию и цветокоррекцию.

Она так же поддерживает image based освещение в форме HDRI, а также reflection probes — поддерживается как предварительно фильтрованное излучение для зеркальных отражений, так и освещение для непрямого диффузного освещения. Так же поддерживаются area-lights, мягкие тени, SSR и различные пост-эффекты.

Все это выполняется на низкоуровневом API рендеринга Banshee, который может прозрачно переключаться между бэкендами DirectX 11, OpenGL 4.5 или Vulkan. Рендеринг работает в собственном потоке и поддерживает списки команд для более дробной многопоточности.

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

> Порекомендуй, пожалуйста, книги по теме программирования графики, C++, архитектуры игровых движков и тп :)?
Моя самая любимая книга это Physically Based Rendering by Matt Pharr and Greg Humphreys. Книга даже выиграла «Оскар», заслуженно! Она предлагает невероятно подробное представление о современной теории рендеринга и примеры кода в ней очень хорошие!

Еще рекомендую Professional C++ Marc Gregoire, Real Time Rendering by Tomas Akenine-Moller (я рекомендовал некоторые из них в статье Для начинающих Unity3d программистов, Eric Haines and Naty Hoffman, и наконец, Game Engine Architecture by Jason Gregory.

Большое спасибо за интервью, Марко! Русское Геймдев сообщество желает тебе терпения и удачи с Banshee, пусть все получится!

Ребята, без вашей помощи блогу не обойтись, sharing особенно в Google+ очень нужен! Пошарьте, если Вам понравилась статья.