So the Meteor graphics engine I was working on a few months ago is back in progress, it’s still around! Although I want to keep busy on making Bubble Tower, I also want to continue the XNA project I have put most of my time into. But this time, I am making the source code public! I finally decided it’s progressed far enough so that I can share it with everyone, and hope to have it up within a day or two. The engine is far from done, but I have the core concepts already planned and it’s at least functional and stable to some degree.
Meteor Engine was born out of the need to separate rendering steps. It all started when working on Catalin Zima’s tutorial on deferred rendering and porting the code myself to XNA 4.0. (This was before I knew there already was an existing XNA 4.0 port) As I added more features to it, the Deferred Renderer class got a bit too long for my liking so I decided to break it into several steps. I had to figure out how to take the output of each step and introduce it into the next one, and also combining results from multiple steps as input. Eventually I streamlined the approach with using several classes that are self-contained render passes, each with their own shaders, and moved the scene organizing code into its own class.
Although Meteor comes with built-in render passes, you can extend and create your own. Here are some of the rendering features that Meteor Engine uses in its samples.
The engine is capable of supporting multiple render profiles, so you can have a dual or multiple approach with drawing objects onto the screen with different effects. Each render profile can render one scene at a time, and the current one renders the the scene it is assigned to. For now, the engine can use only one render profile at a time, which can be switched on the fly. But in the future I hope to support the rendering of scenes using several profiles, making the use of multiple materials much easier.
Meteor Engine will be hosted on CodePlex, as soon as I get rid of the extra old files that I won’t use in part of the project. It is able to be used by compiling from source or linked as a library.