Janus 1.7

I’ve just released Janus 1.7 which is a major update since a long time.

This cycle started when Mikael Burman, a Technical Supervisor working at Ubisoft Massive looked for a feature where Janus could break out passes without loading the scene in. Well, as it turns out, more than seven years ago, I was wishing that very same feature. Back then, however, the engine wasn’t mature enough; there were too many things to address, and the feature itself was a daunting task which, I had thought then, required an extended development. This feature was called the ‘offline method’; offline denotes that the scene file is not loaded into memory, but that the file will be parsed directly by Janus without pre-processing. I don’t know if this is Janus’s claim to fame (because Janus is not really that popular), but I  don’t know of any other render layer offering that can do that.

Had I attempted to do this back when I wanted it to, I very much think it would have taken me at least three times longer to do, and the coding wouldn’t probably be as clean that I could build a lot of future development on top of it. I credit the relatively slow and deliberate updates that led up to 1.6 with the robust base that I built the offline method on.

Janus’s breakout engine has two processing phases. The first phase is scene pre-processing, which prepares all objects for scene parsing; in this phase the items are ‘tagged’ with their own particular settings based on final evaluation of that pass. Key Layout functions are employed here which help in exporting shader-based overrides, and other peculiar tools such as mesh combine (combining separate meshes into one object during breakout).

The second phase is scene parsing, which opens the scene file and starts parsing the scene out, line-by-line, looking for keywords and tags, and dumping it to another scene – the breakout scene – with the data modified.

In the offline method, the second phase was generally left untouched, except perhaps for some additions to new tags that were related to the offline method that needed to be considered. It was actually the first phase that was particular different. In fact, the engine’s first phase is, for the most part, bypassed when the offline method is being used. Some of the code was still used, of course, because I couldn’t possibly think of changing the main ‘trunk’ procedures. I changed some of the called functions to imitate what was already going on in the ‘online’ method.

But this didn’t change the very base limitation of not being able to deal with shader-based overrides and dynamic mesh combination. Of course, these are actually possible, but it entails a lot more work. While I have some functions designed to write shader-based overrides directly into .lwos, my suite is not comprehensive enough for what is required. And dynamic mesh combination is a bit further away from my reach because I don’t have any code pertaining to handling .lwo mesh data.

I’m not sure if it’s worth the time, as well.

Lastly, there are still some things that can be addressed in the offline method. One disclaimed limitation is the fact that once you create your groupings in Janus, you cannot change them when the scene is unloaded, and the user is working in the offline method. This is because the groupings have been tagged into the items, and this used the parenting information from Layout to get those items tagged correctly. Perhaps there is a way to re-assemble the hierarchy internally when the the file is loaded as offline so that groupings can be changed around. It is a bag of bugs, I’m sure, but maybe it can be done on the side.

At any rate, I’m still busy with other things non-technical in nature. Truth be told, at this point I’m just more eager to use Janus for the stuff I’m doing than coding it.