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!

4 comments:

  1. Hi Patrick,
    while I respect your opinion, I could not agree with you!
    In my opinion the bge is a part of blender as any other part! You could say it for almost any section in blender. You can find a better app for each purpose but the all in one solution is what makes blender so strong! The same goes for the bge! No other 3d engine offers such a great workflow as the bge! Well I have to say I have only used unity aside from the bge!
    I have seen some of your bge tutorials some time ago. And it is clear that you haven't used the bge to much! It is not meant as offense, but it is fact that you can achieve almost any gametype with the bge! I am a bge user, and I have to say I love it! It offers great functionality! The downside is, that the bge lacks some keyfunctionality! One of it is the performance! I am dissapointed, that the bf doesn't care to much about the bge! I hope this changes in 2.7
    And it is also not true, that you can only pusblish games by opensourcing your gamefiles! If you export it as an exe your data will be licenced under the gpl. But you have a blenderplayer that runs your blendfiles separate. This way all your files are under your own licence you publish them.
    Still I agree with you that you need quite some workarounds to surpass some limitations of the bge! But this will be the same case for any engine! You always reach some point where you have to optimize and work around some problems that are not handled well by the engine!
    I have to admit I haven't finished a game yet, but I am working on one! And the only reason I cannot work on it amd finish is, that it is a sideproject and I have no time atm. But I absolutely have all tools I need to finish it and publish it at least for mac, windows, and linux!
    Here you can take a look at it:
    http://www.youtube.com/watch?v=_eX0KGsAv3k&list=UUckpus81gNin1aV8WSffRKw&index=4&feature=plcp
    Every effects are done withing the bge! For the particles I have created my own addon!
    http://www.youtube.com/watch?v=tovhSKqJ7vw&list=UUckpus81gNin1aV8WSffRKw&index=6&feature=plcp

    And there are other projects that will teach you better! Just take a look at the subforum of the bge! Yo Franky is just a nice techdemo! But it can be done more than this!

    Maybe the bge is nothing for big studios, but for small studios or private person the bge is just fine! And that is the userbase blender is aiming for! At least what I have experienced the last years!

    I know this post may be to emotional, but hey, we are talking about blender! And the bge is part of it! :)

    ReplyDelete
  2. I agree with that Blender Foundation need to decide whether it seriously going to start competing with other game engines, Unity being the one I am currently developing a game idea on or perhaps develop it with a different goal in mind than pure game development.

    If they want to take on the other engines, the same way they are taking on commercial 3d modelling applications, then they need turn BGE into a separate programme/project, building in a GUI is just the beginning of what they have to do to make it competitive, at least from my point of view, I did try and learn BGE for project, but found it as frustrating as other parts of Blender, Unity I found far easier and more intuitive to use.

    ReplyDelete
  3. Hi Senshi,
    I am aware that this is a relatively old post, but I feel that it needs addressing. Whilst I respect your belief that the BGE is antiquated, I could argue your case against you just as you've argued it against the continuation of the BGE.
    Firstly, some corrections:
    1) BGUI is a GUI in Blender Game. It's written in Python, because anything that is extensible suits a scripting layer as opposed to tightly coupled C / C++ libraries (that have to be compiled to run inside the engine). Unity uses javascript or boo for this purpose.
    2) States are easy to use in the BGE. There is a state selection, and logic is confined to states.
    3) Fixed entry points do not exist because they don't need to. If the user wishes to run custom logic (scripting) they can choose where the entry point must be. This means they can share a module without needing to create a single module with an "update" function if they wish to expose different behaviours of the same module. Admittedly, the Bullet exposure is slightly limited, but this is to be extended in the future. (I intend to do so). It's a technicality as we have sensors that can poll the collision status.

    Unity Free does have some logical aspects to it that are superior to BGE. However it lacks some simple features we've come to take for granted such as 2D filters that means you really ought to buy the software if you want to design some of the more aesthetically complex games / simulations.
    Next up, workflow. Blender is a 3D content creation suite with integrated 3D engine. It has its own workflow. And I prefer it. This said, others may prefer Unity, but that is simply what you're used to, the same applies to the Maya / Blender / 3DS Max debate. it's a lackluster argument.
    Optimisation. This is true. Out of the box, Unity offers certain features, alongside CryEngine / UDK, that are optimised for their purpose. Specifically the rasterizer / render pipelines are bettter performance for similar hardware. This is to change with Blender, but it should also be noted that many of these optimised features can be achieved in Blender. The features are written in C / C++ and you can extend Python with faster C /C C++ libraries. It's a developers choice.
    Games. Many games have been released in Blender. Seriously. This is outdated information that started as prejudice in some internet debates a while ago. It is no longer a relevant argument.
    Source, source. This again needs clarification. Games can be released without releasing the source code. You must read up on the GPL licensing in relation to the BGE. A number of good posts exist, but essentially the following can be drawn from it:

    Only the Blender Foundation can find issue with you if you do not release the source.
    To the most extent, the Foundation will not take action against you if you've released a game in good intentions. See Ton's various posts for clarification.

    Some final remarks:
    I enjoy using the BGE. And yes, I cannot maintain a wholly unbiased perspective. However, I do consider the benefits of other engines, and I'm aware of the same flaws in the Engine that others notice. I consider myself holding all perspectives in rough balance. I just find that this article is written with a slightly narrowed focus, and it, whilst outdated, should have been further explored.

    ReplyDelete
    Replies
    1. Furthermore, we have Nodal Logic inclusion (see HIVE) which essentially brings the Logic tools above standards. I say this because they offer a new perspective on nodal logic. (as well as reinforcing some nodal convention).

      Delete