A tiring day yesterday, frantically aiming to be busy, productive, useful, so darting between ideas. Programming can be good for focus, so I started to update Argus with a few changes. These have taken all day today.
In the end, the changes were substantial, and require a new file format. The two biggest changes were made as a result of my experiences making the Frans Hals video.
The first change was the introduction of ranged lights. I've had this option for a while, but rejected it because lights could either be ranged or infinite, and the way the calculation works is that one can't simulate infinite range with any setting for the ranged lights. I rarely use lights either. Over 90% of the videos have no lighting and just use bright objects, so there wasn't much incentive to add this complex feature. Yet, for Frans Hals, ranged lights would have been useful because it would allow the horizon to fade to darkness rather than remaining visible. For some of these 'chessboard' videos I've cheated and used a black mask to artificially fade the horizon, but that deception will fall apart the moment the camera moves. I've solved the problem by creating a new vertex-shader, a new class of object that is affected by ranged lights, while keeping old objects that behave exactly as before. So it's not the lights that have finite or infinite range, but the objects can either accept lights as infinite or as finite, a best of both worlds. This took much more effort than expected and I expected that my second change would be easier - it wasn't!
The next change was to restore the Set Modulator event, to allow attachment (or de-attachment) of a modulator to an objects parameter at any point/frame. I've not found a need for it before, but it can be useful. Say an object is wobbling left and right, and you'd like it to move up at a certain point. You can type exact values at that point to move it, though that may be awkward over a large number of frames. Those values can, actually, be generated and filled in automatically anyway, but suppose you'd prefer the power of using a modulator, a visual graph of the motion. Creating one that activates at a specific point can be tricky. In Frans Hals, some mask-boxes rotate in complex ways, but also suddenly shift in size at specific points. Knowing the exact rotation at that point is tricky (I can, actually, see it; the option to view the exact position and angle of an object at any frame is there... but I can't then continue its normal 'flow' because it is moving via a complex modulation). This feature allows you to attach a modulator (a movement up, for example) at a specific place without affecting any other modulators (like left/right movement). This makes it super easy to move things in very controlled ways, effectively giving me 3 or 4 different ways of doing the same thing. I can move an object exactly, frame by frame and type exact numbers, start an object and specify total lifetime paths, or switch on/off any path at any time, or record the motion live with the mouse, or import values from a text file... all different ways to move an object and each useful in their own way.
Adding this was quite tricky, at first because of the GUI requirements of a new value that has 12 parameters. Mainly though it was because the currently moving actor is pointed to rather than copied to a track, so when adding a modulator, the global actor has its modulator values changed, making every appearance of it in the film also change at that point. So I had to copy it instead of point, AND create a new file format to match.
Now it is done. At times I thought that these changes are overkill and that I'll never use them - but new ideas and features have a habit of crying out to be used. If I'd not made these changes I'd probably keep thinking of ways I could use them.
In other news, I sold a copy of the album on Bandcamp yesterday, my first sale in a while and one to a long time customer and friend. This small sale meant the world to me in. I'm now thinking of future music, but it will hopefully be very different.