I invite you to read the release notes on GitHub first, but basically, I just released Annwvyn 0.3.2.
This version brings a new build system (using CMake), sets things to work nicely in Ogre 2.1, and add an automated testing framework, among other things
The goal of this article is not to discuss the state of the engine right now, but to be the canvas for my reflection about what should be Annwvyn 0.4
One of the biggest problem with Annwvyn is the toolchain. The biggest part is the difficulty to put 3D objects inside the engine. We are relying on Ogre binary mesh format. And it is really good, but proprietary (in the sense of "not a standard").
Currently, the Ogre exporter for Blender isn't designed for Ogre 2. But This is a problem that I expect the Ogre community to fix. (For now, Annwvyn assume Ogre v1 meshes are loaded, and will convert them on the fly to the v2 format internally) There's also no good way to edit those fancy HLMS PBS materials easily. But Spookyboo from the Ogre community is working on a material editor for the HLMS. This is an absolutely needed tool, not just for this game engine, but for the future of Ogre, as of now
For those who don't know, Material in Ogre have been drastically changed. The old material scripting system is basically gone for object rendering (but still exist to define post processing effects). Same goes from the RTSS (Real Time Shader System. A system to generate shader code in real time, designed for fixed pipeline emulation. That was a good solution... Years ago ^^"). They have both been replaced with HLMS.
HLMS stands for "High Level Material System". The goal of HLMS is to be both simpler and more efficient to use than the current system. HLMS is a modular extensible system that rely on a "library" of shader code and a templating system to generate the code that will render materials, in a manner that is best suited for modern graphics cards and graphics API (recent OpenGL. DX11, maybe in the -not so distant future- VK and DX12. But that's not the plan currently)
This new system, alongside drastic performance improvement, and future proofing, that pushed me to upgrade Ogre in Annwvyn to a currently unstable and experimental branch of development: v2-1 (from the previous stable 1.9
Blender is also upping it's game on the PBR/PBS arena. And that is supper exiting. They are working on a new real time rendering engine that is basically equivalent in term of quality with what we want to achieve here (and what Ogre is actually capable of doing, thanks to HLMS). I've seen over the last two years a lot of push from the community for making PBR rendering nodes for Blender's Cycles engine. It's good that the future of Blender goes to that direction.
Here's my current train of thought. PBR/PBS materials are based on physics itself. The meaning of the raw numbers that describe them doesn't change between software suites too much. Hence, they are good at being exported form one software to the other and rendering almost exactly how they should.
I'm hopping there will be a simple way to export directly from Blender 2.8 to Ogre mesh and material. The way HLMS works permit Ogre to ingest a JSON file that points to a few texture, and describe a few variable to represent a material. Not by scripting passes of rendering and blending information directly. In that case, I'm not really worried for the future of the "developement" toolchain/workflow.
What I'm worried about, and has been a big problem since Annwvyn is aware of the existance of Levels, is a level editor.
I don't think exporting a whole scene from a software like blender is the best way to go with this, nor scripting a level editor in Python above blender itself. But, what I learned with attempting to start working on a level editor is that it's quite an hard thing to do.
I started some work in that area. The idea is to have a Qt GUI application that ingests resources, permit the user to move pretty things, and output an Annwvyn Level XML.
I already experimented with that idea, and it should work. I have a test project with an Ogre Viewport inside a Qt "Main Window" applicaiton that will serve as a proof of concept. I just need to sort a few things on how to do basic camera and object movement in a not too crappy whay but it's easier thaid than done.
Concerning Annwvyn itself. I said earlier that I need to plan for version 0.4. I would be happy to see 0.4 be relesed in just a few months. The difference between 0.3 and 0.3.2 are allready considerable and everything has been quite broken by thoses changes.
The plan is to finally sort out some rendering issues (nothing too complex. Shadows are really problematic as of now), and to make the engine the most stable possible.
The old "test" project has been transofmed into a tutorial/sample/demo thing. That needs to show the maximum of features the engine has. Actually, I really need to list thoses features firsts... An automated testing suite has been added to the engine, thanks to a really cool unit testing framework for C++ called Catch. It's working great, but I still need to write a lot of test code.
Each part of the engine that I started attempting to test revealed some stupid bugs that where quite easy to sort out. There's probably many more hiding in the dark corners of the code source, and I hope to sqash the majority of them
Appart from that, I really should develop a small demo/game with it, and release it, as to see how Annwvyn can actually work in a real context. Annwvyn has just powered some student project that where made with haste, and that where nothing more than an excuse to actually work on Annwvyn itself.
If you ask for help any indie game developer, they will tell you that the stupidest thing you can do is to make a game engine, instead of making a game. The goal here was never to make games that could have a potential commercial success, but to be an opportunity for me to learn about VR. But in doing this, I managed to make a piece of software that wasn't as bad as I would thought it would be
So, the plan is to stabilize Annwvyn as much as possible. Fix the shadows and maybe tweak the HDR rendering a bit. Cobble together some assets and make a simple VR game that can be shown to people, and post it online.