Thought I’d try a different format this time to see if I can make it easier to write these things. Hopefully it will encourage me to do it more often. Aiming for a sort of agile / stand-up / update format.
Next version is coming along nicely, lots of new exciting stuff going into it. The only technical hurdle ahead of me is to reimplement dynamic lighting, and hopefully make it better! After that I’ll begin prepping the next release.
What has happened since the last update?
Scala 3.0.0-RC1 & Scala 2.13.5 - Many thanks to auman for upgrading Indigo to the latest Scala 3 version!
Shapes! - A first version of shapes is now included as standard. There’s A LOT you can do with shapes conceptually, this first version is a limited functionality release to test the water. It contains Circles, Boxes, and Polygon’s that support borders of arbitrary thickness and can be filled with solid colours or linear / radial gradients. Worth noting that these shapes were initially implemented with the new custom shader mechanism - so if you know GLSL there’s nothing stopping you going the full Freya! (Note: If you do, I’d love a PR!! :-))
Custom Shader Data - Ability to supply custom data to your shaders.
Blending and BlendMaterials - As well as entity shaders, you can now write shaders that control how layers blend together, enabling things like simple post processing effects. You can also control hardware blend functions. This arrangement has been used in combination with entity shaders to re-implement the old image based lighting layer functionality, but now you can have as many lighting layers as you like.
Reimplemented screen effects as layer effects - The current Indigo version allows you some basic fixed post-processing effects. This has been reimplemented and expanded using the BlendMaterials mentioned above. One big difference is that the effects are layer level, as opposed to screen level, and you can optionally apply the effects to only the current layer or to the merged layer stack (below the current layer).
Reimplemented legacy effects - The old border and glow effects, which are quite cheap and I suspect of limited use, have been reimplemented just in case anyone is depending on them. However they aren’t built into Indigo by default any more, you need to add them from the extras library.
Reimplemented Distortion layers as Refractions - Not only reimplemented but also slightly improved. In the same vein as effects, I’m not convinced this is up to scratch quality wise and so I’ve moved it into the extras project. The implementation is achieved using entity and blend materials.
What is being worked on at the moment?
The current work in progress is to reimplement and improve dynamic lighting. The two improvements specifically are (hopefully):
Rethink how specular lighting is handled, a mistake was made during the original implementation that I’d like to correct.
Ambient lighting will no longer rely on image based ambient lighting.
There is also an unresolved question about whether lights will be global, layer based, or both. As it’s a forward renderer, there will be a light count limit in the next version (which shouldn’t be a problem for most use cases), so if you had global + layer lights that went over the limit, which should take priority? I’m sure I’ll think of something.
It’s unclear how much effort this will be as Indigo has moved from being an inflexible deferred renderer to a programmable forward renderer. But I’m hopeful it will be in the order of days rather than weeks.
What is expected to happen next?
Essentially release prep, however, a lot has changed in terms of the APIs and how Indigo works. So the plan is the work through the various demos and example projects, and while I upgrade them, take down migration notes, and re-assess the API choices I’ve made to see if I can make them clearer or reduce the impact of change.
Thanks for taking the time to read this little update. Looking forward to getting the next version out and seeing what people make of it. I'd also like to say thank you the expanding cast of people supporting the project. Whether you are helping financially, contributing code and documentation improvements, or just being around to help discuss ideas: It's all very much appreciated!