Full source code release and ending the development (sort of…)

It seems the changing times affected my decision about the game engine development, so after some thought I’ve decided to release the existent source code for the public, maybe someone wants to use ideas or pieces of code from it.

Bitbucket mercurial code repository:


I will probably work on it from time to time, maybe in the weekends, just to keep my humble C++ skills alive, but it will be only when I really don’t have anything better to do, so that will be usually quite rare :).

This decision was taken while I was coding some shaders and trying to go towards PBR (Physically Based Rendering), and realizing that my math skills will not cope very well with all the formulas and ideas found in the papers and examples around the web, plus, I never liked the fragility of shader development… So, being frustrated that my math skills are bad (and would still be bad even if I would try to learn more math, since I don’t really like heavy math), I’ve decided that this is a useless thing to continue, even as a hobby, I would lose precious time, instead of making games, just coding and engine that would be sub-par with the engines on the market or even other free engines.

That being decided, I guess its time to put Unity3D to some good use and try some game ideas.

For more than a decade I’ve been doing engine related development in my spare time, and then few years as a job for Crytek’s CryEngine, it was fun, but times change and one needs to adapt.

The engine is not really dead/closed, its just frozen in time and space, from time to time I will add and modify features (and bugs) to it.

Progress and some thoughts about game engine development today

Well, long time no update, I had some other worldly things to do the past month, the engine had a more or less steady development, with some holes. I will explain some of the reasons for that ;).

I must confess that after UnrealEngine 4 reveal for the monthly subscription at an “impossible” price $19 (thinking that they were asking hundred thousands in the past for the licenses), I was a little bit depressed, not in a very bad way, but it hit me quite good :). After that event, I just thought to myself I’ll make the engine for fun and learning new stuff pertaining game development. I have been developing game engine technology for the past 15 years, almost at a constant pace, but never actually finished a product, always rewriting and reinventing the wheel, which it could also happen now, but lets have some tiny bit of hope :D.

On the same note, I am wondering how the small 1-man or few men game engine developer teams are thinking or doing about UE4’s release, like NeoAxis, Leadwerks, Unigine, C4, Esenthel, etc. or even Unity 3D :), because I think it did impose a monopoly, if not now, maybe in the future. Sure, UE4 has a lot of quirks to solve, but so far its looking really good and I myself learned new stuff and tricks from it and surely will shamelessly use this knowledge in my engine, albeit, hopefully improving and adding upon it ;).

On the progress side, one major stop was the asset compiler architecture, I’ve tried some database approach with SQLite, but it was too much work so I’ve dumped it, right now when you want to compile a project it will create a cache for the compiled assets, so next time it knows if they were modified and need to be compiled again. Also, the assets are compiled using a generated dependency tree sorting approach, so for example the texture atlas asset will be compiled before the texture it needs to generate, and so on.

Next thing will be the rendering system, mesh rendering, the default deferred renderer and things like that, probably the job system must be actually used, will be tested with many entities and rendering scene nodes.

After some meshes are rendered using the deferred renderer, I’ll have to continue on the GUI system for the editor and the json formats for declaring properties for the various components, more on that soon.

For now the targeted platform is PC for Win, Linux, OSX. I dont want to get bothered with mobile or consoles for now.

Not too much visual stuff, I will just post the atlas texture generator output from the asset compiler, you can give it a bunch of images and it will generate an atlas, giving a specific policy (this will be probably replaced later on with texture arrays, but for small stuff I guess its still ok to use atlases). The border around sprites can be set by user, default is 1 pixel, it will also rotate sprites to fit them even better, the engine will use them unrotated when rendering the sprites.


Few updates on progress

The past few weeks the engine got some cleanup and simplification going on. Work on the asset compilation and runtime loading was done.

The asset compiler is now loading a project file (json) with all the settings pertaining to that project, and generates a TOC file (table of contents) for each defined bundle. A bundle is basically a folder with assets, which in development mode is compiled as all the loose files in that folder, recursive, and a .toc file for it, and in release mode a .bundle file with all the compiled assets is generated, next to the same .toc file for it.

The runtime engine resource manager is loading resources in the background on a streaming thread and notifies the engine managers when something is ready to be used (like uploading textures and gpu programs on the video card, creating sounds for FMOD, creating PhysX objects) and its working great.

Since multithreading is a central part of the engine and we dont want deadlocks, the simple Mutex class was upgraded to a reentrant mutex (see http://en.wikipedia.org/wiki/Reentrant_mutex).

Did some concepts for the flowgraph system, it will be a mix of various known ideas and some new concepts. For example the system will work like the UnrealEngine 4 but it will add up some new flowgraph types (editor flowgraph where you can create an editor for a specific prefab, like for example a road editor, just by using flow nodes). So a prefab will be composed of : entities and their components, editor flowgraph, constructor flowgraph, logic flowgraph.

The world editor will have a Win8 flat style UI, very simple and non-intrusive, but it will be done with the engine’s UI system, nicknamed Horus :).

There were some debates on the Unicode vs ASCII use in the engine and tools, basically right now its only ASCII, so you can’t create paths, file names with Unicode characters. This will be addressed later on since its not a huge priority right now. Though, the font rendering in the engine will use UTF8 for storing localization strings and will generate the font textures according to that or even dynamically at runtime (for example when you have user input like user name, you need to generate the new glyphs).

Another thing was about the convention for the coordinate system, and that is currently left handed since its more game dev friendly (x positive from left to right, y positive towards up, and z towards screen).

Including here is a sample project file, you will not need to edit it since the editor will do that, but just to give you an idea:

/assets/project file:

title: "System Assets"
description: "Engine and editor specific assets"

	buildConfig: "win64_dev"
			platform: "win64"
			buildType: "development"
			outputPath: "../data"
					format: "rgba8"
			platform: "win64"
			buildType: "release"
			outputPath: "../data"

	defaultBundleName: "system"

			path: "./engine"

			path: "./editor"

On the rendering side, there is also work done, but more on that in the next posts.
Stay tuned for cool things to come! ;)

Game engine market is changing

Amazing move for Epic on GDC 2014, to release the Unreal4 engine and tools like that, at 19.9$/mo, 5% and full source code. CryTek is doing more or less the same at 9.90$ but no royalties and Unity is hitting with Unity 5, but no price changes yet. Great times ahead :). As for Tachyon, nothing changes, development goes on even more. I have looked on the UE4, it has nice code, the tools are ok, but it still has a lot of areas where it lacks. I don’t think Unity should be too scared, but they will lose some of their clients for sure, yet they need to revise a little bit their pricing scheme. CryEngine is also a powerful one, tho the tools might be a bit daunting for some users, even more that UE4’s. Unity is still the 1st on the ease of use list, at least in my point of view.

The Tachyon Engine is coming with a new set of (hopefully refreshing) workflow paradigms, a minimalist design and the main focus of it is the ease of use and rapid game development (RGD term coined here! :) ).