Banshee Engine (Updated May 2017)

Started by
10 comments, last by BearishSun 6 years, 10 months ago

EDIT:

LATEST UPDATE: scroll down or click here

v0.3 update: scroll down or click here

v0.2 update: scroll down or click here

ORIGINAL POST:

Hi guys,

I wanted to bring your attention to Banshee Engine. It's something I have been working on for the last three years in order to figure out ins and outs of engine development, and I'm really proud of how it has turned out so far. The idea was to build a powerful multiplatform 3D game development toolkit from scratch using modern technologies and modern design principles.

It’s still a work in progress and its feature set is far from complete but the goal to is provide a fully featured toolkit, from a low level C++ engine library, high quality renderer, integration with third party libraries for physics, audio, networking to an asset pipeline, scripting and extensible WYSIWYG editor. There doesn’t seem to be a similar fully featured toolkit in the open source community – there are some really good libraries for specific purposes but no well rounded toolkit. And many open source engines that provide a wider set of functionality have been around for ages and their codebase is far from modern.

Obviously I’m biased when saying this but I believe it is designed extremely well. I didn’t have any time or management constraints and I could build it from scratch instead of on a code base that is a result of many years of iteration which seems to be the case with some more well established solutions. It’s written in C++11, has very modular design and decoupled code, built from ground up to be easy to port to other platforms (platform specific code is kept extremely encapsulated) and multi-threaded at the core.

The entire interface is built in such a way to make the engine as customizable as possible. I wanted this to be an open source project from the start and to make it possible for others to mess around in easily. The core is built in multiple layers, where lower layers have more general functionality while higher layers offer a more specific set of features. All layers come with their own interface and you can choose to work with lowest C++ layer that allows you to call rendering API directly, use the highest layer using the editor and scripting system or any layers in between. Layered design is meant to accommodate various use case scenarios, whether people want to use it to just quickly build a game using a higher layer without delving into engine internals, or use a lower layer and perhaps use it as a basis of an engine of their own.

Since the higher layers feature more specific functionality they’re more likely to be updated in the future as new technologies arise (e.g. new rendering technique or API), while it is hope that the lower layers stay as a foundation for the future - whether that is for Banshee or someone else’s project.

Layered design also makes it easier to learn as you have clearly defined boundaries between systems plus it reduces class coupling and makes the direction of dependencies even clearer. While at the topic of learning, every non-trivial method and class from the lowest to highest level is documented.

Along with layered design the engine is also designed to be modular. Any system where it was reasonable to do so is contained in its own module that can be plugged in (or out) as needed. This ranges from rendering APIs, input systems, asset importers, scripting system and even a modular renderer system.

While I plan to introduce many of the engine features myself I do hope the design described above is flexible and attractive enough to get community working on extensions and modifications. I’ve been working with Unity 3D a lot and have seen some really good solutions come from its Asset Store - I’m hoping for similar with Banshee, but with less restrictions on the creators considering it’s open source.

In its current state the engine core is feature complete and work progressing on many higher level systems. Some of the features that are currently implemented include rendering API support for DX9, DX11 and OpenGL 4.3 with multithreaded rendering, resource management with async resource loading, advanced RTTI/serialization system, easy to use shader/material system, powerful skinnable GUI system with unicode, localization and mesh batching support, input handling with joystick support, key mapping and virtual input, CPU & GPU profiler, asset importers for FBX/OBJ meshes, PNG/JPG/PSD textures, TTF/OTF fonts, shader parsing for GLSL and HLSL, and an utility library with math, filesystem and threading support.

Building the core is by far what I would consider the hardest part and moving forward has just been getting easier. There’s still some work to be done in the core, especially testing it in a real world environment but like I said I expect the design is very solid and mostly minor bugfixes will be needed. And there are some big plans for the future as well.

Work is currently progressing towards introducing C# scripting, C# wrapper for the entire engine and a WYSIWYG editor. This portion of the engine is very much inspired by Unity 3D and its ease of use. You can expect the editor to be something very similar with all the tools you need for scene building, asset and project management, dynamic resource switching, in-editor play, one-click build, integration with the C# scripting by giving you visual access to your code components and a special interface for designing your own sub-editors (also via C#). Scripting in C# is great for writing gameplay code as it is simple, safe and offers very fast iteration times without having to recompile the engine. C++ is still there and can be reserved for performance critical systems. I have good portion of this already done, a few larger features remain and a bunch of polish to be done.

The project is available for download as a preview version: https://github.com/BearishSun/BansheeEngine . This version is a few months old and hasn’t been thoroughly tested. You can play around with it and check out how systems are implemented but I wouldn't suggest using it in your project unless you’re willing to squash some bugs. Preview version doesn’t include the development work mentioned in the previous paragraph, although I will be merging dev and release branches on the next release.

On the link above you can also find some example code on how to work with the engine. Just be warned in it’s current state most high level systems are not implemented. This means no proper renderer (e.g. no lighting system, shadows and similar) and systems like animation, physics, audio, networking and similar are missing. I’m quite confident I can introduce those systems soon after the editor is complete - integrating third party solutions for physics/audio/networking should take a few months at most and a reasonable quality renderer should not be far off either. I do plan on creating a much more advanced renderer with global illumination and physically based shading but only after the 1.0 version release.

There are plans for many other systems but I’m hoping that after the release there will be some community effort to speed up development, and if I manage to get some funding maybe even get a few full time programmers to help out. I’d also like to get a website/wiki/forum/documentation running but don’t have the time for it yet.

I’m currently stretched pretty thin, Banshee development happens after my “real” job and I don’t have time for much else but I’m trying to run a series of articles about Banshee here on gamedev.net. I have the first one waiting for approval so hopefully it will be up soon. I’ll be talking about things like implementing run-time type information system in C++, flexible serialization system, embedding C# in a C++ app, multi-threaded renderer design, designing editor tools and later on likely about shading language parsers/converters and graphics/lighting theory, among others.

I’m sorry I don’t have any screenshots or videos. The preview version is a little more than a framework and a screenshot can do it justice as much as taking a screenshot of DirectX can (= it can't). Editor is a mess and I’d rather not post it yet, but expect videos and screenshots as soon as I have something I deem worthy of showing.

I hope you like the project. I’ll keep this thread updated with any news as development progresses.

Advertisement

Looks impressive, how would this differ from say Unrea 4, is it taylored to a specific genre?

It's not tailored to any genre, it tries to be as general purpose as possible without sacrificing design and performance. Users are able to extend the editor using a special easy to use scripting interface to tailor the environment to their needs.
It aims to be comparable to Unreal, Unity 3D and CryEngine but those engines have a feature set that I don't hope to reach soon. Therefore the focus is on developing a core level of functionality (rendering, physics, audio, networking, editor, scripting, GUI) while high level features (FX editor, cinematics editor, terrain editor and similar) are still a couple of years away.

Wow, came to forums today planning to ask if there were some new game engine worth to try and I find this. A quick question: no opengl 3 support? I will follow this project.

Sadly no, I'm relying on some very new OpenGL features throughout the engine. If you are feeling adventurous all OpenGL functionality is contained in BansheeGLRenderSystem project and most of it should work on much older OpenGL versions, you'd just have to cherry pick the 4.0+ stuff out.

Also, gdnet editors were kind enough to publish my first article: http://www.gamedev.net/page/resources/_/technical/apis-and-tools/banshee-engine-architecture-introduction-r3909

It's a general introduction to the engine, covering a lot of what I already wrote here with a bit more information. I hope to publish the next one within a month, and it will be more focused on implementation details with a lot more code (as will all articles to follow).

I will try the engine tonight at home (dont have decent hardware here at office).

Well, seems that I need VS 2013, which I dont have. And now Linux build support yet.

VERSION 0.2 RELEASED!

New stuff:

- C# scripting

- Extensible editor

- BSL shader language

- Hundreds of bugfixes and improvements to Core

Still a lot more work to do but I'm hopeful most major systems and mac/linux ports will be done by early 2017.

I think I'll be doing more frequent updates from now on, first of which will be PhysX integration in a couple of months, and I'm also hoping to publish the API reference and some manuals as I'm aware that it's pretty hard to get into the source code as it has grown substantially (all methods are documented, I just don't have a neatly organized HTML yet).

Check out the updated feature list, with new media materials (screenshot/video):

https://github.com/bearishsun/bansheeengine

(all methods are documented, I just don't have a neatly organized HTML yet).


Sounds good, do you have any plans to use something like doxygen to create html from your source code comments?

Yeah I'll be using Doxygen. I just need to group the classes together, and get rid of the chaff - it's very unreadable with a big class list and a bunch of enums and structs that probably shouldn't be there, making it hard for people to focus on what is actually important. I'm in the process of refactoring that a bit, plus I need a better doxygen template because I don't like the default HTML it generates - need to look into that more.

This topic is closed to new replies.

Advertisement