2013-07-20

Developing a New Engine


I'm now two months into developing my new engine and here's a breakdown of currently working features:

Scene Graph
Models and Cameras are scene graph nodes so you can make hierarchies like in Unity.

Rapid Iteration
You can modify shaders and textures while the game is running, allowing fast iteration. This is implemented using a FileWatcher class that registers created objects.

Unit Testing
I'm not using any framework, my tests are simple programs that use return codes that are used to generate a HTML report.

D3D11 Shader Reflection
Because my engine has GL and D3D renderers with support for user supplied shaders, I reflect the uniform names and create constant buffers from them.

BMFont support
BMFont is widely used in games industry so I wrote a reader for its ASCII and binary formats.

Texture Atlas support
Supports Texture Packer exported Ogre/CEGUI format.

C++11 lambdas
Useful for iterating containers of models, render queue elements  etc. and applying operations on them.

2013-05-06

Planning My Next Engine Iteration

Every 1.5 years or so I make a new iteration of my engine, Aether3D. The reason is that in that time I have learned many new aspects of engine design and I become dissatisfied with current codebase. So, here I am again, planning for the next iteration. I want to see at least the following management/tech features in my next iteration:

* Forward+ renderer (OpenGL 4.3 and D3D11 code paths)
* Unit tests (including automated tests for asset import pipeline)
* Better documentation, more example code/screencasts.
* Level editor in Qt, working on every supported desktop OS.
* Better animation support (blending, quaternions).
* 3ds Max and Blender exporter.
* OpenGL ES 3.0 instead of 2.0, using maybe a deferred renderer.
* OS X will get whatever OpenGL context is the most recent in future.
* Instancing.
* Particle system.
* Explore possibilities for using Compute Shaders for postprocessing.
* Some kind of realtime GI solution.
* No leaked resources.
* Simultaneous release of new features for every platform.

The common theme with many of the features above comes from this Wayne Gretzky quote:
A good hockey player plays where the puck is. A great hockey player plays where the puck is going to be.

Well, none of the listed features are really new, but not many current
engines support them. I don't know when I ship all those features, but I'm starting coding NOW.