Just a minor update this time. I haven’t done much more with the terrain or rendering code, but here’s what I am planning next for the engine.
In addition to terrain and culling, I’m doing a bunch of work on the internals itself, to make the code simpler and more readable. Gone will be the DragCamera and FreeCamera classes, which were really not much more than wrappers with XNA input functionality shoehorned in. From now on, input will be decided by the user, as I felt that it shouldn’t be the responsibility of the rendering engine to decide what control what.
Additionally, debug features will be in their own class, with the input also separated. This will probably lead to the development of a Immediate Mode GUI which would be just enough to do some of the more common actions for scene editing. I don’t really want to make a full-fledged GUI library because there are too many of those, and it’s easier to code in GUI elements by methods instead of using several objects and events.
Back on the rendering side of things- some more cleanup on shader code, and figure out a way to finally add full specular mapping support without bloating the buffer too much. But if that fails, I’ll bite the bullet and use an additional buffer for specular data. Also, a forward renderer! It seems like everyone and their grandma is too focused on deferred lighting these days, but left the simple yet overlooked forward rendering in the dust. Deferred rendering and lighting is not always the silver bullet for graphics… it has relatively more upfront cost and not worth it for basic outdoor lighting situations. They should be friends with forward rendering, which is still faster for many setups.
I don’t want users to dig too deep into the codebase to make the configurations they want to see take place in their game. For instance, right now the only way to change the Gaussian blur factor is to go into the effect class that uses the blur you want to change, and edit the parameter value from there. I want shader parameters to be editable on the high level, but without exposing the functions of the class that uses it. If possible, they should be able to use the engine as a library, and still tweak all the settings for the built-in effects.
This leads to more accessible methods to edit or create scenes, as well. Along with GUI interaction mentioned above, the changes you make should be persistent. Yep, that means loading and saving files for scenes. This feature will come eventually, but I already think JSON would be a good format to represent the data. It’s expressed in a concise manner, and there are many serializers/parsers for JSON out there, which is why I prefer using it.
With these changes, I can hopefully get closer to releasing an official candidate for people to download.