A few months ago when I was attempting to swap out the graphics layer in Torque3D with bgfx I started running into problems with existing systems. I'd have to rewrite a lot of shaders and a lot of existing features to the point where I started just rapidly removing things with the intention to restore them later after I get a stable environment to work with. Eventually this led me to the question of "how much of this is worth keeping and how much should be completely rewritten." The answer, in my opinion, is that the majority of what's in Torque3D could do with a rewrite. The things that are not worth rewriting like the platform code, scripting language, audio etc all exist in a cleaner, arguably better, form in Torque2D. This is when I had the crazy/brilliant (depending on who you ask) idea to take Torque2D, remove the 2D graphics and replace them with a fresh 3D rendering system.
This lead to the birth of what I'm calling Torque 6:
Why Torque 6? I don't feel like it's fair to lump this into Torque2D or Torque3D making it a whole new beast of its own. According to the wikipedia page for Torque Engine (http://en.wikipedia.org/wiki/Torque_%28game_engine%29) there have been 5 derivatives of the Torque Game Engine. I hope for Torque 6 to be considered the 6th derivative. Therefore, the 6 is part of the name and is not the version number.
Full disclosure: it's not at all ready for usage in a game. I'm only making this blog post in the spirit of GDC and all the engine news lately.
Torque 6 starts with Torque2D as a base so it comes with Torque2D's platform support, TAML, module/asset system, TorqueScript, 64 bit support, etc. The graphics backend is bgfx so it supports DX9/11, OpenGL 2/3, and OpenGLES 2/3. The renderer I put together uses deferred shading combined with forward shading for special materials. Shaders are written in a glsl-like language inherited from bgfx so you only need to write one copy of a shader for it to work on all platforms. I've also integrated the Open Asset Import Library so the engine supports a wide variety of import formats including FBX, Collada, and OBJ.
Last but certainly not least I built a DLL plugin system allowing you to write C++ code compiled into DLLs and loaded into the engine. I'm building them with the goal of keeping game specific code of any kind separate from the main engine. For example, I wrote the skybox in a DLL since skybox can't be written in TorqueScript but I don't feel it belongs in the main engine as there's a wide variety of sky options and the main engine doesn't need to be bloated with that code.
I believe this is a strong foundation to build an engine on. With bgfx as the graphics backend we need not worry about keeping up with the latest graphics APIs. For example he's already begun development on adding DirectX 12 support. I also have an entity/component system and a material system in place and working, though they may undergo a lot of changes between now and the time someone can use this to make a game.
When can I use it?
Now that the foundation is pretty much in place, the rest of the house has to be built. We're basically missing everything. There's no terrain, foliage, editors, etc. While this is certainly an immediate negative, I think over time it will prove to be a positive thing. Its an opportunity to approach each issue from the top again and use modern techniques and research to produce something that makes sense for 2015.
For an actual timeline though, I'm not sure. This is a hobby project for me, not full time. With any luck other developers will show interest and contribute, but I'm perfectly prepared to go it alone if I have to. With no additional help I imagine I could have it usable for simple games within 6 months.
Can we see it?
Sure can! The repository is available on my github: https://github.com/andr3wmac/Torque6
And here's some screenshots from the early examples:
Stay tuned! I'll try to keep up with regular blog posts to update everyone on progress.