September 2021 Summary
I was somewhat frustrated with my self-discipline this month. I had intended to get busy finishing character animation, particularly in the SU-SuitingUp sequence. However, I wasn’t idle — I got a lot of other things done.
Worked some on animating SU-1-B (Georgiana with the Tech) and tried an experimental solution to animating SU-1-C to explain the “this doesn’t feel straight” dialog, which seems promising, although I need to repeat it.
Discovered a problem with fonts breaking in “Lunatics!” Inkscape SVG files in my source tree. Fonts were renamed and moved around for Ubuntu Studio 20.04, and it broke dependencies. Unfortunately, the text becomes completely invisible in Inkscape — there’s no way to even tell it’s there, except that I know it’s supposed to be. I had to string-substitute font names to get it back.
But I also learned that Inkscape 1.x provides a option to specify a custom fonts directory! This means I can include fonts in my source tree and reference those to open the affected files. This is really how I wanted to manage fonts in the first place, so I was really delighted to find this feature had been added.
Finished condensing source file trees and started consolidating the “Publications” directory, including product designs from the “Business” branch of the project.
Refactoring to a new workflow with Kdenlive. It turns out that Kdenlive source files are legal MLT files, and so they can be loaded into Kdenlive as clips. This means it’s possible to nest the Kdenlive files.
This also provides a way to get around the problem of replacing video files with image sequence files (which Kdenlive handles differently). By wrapping the shot (whether frame sequence or video) with a Kdenlive file, we make them look the same to the calling Kdenlive edit. Also, I discovered that Kdenlive will now use relative links when working with clips stored below the edit file or in the same directory. This provides a way to adjust the Kdenlive files to have proper relative paths in my source tree.
Experimented with 5.1 sound mixes for some of the music tracks, after I got my 5.1 sound system working again.
Tested Audacity 3.0.4, which has the new unitary save format. That seems to work okay, but there doesn’t seem to be much else in the way of new features (which is not really a bad thing).
Worked on several “Lunatics!” product projects, including designing a vinyl soundtrack album and getting a prototype of it produced via Kunaki.
Continued working on “Ten Years of Film Making for ‘Lunatics!'”
Finally created a Mastodon account on mastodon.art. Started growing a small following there and connected with old friends and contacts who are on Mastodon (not that many, but several of the Free Software people).
Fixed the 5.1 sound system on Sintel. This was almost as simple as just plugging it in. My theory is that Ubuntu Studio 20.04 supports the USB 3.0 ports on Sintel properly now, so the problem with plugging the sound system in directly went away.
Read Cory Doctorow’s “Information Doesn’t Want to Be Free”.
Refiled the hardware manuals. Got rid of manuals for things we don’t own anymore, and organized the manuals by domains to make it easier to find them in the future. Created several hanging files for them all.
A Little Gardening…
I had a good break in August and a chance to reassess some things. But it’s September, and I’m back to work now!
In the last few days, I’ve been merging, sorting, and pruning project source trees — getting rid of some ‘technical debt’ I’ve accumulated. Among the main issues:
Some time ago, I realized I had a accumulated a lot of tests and image files all through my source tree that weren’t checked into version control (and quite a few of them shouldn’t be, because they aren’t “source”).
I did a new check-out from Subversion; renamed that ‘lunatics’, and then renamed the old tree ‘lunatics-unversioned’ (after removing the .svn directory). Every once in awhile, I would find something that wasn’t checked in, and I’d go through the ‘lunatics-unversioned’ tree to find it. If I was doing it right, I would then copy it and check it in, but I certainly wasn’t perfect about this.
In some cases, it’s not obvious that I’ve broken the dependency chain, because some of the software (notably Blender) caches image data. So my Blender models would have “packed” copies of the textures, but the original textures wouldn’t be saved separately, and (more importantly), the SVG drawings that rendered the textures wouldn’t be included (I no longer need to edit them, because I’ve already rendered the result, but you would, if you wanted to make changes, which is the point of keeping source files).
I had started gradually cleaning out ‘lunatics-unversioned’ in 2020, though not in a really systematic way, and once I got down to files I wasn’t sure about, I pretty much stopped.
That was bad enough.
But then, in October 2020, my hard drive started to crash (you may remember me posting about it!), and some files became unreadable. I recovered the source tree on the replacement drive initially by doing another checkout from Subversion, but I knew that not everything had been checked in when the crash happened. So I made a backup copy of the old source tree, minus whatever files weren’t readable, and called that ‘lunatics-2020-10’ (i.e. snapshot of Lunatics source tree from October 2020).
So now I had three unmerged versions of the source tree!
And so, once again, I would occasionally find stuff I didn’t have committed, and I’d go dig in the snapshot to find them. But not systematically.
I have similar problems on the “Business” side of the project, and a lot of content that is not stored in a consistent scheme. E.g. does a poster I originally designed for our first Kickstarter go under a folder for that Kickstarter campaign, under ‘presentations’, or ‘product design’? Or should it be on under “Production/Publications”, since it uses character assets?
I realized that all this disorganization was costing me a lot of time, searching for stuff when I needed it, instead of knowing where to find it.
So… I decided I needed to do some digital refiling, and I have spent the last few days (end of August and beginning of September) cleaning house.
So far, I’ve merged ‘lunatics-2020-10’ entirely — either back into the current/main ‘lunatics’ source tree, or when appropriate, into “Publications/BTS” (“behind the scenes”), as with test images that I might want to include in articles or featurettes about the project’s history.
I’ve also very nearly finished with ‘lunatics-unversioned’, though I ran into some sticky decisions about the best way to handle “image sources”.
I had been storing the textures in a “textures” folder beside the Blender files, because that’s where Blender expects to find them by default. When I had a source file (SVG, KRA, XCF, Blend, etc), I would either store it also in “textures” or create a subdirectory “textures/src” and put it there (and I wasn’t consistent).
But in general, it’s a bad idea to have a directory that two different programs are entitled to operate on. Also not a good idea to have ephemeral, generated files (the rendered output) next to permanent source files.
You can easily lose or corrupt data that way, if you mix them up.
Just this morning, as I write this, I decided on a better policy: I’m creating folders named “imgsrc” adjacent to the Blender files (in the same model directories) and moving the permanent source files to that folder. I’m checking the SVGs in Inkscape and trying to configure them all to render their output to “../textures” or other appropriate ephemeral directory, which I’d then use to access from Blender. Then I can just delete the old “textures/src” folders (now empty) and remove “textures” from version control, since they don’t have any permanent files in them.
In some cases, the images are the originals (e.g. a NASA elevation map for the Moon), and then rendering will just be to copy or rescale them from “imgsrc” to “textures”.
I do not have a “build script” for these files at this time. This is the sort of thing that RenderChan can handle (I think). It’s also possible to tease software build scripts like “Makefile” into doing this kind of work, though I don’t think I want to. Or you can just write bash scripts for it, in many cases. However, I actually did these manually, and I don’t think I’m going to spend the time to automate them all.
One complication there that might need looking into in the future: generating associated textures from Inkscape (e.g. color maps and bump maps) is difficult to automate in a sensible way. The convenient way to draw them is to keep them all in one file, on different layers, and then set the layer configuration and export PNG images. But there is no convenient way to save multiple layer configurations, or call them from the command line when invoking Inkscape from a script.
This might be something that could be done with a scripting extension in Inkscape, but I’m not sure how. Similar problems occurs with Gimp XCF or Krita KRA layered drawings used in the same way. Of course, you can break them apart into separate files, but then you lose the alignment, or have to remember which file is the “master” from which the others should be made.
Of course, as with cleaning out the house or garage, I always find cool stuff I’d forgotten about. The lead image for this post is from a series of tests I ran in 2014 of creating billboard-based grass and weed turf. The individual grass and weed plants were painted in MyPaint (today, I might have used Krita for this):
One of the original output images from MyPaint, where I impressionistically painted weeds and grass plants, based loosely on various photos from the Western Kazakhstan region that I found online. I don’t know what all these are, botanically, but just painted some of the common types of weeds I saw in the pictures.
A billboard grid image I created as an SVG file, with the images cropped from original sketches in MyPaint. This puts them in an exact grid, to be used in Blender. You’ll notice, I also included some reflections to increase the variety a bit. Also, I made several of these, with different types of plants, giving me a little more control over their distributions.
With the billboard grid texture, it is possible to set up a particle system in Blender where each particle is rendered as a billboard selected randomly from this grid. With several overlapping particle systems and various settings to randomize particle position and size, you can get a nice distribution of painted grass images to form varying densities and distributions of plants, such as these:
Painted billboards grass on a test square in my “Greens” model folder.
In general, I found that these painted grass effects were both faster and better looking than any of the grass and weeds that I created directly in Blender (where high-poly models would result in terribly long render times and low-poly would result in very poor appearance). At least this was true for backgrounds, where I needed large expanses of grass and weed terrain.
The “Train Station Exterior”, “Kazakhstan Railway”, “Cosmonaut Trees”, “GCS Monument”, “SSS Monument”, and “Launchpad” sets all had grass and trees created this way.
It also works for rocks and gravel, like the embankments for the railroad in the “Kazakhstan Railway” set.
Test frame from when I was working on the Kazakhstan Railway set. There are billboard-particle rocks forming the gravel beside the rails and billboard-particle grass, weeds, and bushes on the right-of-way. Since there were multiple particle systems with different clumping patterns, the weeds are distributed unevenly to create more variety. Where there are gaps in the particle systems, you can see the mottled green and brown texture I used to create the impression of low plants on the semi-desert “steppe” terrain.
I hadn’t got it working for Lunar terrain. But I think it might be possible to handle finer impressions of pebbles and craters this way.
When the camera got close enough to the plants, like at the beginning of the “train sequence”, the changing perspective would start to blow the illusion with the billboards, and I used a small number of “hero” models, made in Blender, to put in the foreground, like these:
For closeups, I did have some “hero” 3D modeled plants.
Since these are 3D models and close to the camera, the perspective changes noticeably as the camera moves past them. Honestly, I probably could’ve gotten away with using paintings for these too, but I liked the models and I had already made them by then!
I’m planning to spend a few more work days on reorganizing and cleaning up sources, and then, of course, checking this all into Subversion version control.
However, I’ve decided to put off making changes to the version control or digital asset management system until I’ve completed animation (and hopefully rendering) on Episode 1.
I plan to spend most of this month (September) on character animation. There are three sequences that need character animation work:
- SU-SuitingUp: Although we have some basic animation, there are a lot of minor fixes needed and some of it just has to be done from scratch. I have shot some reference footage to help me with this, so we’ll see how it comes out.
- SF-SoyuzFlight: The interior shots of the crew pretty much have to be done entirely from scratch, although, since the characters are strapped in, the the movement required is fairly minimal. That whole sequence with the light shining on Georgiana and her turning her head towards the Earth has to be completely recreated (the sequence in the previews is still from the original “Teaser Trailer” Production in 2013 and all the assets are out of date — but I can still use it as reference).
- TR-Train: The animation file for the interior action on the train at the beginning of the episode is in very poor shape. The characters were imported and animated at the wrong scale. Then some problems were “fixed” in a not-so-good way, and the result is going to take some effort to rescale and untangle, before any tweaks to the animation can be made. I think there may also be some broken asset links.
After that, there’s a few fixes to mechanical animation that I’d like to attend to — the movement isn’t quite right on the staging exterior shots in SF, and I still have to recreate the “pod-staging” sequence with the updated models and rigs. And then, of course, I need to complete the sound mixing and assemble the whole episode for publication.
I’m certain that will take all of September, and possibly quite a bit of October. But if I can at least finish it in October, then I’ll be really close to completion, and maybe I can look into the problems with project software and IT (there are many and various) in November.
New Custom Fonts Directory Option
I was just cursing the inability to package my project fonts so that Inkscape could access them in my project SVG files (again), but then I found a reference to this option.
I had been struggling with SVG files, having to update font names, after what seems to be a recent shake-up in fonts on Debian/Ubuntu. I found that I had documents referencing “URW Gothic L”, but the current equivalent is “URW Gothic”, and what was “URW Palladio” is now apparently “Tex Gyre Pagella” (yeah, that’s real intuitive).
I’ve tested this out in Inkscape 1.02, and it seems to work.
I tried downloading another version of Palladio, “URW Palladio ITU”, putting it into my “Fonts” directory under graphics, telling Inkscape to use my Fonts directory, and yes, there it is — I can now set fonts to “URW Palladio ITU”.
That’s very nice!
Of course, it means collecting all of the fonts I need for the project, and altering the SVG files to use those, instead of O/S-installed fonts. But it’s probably a future-proof solution, since I can make sure the necessary fonts are available in the sources.
I’m not sure how this will handle the Cyrillic extensions to Palladio, which I used in my texture art, but I’m sure I’ll be able to find solutions for that. If nothing else, I now have a simple way to use unicode Cyrillic fonts that aren’t packaged for Debian/Ubuntu.
Source Merge Completed
I’ve finished merging the source trees into one tree and committing the changes to the SVN server:
This also brought in the renumbered episode sequence, with stubs for planned episodes. I don’t know what’s going to happen with those, yet. I hope we’ll find some way to make them, but obviously that will require some kind of scale up of production or scale down of the goal. I’m not making any decisions about that until after releasing Episode 1, and possibly Episode 2 — my goal for the latter is to apply more or less the same production workflow as what we ended up with on Episode 1, and see how long it takes.
Then the plan is to use that to inform what changes we make to complete Episode 3 in less time, even though it will be a more complex project.
As we are approaching the tenth anniversary of our first successful Kickstarter campaign (which finished Dec 19, 2011 — I looked that up today), it’s easy to get discouraged about production time. But on the other hand, I remind myself that we never raised money for any of the successive attempts, and just pressed on with what we had. It’s also fair to described the entire process on Episode 1 as “not so much production as experimentation”. Seen as a long learning process, it’s not quite so bad!
This, like many things on this project, took me longer than I predicted, but I really do plan to get back to animation tomorrow!
Well. I finally got a Mastodon account. I had been holding out until I could install my own server, but lately, I’ve realized that the more stuff I let other people host, the better for my sanity.
I’m still just getting used to the platform, but as it is an open-source, federated social media, I am going to try to make it a priority to post there on a fairly regular basis. I look forward to seeing you there, if you’ve got a Mastodon/Fediverse account (anywhere).
Fixed My 5.1 Surround Sound
Quite awhile ago, I added a 5.1 sound system to my workstation. This consists of a 5.1 speaker system, with surround speakers mounted on the wall behind my desk, and the others around the (main) monitor.
And a USB external Soundblaster module from Creative Labs (which does not introducing crackling noise, unlike the soundsystem built into my motherboard).
Due to a failure of my USB hub a few months ago, though, I disconnected it, so that I’ve been using the built-in speakers on my monitor for sound for awhile. Yesterday I “fixed” it.
Actually, I think that’s a little bit of an overstatement. I tried plugging it plugging it into one of the USB 3.0 ports on my computer that did not work when I first attempted to install the system (which is why it was plugged in through a USB hub before). And it Just Worked™.
Which is probably because this is now Ubuntu Studio 20.04, instead of 18.x, and probably has updated USB drivers, I suppose.
This has now allowed me to start playing around with 5.1 surround sound mixes in Audacity (again). I had to search again to remember how to do this. You have to enable advanced mixing options for file export (Edit->Preferences dialog):
Then, when you go to File->Export Audio…, you get a mapping dialog to control how the tracks you have will be mapped onto the output channels:
It doesn’t identify the channels for you, but I looked this up, and the standard order is:
- 1: Front Left
- 2: Front Right
- 3: Front Center
- 4: Low Frequency Effect (LFE / Subwoofer)
- 5: Surround Left
- 6: Surround Right
Note also that these are called “channels”, but all are considered one track in the resulting FLAC file. I’ve been previewing these by playing them back in VLC.
Audacity does not, unfortunately, allow for correct playback of 5.1 sound, although surround sound features are supported in Ardour for mixing.
Kdenlive didn’t used to support 5.1 sound, though I just tested loading a 5.1 clip, and it seems to recognize it — the clip preview shows all six channels. I’ve not yet tested whether it can output corrected multiplexed 5.1 audio and video.
It’s Been a Rough Restart
Well, it’s almost the end of September, and I’ve done very little animation, despite my resolve to get started on it. I have done some other things, trying to get myself motivated, but I’m showing a lot of signs of burnout, and a hard time finding the motivation to get started on creative work is one of those signs.
I don’t think the burnout has much to do with “Lunatics!” It’s been a rough couple of years for the world in general, including me, and I’ve been close to the epicenter of some of the more ridiculous politics. It’s hard on my humanistic optimism, you might say.
But I have done a few useful things.
As I am getting more fed-up with Facebook, I’ve finally jumped into the Fediverse. Find me at:
I’ve been wanting to do that for a few years now. I had been telling myself I’d do it by running my own server. But after all this time, it looks like I’m not really going to do that. I waffled quite a bit about which server to get on — whether to join an art-focused or software-focused server or something else entirely. Finally just picked one. It’s not supposed to matter that much, after all.
I hope it goes better than my experience with Diaspora did (that account is technically still there, but Diaspora is kind of a wasteland now). The main issue was that I wasn’t able to find people to connect with on Diaspora, for whatever reason.
Mastodon seems to be going better, but it’s only been about a week. I have managed to find some people I know and followed some new accounts as well.
It’s still a small audience, compared to Twitter or Facebook, but I think it’s an important one for an open movie project.
And, of course, I did a HUGE reorganization and condensation of project files. It’s much better now. This includes adding fonts to the source tree to support the Inkscape files that need them, although that is still a work in progress.
All of that is checked into the Subversion repo on the project server.
On the other hand, that is a reminder to me, both that the server software REALLY needs to be maintained in general, and also that Subversion is really not configured correctly on it (I don’t think we really should be using Apache to manage user authentication, and we ought to have read-only public access. Also, HTTPS isn’t configured correctly, and we really ought to have a signed certificate, using Certbot).
There have been a lot of minor technical frustrations. My UPS failed and I had to stop to replace the batteries:
I hope this battery fixes the problem. Having the computer switch off unexpectedly is not fun.
And my pricey Philips monitor has developed a fault. I’m probably going to need to get warranty service on it (fortunately, it does have a 4-year warranty, but how do I get it serviced? Am I going to have to ship this behemoth back to the company? Have not looked this up, yet)
I struggled mightily with trying to animate the shot SU-1-C, which is this shot of the cleanroom tech and Georgiana:
But I’ve finally decided that I’m going to have to make some improvements to the assets before I can finish it. I think I need to use an actual “ragdoll rig” on Georgiana’s doll (which is a ragdoll, so that makes sense).
I also think I have a method to improve the next shot, SU-1-D:
The notion was that the suit wasn’t quite on straight, and the tech helps Hiromi adjust it, but there wasn’t really anything happening in the shot. I think I’ve figured out a way to cheat this by twisting the rig on Hiromi’s arm to make it look like the tech has turned it to fit better, though I haven’t quite got the animation working.
All through this, I’ve found that the character rigs aren’t actually linked correctly, which means, among other things, the scripted rig controls (such as snapping FK/IK rigs) were not available. That’s very limiting!
And for reasons that only make sense to my demented artistic id, I designed and purchased a vinyl soundtrack album for “Lunatics!” Even though I don’t actually own a record player. Go figure. Given that it cost me just over $40 wholesale, including the shipping, I’d probably have to charge over $100 retail, and I’m not sure if anyone wants to pay that much. So, it’s probably not the most practical item, but it did feel really nice in my hands. Maybe I could give one out in a drawing at an event or something?
Look. I made an LP. I’m still not sure why, but there it is!
I am working on a CD version, of course, which is probably going to be much more affordable, longer running (almost 80 minutes, versus 44 minutes on the LP), and higher quality. But it won’t quite feel like this.
I do feel a little weird about working on the soundtrack stuff, when that’s one of the less original parts of the project (we haven’t commissioned any original music — this is all “found” music, although featured tracks by Elaine Walker, J. T. Bruce, and Distemper will be released under By-SA for the first time in our project, by special permission from the artists).
I also got my USB 5.1 surround-sound system working on my workstation again, although there is still some kind of weird software interference between Audacity and VLC that is very annoying.
Audacity doesn’t support playback of 5.1 sound, though you can export 5.1 FLAC tracks from it and listen to them in VLC — which is where the interference between the two gets particularly annoying. Specifically, running Audacity seems to break VLC’s sound system access. I still don’t really know what’s going on there.
I’ve tried remixing some of the music to sound better on 5.1, although it’s really just experimenting. The really interesting part will be creating soundscapes to go with the show, with better spatial effects.
Unfortunately, the panning tools for 5.1 sound are not that mature. Ardour has a simple 5.1 track panner, but it uses a fixed model which is not that accurate to real 5.1 sound systems (doesn’t quite have the speaker spacing right).
I have installed the AppImage of Audacity 3.0.4 on my workstation and tested out the unitary save format, which is nice. I haven’t notice much else that is different (which is not a bad thing — it looks like a much easier transition than going to Blender 2.8+ is going to be).
So, it’s not like I haven’t been doing anything. Just not so much animation, which is what I had planned to spend the month on.
For October, I was thinking of tending to some software issues, and I think I might go ahead and do some of that work, as I try to work through my art block issues.
I had planned to make this ceiling hatch in the soundbooth fully removable, but it never fit quite as well as I’d hoped, so finally decided to just screw it on. I’m going to have to add some drywall in the gap, though.
After all the work around the place in August, I had a lot of debris to pick up from the yard. Studio cats, Patty and Pirate are “helping out”.