Interview with Banshee Game Engine Programmer Marko Pintera

Interview with Banshee Game Engine Programmer Marko Pintera

The programmer who tries to write his little own game engines isn’t a rare thing in game development industry. These own engines can be absolutely different according to their functions and complexity. I have even come across the phrase which sounds like: “a game programmer who has never tried to write his own engine isn’t a real specialist who is involved and interested in programming”. In the majority of cases we all, programmers, have tried to write our own little engines.

But today I would like to introduce you a special guy – Marko Pintera is a developer of game engine Banshee. He has been developing his engine with a stunning editor and rendering system for many years. I wrote him in linkedin and he agreed to tell a little bit about himself and his engine.

> Hi, Marko. Could you, please, tell more about yourself ? How old are you? Where are you from? Where did you graduate from?
I’m Marko, 30 year old game developer from Croatia. I have a master’s degree in software engineering from Faculty of Organization and Informatics in Croatia, but I’m primarily self taught when it comes to game development. Programming has been a passion since a very early age, and game development in particular interested me because of its inherent complexity.

Aside from programming in my spare time I enjoy playing games, especially story based and role-playing ones. As a layman I’m also very interested in psychology, especially for purposes of understanding the brain better to improve learning, quality of work and in general being able to more efficiently utilize the mind, primarily for the purpose of improving productivity.

> What did you do before Banshee?
In the early years, during my education, I worked on a variety of smaller game technologies and game projects as hobbies. Eventually one of those projects caught the attention of a US game developer who offered me a position to work for them. This was my first foray into professional game development. I worked there for about three years, after which they decided to expand and I was given leadership of my own branch of the studio. We worked primarily on small and medium sized Unity 3D games.

My interest had always been working on larger more complex titles, as well as being involved in developing technology on a much lower level, which sadly wasn’t part of my job description. I spent most of my time there saving up so I can eventually focus on my own projects. After 2 years running the branch I decided to leave the company to a colleague, and focus solely on development of the Banshee engine.

> How did you come up with an idea to write your own game engine?
The complexity of a game engine always fascinated me, ever since I first stumbled upon the DirectX SDK back in the day, and wrote my first graphical application. I continually worked on bits and pieces of what would have been parts of a game engine, but they never formed a whole. I decided I wanted to build something more complete, partly because I wanted to learn every intricacy of engine development, and partly because I wanted a good framework to base my own games on.

When the project first started I had no intention on making into a massive project as it evolved into today. Initially it grew out of the Ogre engine, as my intention was just to build an editor on top of Ogre, add a few systems like scripting, physics and audio and move on from there. After about a year I scratched most of the code, left some barebone systems and decided to build it from the ground up instead.

As time went on I became very familiar of what worked and what didn’t, I spent a lot of time analyzing other engines and learned from them, and used all that knowledge to build and improve on what I have. At one point I felt it was good enough and unique enough, and decided to release the first bits of code to the public. At that point the vision of Banshee as it is today was formed.

>How long have you been working on your own engine?
It has been five years since I wrote the first line of code. Last two of those years have involved full time work, while earlier I had to juggle developing Banshee in between my work obligations, which was not ideal.

>How did you choose the name for your engine? Why “Banshee”?
It sounded catchy, but there is no special meaning. It also didn’t seem to have any major software brand associated with it, making it easy to search for and set up a website.

>Is there any game on Banshee?
There are no released games on Banshee but a couple are in very early development. The engine is still not stable and things are often changing, which makes development at this point hard. Beta of the first stable version will be released later this year, which aims to be, for the most part, usable in production.

>Do you work alone on your engine?
I work alone, although there have been a few occasional contributors helping out.

>How do you concentrate on work?
I try to keep multiple in-progress tasks. This way if I feel my focus on one task is dropping I’ll switch to something else which I hopefully find more interesting. If all else fails, large dose of black coffee!

>Did you get inspiration from Unity or other game engines?
Unity was a huge inspiration when it comes to ease of use, editor extensibility and fast iteration times. This is something I definitely want reflected in Banshee’s editor and scripting API. But in many ways I also felt Unity was too restricting due to its closed source nature. Banshee on the other hand is fully
open and built with a focus on extensibility. Coupled with a complete C++ API and modular design it gives you absolute freedom to do what you wish.

Unreal & Frostbite were an inspiration when it comes to their rendering technology and high performance, both of which are very important factors in Banshee’s development.

> What is your goal with Banshee? What are the main plans for the engine?
There are two main goals:
1. To create an engine that provides an intuitive and easy to use editor and scripting API with fast iteration times, based on a high performance multi-threaded core, able to run large titles using modern high fidelity graphics.
2. Ensure Banshee provides a high quality, well designed, clean and documented codebase that is easy to understand and modify, in order to ensure the engine can be enhanced and built upon, both by me and by the open source community.

As far as engine development goes, it is now in final stages before v1.0 BETA is ready. What remains is to finish the renderer, port to Linux & Mac, followed by a lot of testing and polish. Right now the engine is in many ways playing catch-up with features that other decades-old engines had for a while – once we have the first stable version to serve as a foundation there are many more features planned, including support for more platforms, more high level systems and plugins for various middleware, bigger focus on experimental & bleeding edge features and improvements to the editor workflow.

> Is the project sponsored by anyone?
No sponsors, I’m supported by my savings.

> Banshee repository on github must work as an excellent portfolio, so big studios can try to hire you, can’t they?
I’ve had some well known studios and middleware companies contact me since going public with Banshee. It’s certainly flattering and not something I could have dreamt of back in college days, but my work on Banshee currently takes priority.

>Please, tell me about some part of Banshee you are most proud of.
Obviously I’m very biased, I just really love the overall the design of it. I feel the code is very clean and neat, I find it a breeze to navigate and even when I need to make major changes it ends up being relatively easy to do. I find all of this incredibly important because it means I can keep on building and enhancing it without worrying of it becoming a convoluted mess, which I
feel is a trap too many engines fell into.

Banshee game engine. Rendering system. PBR Screenshot

>Could you describe the features of your rendering system? How did you get the ideas behind it?
The rendering system is something that’s currently being worked on, and improvements are being made daily. It’s a hybrid tiled deferred / clustered forward renderer, supporting physically based shading using the Cook-Torrance BRDF. The renderer supports high-dynamic range and is gamma correct, has a tonemapping operator with customizable curve, white balance, exposure and color correction features. It supports image based lighting in the form of HDRI as well as reflection probes – both prefiltered radiance for specular reflections and irradiance for indirect diffuse is supported. It also supports area lights, soft shadows, screen space reflections and a variety of post-processing effects.

All of this runs on Banshee’s low level rendering API which can transparently switch between DirectX 11, OpenGL 4.5 or Vulkan backends, with plans for more backends in the future. The renderer runs on its own thread and supports command lists for fine grained multi-threading. Recently there was also a refactor that modernized the rendering API to be more in line with a cutting edge Vulkan API, to ensure the engine can properly utilize its features.

> Could you recommend your favorite books on graphics, c++, game engine architecture, etc :)?
My all time absolute favourite book is Physically Based Rendering by Matt Pharr and Greg Humphreys. The book even won an Oscar, deservedly so! It offers incredibly detailed insight into modern rendering theory and backs it up with quality code.

Other than that I can also easily suggest Professional C++ by Marc Gregoire, Real Time Rendering by Tomas Akenine-Moller, Eric Haines and Naty Hoffman, and finally Game Engine Architecture by Jason Gregory.

Thank you very much for the interview, Marko! Russian gamedev community and I personally wish you a lot of patience and good luck with Banshee.

Did you like the article? Share with friends:
Автор snezhok_13
Writes about gamedev. Graphics programmer on AAA projects.

Leave a Reply

Your email address will not be published. Required fields are marked *