EverEnding DevBlog, December 2020: The Finishing Touch

Every month continues to be weird in new and interesting ways. I have to resign myself to getting less done during December at the best of times, what with all of the distractions of the holidays – this year, there was much less physical activity since travel was obviously not very feasible, but I still felt like I had to take a step back for a week or so and try to relax. I don’t feel very relaxed, and other recent events haven’t helped in that regard, but an attempt was made.

As I posted the last update, I’d just started digging into the idea of a ‘modifier’ sprite – one which used the sprite image to modify background pixels rather than to render an image. I built a working version of this in fairly short order – the version demonstrated last month simply used the sprite as an alpha mask to modify background layers, and while that’s still an option it can also use the luminance of each pixel or modify it by each RGB channel separately.

I’ve been thinking about the concept of RGB channels in general, and while they’re a very useful method for storing color information I do think it’s kind of a restrictive approach. If we regard a color as a vector along three orthogonal axes – which is basically what RGB color is – then we ought to be able to rotate that set of axes to define the color space any way we like. This doesn’t make any difference in terms of what colors can be represented, but it changes how those colors get represented, and what the effects of per-channel operations like the above are. I added a hue rotation slider associated with the per-channel modifier effect, so you can rotate the color channels. The effect is fascinating to watch in action, similar to the prismatic effect on the back of a CD:

Writing this, I’m now realizing under this point-in space conception that the color rotation theoretically ought to be two values along separate axes – but looking into it briefly it seems that there’s a lot of theory about how to map color into space which has demonstrated that it can be done one-dimensionally. I’ll have to research this more later, as it may provide more insight into possible interesting visual effects.

So, with the modifier shader done I had more-or-less finished my checklist of things to do with the project, and I was ready to declare the sprite shaders complete! The thrill of that lasted a few hours before I realized the staggering number of things I still had to do.

First, the question of Unity’s multiple graphics pipelines came up. This is something I hadn’t thought about at all during development, but in addition to the old ‘built-in’ pipeline that Unity has used up until now, there’s also the new ‘universal’ and ‘high-definition’ pipelines they’ve been incrementally rolling out. These are basically a disaster of mixed expectations and misguided priorities, but a lot of developers are interested in using them – and the new pipelines’ approaches to shaders, in particular the bits dealing with lighting, are significantly different. The universal render pipeline, or URP, is not especially well documented, and it took me a couple of weeks to figure out what all I needed to do to get the sprite shaders working in that environment. The high-definition render pipeline, or HDRP, is almost maliciously undocumented and I’m not sure if I’m ever going to bother to get the shaders working in it, though I’ve laid the groundwork for doing so should I choose to.

After that comes the challenge of creating demonstrations of what the shader can do for use in trailers and tutorials. This isn’t inherently especially difficult, and is also rather fun – thinking about what effects are interesting and visually impressive and quickly throwing together demonstrations of how one would achieve them using the tools I’ve made. However, going through the process of building effects for a different scene with different assumptions than the one I’d been working in revealed a number of problems that needed fixing, some of which I’m still trying to figure out, as well as revealing weaknesses and oversights in how I’d implemented certain functionality. The demos themselves are fun at least.

Additionally, looking through competing sprite shaders on the store, it’s clear to me that I need to put some effort into making this more readily usable and into supporting a couple of effects that might be difficult or impossible to implement with the current feature set but would be highly desirable.

Finally, I’m going to need to write documentation on what the different shader properties do and how to use them, record tutorial videos, and cut a trailer demonstrating the capabilities of the shader. This was all stuff I’d intended to have well underway several weeks ago, before I got sidelined by the challenges of Unity’s multiple pipelines.

What I’m realizing now is that this is the closest I’ve gotten to finishing a significant project in a long time. Most projects I can either declare myself done with as soon as they’re satisfactory or keep on scraping away at in perpetuity – and, having set this one as a project I want to properly finish, to finish to a degree of quality where I feel good about charging money for it, has revealed to me that I am exceptionally bad at actually finishing projects. I’ve had to work a long time to get to the point where I feel okay about putting my work out there at all, but having it be technical work, work that can objectively function or malfunction, and having it be work I’d be directly charging money for, all acts like a targeted charge directly into the anxiety centers of my brain.

This has raised a lot of questions in my mind about my long-term work on EverEnding. Is what I’m doing actually a good way to finish a game, or am I setting myself to work on a project for perpetuity, to eternally avoid the pressure of finishing? The work isn’t bad, but someday I’ll need money, and there are other projects I want to work on at some point. The question now is, what can I do differently? The answer may involve trying to get more people involved in the project, but that’s a little tough when you have minimal financial resources.

Anyway, the next couple of weeks at least are probably also going to be working on this shader stuff: Completing the demo effects and making tutorials for recreating them, cutting together a trailer and maybe writing music for it, writing up the documentation, creating a store page, and fixing any more bugs I find along the way. It’s a little bit exhausting and a little bit demoralizing sometimes, but I am proud of this project and what it can do and I’d like to share it.

And I’d also like to make a bit of money for once as well.

If you’d like to help support this project or my writing, please consider supporting me on Patreon. Support at any level lets you read new posts one week early and adds your name to the list of supporters on the sidebar.

Leave a Reply

Your email address will not be published. Required fields are marked *