Design for a new graphical game engine

Synopsis:
As a longtime user of the Blender game engine, I have become well aware of its various strengths and shortcomings. I do not believe that the current game engine was designed with the requirements of complex modern 3D games and simulations in mind. I do believe that there is a certain niche accommodated by the Blender game engine in its current state, but large projects in the engine quickly become cumbersome and incomprehensible, with numerous logic bricks and Python scripts and no way to organize them or visualize a hierarchy of their interactions.

I propose an alternative, cross-platform (Windows, Mac, Linux) game engine designed specifically around the requirements of modern games, and released under an open-source license. There will be an exclusively graphical programming environment; my experience with National Instruments’ Labview software has lead me to believe that a correctly implemented graphical language renders scripting extensions unnecessary. It will be completely object-oriented, with code reuse a top priority. Polymorphism, inheritance, and virtual functions will be supported. There will be functionality allowing classes to be exported in an independent file format so they may be shared with other users. This way, common functionality such as FPS cameras, path finding, and object selection can be written by various users and uploaded to an online database, thus saving a large amount of time typically wasted by developers implementing features that others have written hundreds of times before.The idea is that developers can produce commercial, closed-source games but still contribute back to the community certain elements that could be useful to others.

The implementation itself will retain the dataflow programming paradigm to some extent. There will be a class browser with a hierarchical view. Each class will have a property sheet defining local member variables, with a static option, à la C++. All of the typical built-in types will be implemented. Member functions will each have a discrete inputs and outputs. On the block diagram (programming space for functions), users will have the ability to access any member variables and instantiate local objects that will be destroyed when the function exits. All class instances will be passed by reference; member functions will be like traditional function blocks but will need the class instance wired to them as an argument. The concept of passing data through a sequence of functions on “data wires” can be difficult to understand for a traditional text-based programmer, but it quickly becomes intuitive.

The language will be integrated with the development environment. In addition to the programming space, a 3D view will be provided. It will allow for translating, rotating, and scaling in-game objects and will provide a viewport to immediately test the game. Movable 3D objects will be referred to as scene nodes, and the 3D view will allow the user to grab a handle to them in the code, along with visually managing node relationships in the scene graph (parents and children). The 3D view will also contain an interface to the state manager, allowing easy implementation of different game/menu states. There will be a fully-featured GUI layout manager for easy creation of menus.

I have already developed the basic 3D framework behind this system. It makes use of numerous open-source libraries, including Ogre3D, MyGUI, and Bullet Physics (<333 bullet!). It also contains preliminary artificial intelligence functionality, including path finding and steering through OpenSteer. I intend to make use of more open-source libraries in the development of the graphical environment, such as wxWidgets and Cmake.

About me:
I am a programmer, musician, artist, and *nix geek. I’ve been using Blender since version 2.28 for both 3D rendering and game creation. I have experience developing games, websites, and scientific applications in a variety of languages. The main problem I face when creating games is that I am forced to waste huge amounts of time developing functionality that has been done countless times before, but due to the closed-source nature of games has never been released. Oftentimes released code is incomprehensible, and is far from the plug-and-play solution that I wish to achieve with this proposed software.

I’m looking for criticism or suggestions on my ideas here, as I’m sure there are a lot of people on these forums facing the same issues that I am. Also please keep in mind that I love the Blender game engine and have used it to create lots of games. My latest game is in RTS (like Starcraft), and creating a game with that level of complexity in the Blender game engine is impractical, if not impossible. I strongly believe that there is a segment of people who wish to create complex games, but not have the time nor the resources to code hundreds of thousands of lines of C++ code, and this is the segment of people that I’m attempting to accommodate.

Also, I know this isn’t directly related to the Blender GE so I’m sorry if I’m in the wrong place, I’m just trying to reach people similar to me so I can get feedback on my designs. And if you read all of the above, I heartily thank you for your time.

TL;DR: I’m writing a game engine that you program graphically like the Blender GE. Give me ideas or tell me if you think this is stupid.

Wow, I’m impressed. For the past two years now I’ve been using external engines with blender such as crystal space and ogre. I like them because there fast, efficient, and up-to-date. Don’t get me wrong, blender has come a long way since 2006. For the most part blender’s graphics are up to date, however, it’s speed is not. Framerates become incredibly low on inferior computers when working with big environments. I definitely do not think this is stupid and I think you should continue with this engine. I’m very excited to see where this goes!

Tony Z.

I’m excited too, this would be great, especially if it was done in a clear and understandable way. I think that your proposal would blow the door open for the average joe to make games that function properly… very good job

Sounds impressive.
I’m sure the better integration you have with Blender, the more support you’ll receive from this community. Direct loading of .blend files would be awesome!

It sounds like you’re thinking of a node-editing scripting system (like XSI ICE?), if so, I am very interested!

sounds good, if you need the help from a noob like me, drop me a line :slight_smile:

Instead of going off into your own branch, why not look into developing with the blender devs, this really does sound pretty cool! :smiley:

Thank you for the kind and encouraging words.

tony zambrotto: I agree that Blender’s speed can be abysmal. It also has a few other shortcomings, such as no support for Direct3D, and no paging or heightmap support (to my knowledge). Nevertheless, it has progressed tremendously over the past few years, especially in terms of graphical quality. My main gripe with the GE (other than the speed) is that there isn’t an effective way to organize your projects.

jezzabetz: Thank you. It seems like most (free) game engines available today are aimed either at beginners or at season developers. I believe that there should be a middle-ground; an engine easily accessible to beginners yet flexible and powerful enough for production projects.

RobCozzens: I considered implementing my engine into Blender, but decided against it for a few reasons: I’d have to become familiar with the Blender source tree, and I would be adding a huge amount of dependencies to Blender, not to mention increasing its binary size with the rather large Ogre libraries. I do plan on seamless .blend integration, probably through the readblend library (I have no idea if it exists anymore or what state it’s in). Blender my preferred 3D application and so interoperability is a top personal priority for me.

I’m unfamiliar with Softimage in general, but yes, a node-based scripting system is precisely the idea.

cyborg_ar: Thanks :slight_smile: I’m interested in hearing from beginners both now and at a later stage in development, because as a somewhat experienced user/developer, it can be difficult to see things from other perspectives.

lipsonfire: I would be happy to collaborate with Blender devs but I don’t think this project should be integrated directly into the Blender application. I would be happy to hear other opinions on this matter.

nothing personal, but this is an epic fail. The rest of your post with some modifications would sound like a typical “I want to make an MMORPG” post of newbies that you can frequently encounter at gamedev.net or other game related forums.

Hello bacon. I agree with most of your ideas. Specially with your view of linked open data and reusability. I think you’re in the right direction. I only disagree with separating a new engine from the BGE.

“My main gripe with the GE (other than the speed) is that there isn’t an effective way to organize your projects.”
“but large projects in the engine quickly become cumbersome and incomprehensible, with numerous logic bricks and Python scripts and no way to organize them or visualize a hierarchy of their interactions.”

I disagree with this. I think you can build an engine “on top of” the BGE and still have your own efficient way to organize projects. Python is very flexible. You can perfectly have a well organized game project divided into python modules and have a separate tool to view and re-organize hierarchies.

I understand having to dive into and understanding the Blender source code would add to the developing time. But on the other hand that would also save you time that you’d waste repeating all that the BGE has already accomplished, which is a lot. Using the same ideollogy you have of taking the most out of others have already built.

Personally, I would go even further and use the BGE itself for the UI. Your “engine” could be nothing but a game developed on the BGE that would use both Blender and BGE python modules to edit .blend files, organize projects, visualize class hierarchies and load open linked data from an online database. This way you could use parts of the engine inside other games. For example, a tiled map editor could be a .blend file that could be linked into a BGE game for the end user.

Basically, a higher level graphical UI built on top of the BGE using the BGE itself. So you could use your high level graphic UI for fast development or, if needed, go down to lower level editing directly into the BGE for further control.

i’m 17 too and i find that offensive :confused:

btw, bacon, maybe you could start your graphical engine as a replacement of libSCA and libKesji, i’d love to help :slight_smile:

Nikolay740: I edited my post slightly so as not to offend you. I posted my age to imply that I have time available for development that most people don’t, although I’m employed as a programmer part-time. I made a post asking for constructive criticism on a design; I outlined it quite thoroughly and not once did I ask for assistance as far as the actual implementation. If you’re going to reply to my topic, please contribute content instead of jealous remarks.

vibrunazo: Thank you for your criticism and ideas. Under ideal conditions, I would prefer to extend the BGE. But Ogre3D is stable, fast, and modern, and I have prior experience working with it. I realize that in the past there have been efforts to integrate Ogre3D with Blender as the GE renderer, but no substantial progress has been made to my knowledge. To me, it seems like extending the BGE to the point of being useable to create very complex interactive applications is an uphill battle. To understand my reasoning, try (or imagine) implementing a flocking pathfinder in the BGE. In any case it would be extremely difficult, and you would find that the sensor-controller-actuator scheme is not ideal for this kind of programming, even if you code most of the logic in Python. The sensor-controller-actuator paradigm is good for a certain type of games and simulations and not for others. Another problem you didn’t address is the general slowness of the BGE, especially in relatively large environments with numerous simulated objects. Again, the BGE is not designed for this type of application. I agree with you that the BGE has accomplished a lot, and I have found it very useful for creating interactive 3D applications very quickly. But my proposed software is designed to accomodate my needs that the BGE in its current state simply does not meet.

Another possibility is a new engine, using Ogre3D, designed not to replace the current engine, but as an alternative. I could implement the user interface within Blender, and provide the engine itself as a seperate download in the form of a few shared object files. The reasoning here is that I don’t want to increase the dependencies of Blender or the download size. Is this an acceptable proposal, or should it be an independent application? Is there another place where I should ask this? I know it’s good practice to let others know before you start developing an open source project to ensure it doesn’t conflct with any others.

I think this would be a great solution, so long as the pipeline is only changed in a few small ways (much like using the yafray renderer).

About LabVIEW-style programming interface (for the users), I would discourage it, or make sure there is an equal alternative. I have worked with LabVIEW for the past year, and find that although there are some advantages to using a graphical system (such as improved heirarchical thinking, and flowchart-like understanding of the most basic programs, it is often cumbersome and annoying (much like logic bricks). Also, such an interface would prevent developers from writing code in their own editor and pasting it in.

Anyways, good luck with this project. It would be great to see blender as a greater competitor in the game-engine world.

J09: Yes, the idea is that the current game engine is unchanged, there is just an addition of a new one (exactly like the yafray render option).

I’m also glad to hear from someone else who uses Labview. I agree it can be cumbersome at times, but I have found it rather intuitive. The question is, what IS the alternative? I want to find the method that the most users would find useful but would still be both flexible and powerful. Should it indeed be text-based? Or does there exist another method of providing powerful, object-oriented graphical programming? A combination of both? I’m interested in hearing peoples’ opinions.

The node editing in Blender is pretty good and is supposed to be generic, so you might be able to pull it out and use it in another project (since yours is open source):
http://www.blender.org/development/release-logs/blender-242/generic-node-system-for-blender/

I most definitely support this, it sounds great

well if ur looking for suggestions you can get a few from here:

http://blenderartists.org/forum/showthread.php?t=162614

O.K i am convinced that a few things which i have written are fictional but i think it might help.
when ur finished with something pls send a mail to me at [email protected] i am really exited