Sunday, March 18, 2012

My Views on the Blender Game Engine

Hello everyone,

Several people have previously asked me how I feel about the Blender Game Engine. After getting into this a couple of times on Twitter I figured it would be time to write a full-fledged blog encompassing my thoughts on the matter in more than little chunks of 140 characters.

Allow me to start with making a very bold statement: The BGE does not belong in Blender.
While it is much more nuanced than that, I do feel that way a bit. The main reason for this is that it doesn't live up to other game engines, and seems to be in the same list of poor relations as the VSE. It has potentional, but to reach that potentional a lot would have to happen. The big question then becomes: Is it worth it? In my opinion: maybe... but probably not.

Here's why. Blender is aiming to be an all-in-one 3D suite, suitable for any part of the production pipeline. In most cases, these parts go together really well. After making a model, UV-unwrapping, texturing, skinning and animating seem like natural next steps (depending on the project of course). The tools needed for these operations seem closely related and complement each other nicely in most cases. Vertex Groups and Weight Painting for instance can be used for a multitude of applications, from masking to skinning to distributing particles. The BGE however seems to be completely separated from the majority of everything else, already making it feel like the odd one out.

Most game engines expect you to have all of your assets ready, and made in an external program. In some cases you can model from within the engine, but for all intents and purposes you go to a dedicated 3D application to do that. And that's not a bad thing, far from it! It allows game engine developers to focus on that, the engine, rather than reinventing the wheel of extrusion and non-obtrusive modeling workflows. This way, the two programs complement each other very nicely. I think the same could be said the other way around. Instead of trying to also incorporate a game engine, I feel Blender would benefit far more from creating awesome tools for all it's other departments. In it's core, Blender is a 3D suite, and that's where it needs to shine (and is, in my opinion)!

It is very common in production pipelines to use many different applications across one project. For instance, it's not uncommon for a character to be modeled in 3DS Max, retopologized in 3D Coat, textured in BodyPaint, skinned and posed or animated in Maya and rendered in Octane. Finding each program's strengths is a good thing. Personally, I prefer doing most of the aforementioned tasks all in Blender since it's done a tremendous job of combining all of them into a single, powerful application, that is great at what it does. However, while I do use Texture Paint in some cases, I generally run to Photoshop or the GIMP for anything more than some solid colors and strokes. The Texture Paint tools simply can't outweigh their dedicated counter-parts, and that perfectly fine; they're not supposed to.

So why is it that I don't think Texture paint should go then, while I did just say so of the BGE? In the case of textures, mockups or simple changes are much more common than with games. If I simply want to try some color palettes, add some Color Burn or change the saturation, I use Blender. I could  then save the image there, and continue work on it in Photoshop if needed. The same can not be said for games. Granted, in some cases a different engine is used for a mock-up or a proof of concept than the actual game, but that typically has to do with time restraints and/ or efficiency. Currently, the BGE is not at a point where it can be used for quick development of anything too complicated. Anything that is done here is non-transferable to other programs, putting the BGE in a position that doesn't make it very applicable.

This leads right back to the question of whether or not it could/ should be developed more to reach a point where it would be. In my opinion, that answer is no. There is very good reason game engines are separate from most 3D packages (I think Blender's the only one combining them), the first and foremost being the sheer amount of features needed, and the quality thereof. The second is that there's more to it than just some tools. Each engine has a very specific workflow, exposing all the needed properties and assets as needed. This includes things like an asset browser of sorts, integrated version control and optimizations made specifically for real-time applications. While blender has nice integrated scripting (albeit without auto-complete), it lacks built-in things like dedicated Update()/ fixedUpdate()/ OnCollisionEnter() functions (Most other engines), the realtime editing of public variables (Unity) or an easy-to-use State system (UDK). Some of these can be worked around, but it will never be as quick and easy as in a dedicated game engine. The same goes for things like a terrain editor, real-time fluids, post-processing effect, or even something as basic as a GUI system.

Now all of this could be added in, of course, but would it really be worth all the time and effort? I don't have any numbers, but aside from Yo Frankie! and a Sintel game I don't think ever got finished I haven't heard of much games being made with it, and I sincerely doubt many people are using it for anything other than adding simple interactivity or as an entry-point to trying to make a game. So is the BGE really something that we would like to see 'take on' engines like Unity, to try and get more serious game developers to use it?

Another, completely unrelated, issue with the BGE is it's exporting and licensing. Currently it's GPL license prevents you from making and distributing a commercial application with it without also releasing the source. This is quite unfortunate and very limiting to most users.

So does this mean the BGE is doomed and has no place at all in Blender? I don't think so. I think one place it could really shine is it's use for scientific research and interactive applications. Because it is so closely integrated with Blender it provides a great entry point to add interactivity to certain visualizations. Drawing on what I've seen the the Blender Conference last year, I could imagine quite a few practical uses for it with just a couple of modifications. Think along the lines of easily navigating around a procedurally created molecule, watching it's atoms wriggle and rotate, or making a simulation of wind resistance around a car, or EM waves emitted by a cell phone. In these kind of fields, I could definitely see the BGE serve a very nice purpose. Maybe not as a game engine, but rather as an interactive simulation enviroment. Maybe, as the BISE.

-Patrick

PS: Please let me know your views on this subject as well; I'd love to hear them!