Lia's code and crafts

Workflows

Undisclosed client: legacy SVG pipeline (2021-2022)

Like everything, software can linger long enough to start seeing folklore form around it. That is what this assignment was about: opening the black box, figuring out what the tools actually could and could not do, and improving what I could. The studio originally used a custom game engine and kept its homemade SVG library when moving to Unity. As a result, much of the logic lives in a C++ plugin, written in old-school quasi-C style. Due to said library's incomplete support of the SVG standard, art assets also need to be processed with custom Adobe Illustrator scripts. This made for a very unusual mix of C++, C# and quasi-Javascript - luckily, that was a great fit for my own weird profile.

The first goal was porting the C++ plugin to Windows: it was originally limited to MacOS, which placed restrictions on which machines artists could work on and therefore on recruiting. This was also my opportunity to document the data pipeline extensively, from the custom file formats to the order of operations. Build systems are always a problem with porting work and this was no exception, since the original version was simply a XCode project. The easiest approach to avoid drift between platforms somehow ended up being running make through WSL to invoke a Windows version of clang.

The second step was a deep dive into the animation workflow specifically. It involved very little direct programming except for one import script, but much of it was a deep look into available tools that only an engineer or a tech-heavy tech artist could tackle. As during the previous task, I produced extensive documentation both of the workflow itself and of every limitation and problem that was encountered.

Finally, all of this investigating showed that the Illustrator scripts were limiting and buggy. Time-consuming workarounds had become tradition for the artists and falsely attributed to the C++ plugin, when they were in fact due to the scripts themselves! This turned into a multi-month adventure into the hellscape of Illustrator scripting, where official documentation is at best outdated and at worst missing, third-party documentation always incomplete, tooling mostly non-existent or buggy and API behavior often baffling. The whole endeavor deserves a few write-ups of its own, but have a highlight: if a script runs too many operations, the API document state can fall out of sync, causing a cryptic "MRAP" error message which is actually "PARM" backwards, for "bad parameter".

As the work wound down, we agreed that none of this was future-proof and my work had only staunched the bleeding for now. I provided guidance towards replacing all this with a heavily customized version of Unity Vector Graphics, and I hope that this work is going well!