There are two kinds of bad procedural content: The first is the generic kind, made by connecting a bunch of random rooms and hallways together, all technically unique but functionally identical. The second is made by connecting pre-authored pieces together randomly – and, while certainly far more interesting than the first initially, this quickly loses its charm if there aren’t many candidate pieces to place, becoming mere remixes of largely static content. New roguelikes have largely, in lieu of actually solving these problems, found ways to bypass them. Indeed, one is hard-pressed to think of any game that has actually generated an interesting environment in its own right. Spelunky’s worlds are fascinating due to their endlessly volatile and unpredictably interacting elements: Dead Cells’ movement is enjoyable enough that even exploring generic environments holds pleasure: But, when it comes down to it, procedural spaces simply never have the mystery, the awe, or the comfort that an authored space can create.

Why is that? After all, we can haphazardly throw game mechanics together and have them create an interesting mechanical system to explore, why not combine rooms and hallways in the same way? The answer, I suspect, has much to do with the ways we regard game spaces in the first place, even in authored content. The purpose of a room in a game is to be a place where an event happens. This game-purpose supersedes any narrative idea of what function the room is purported to have for the building’s inhabitants, if any is even specified. Walls are there for the player to be blocked by, take cover behind, run on and over, and if they happen to make sense as an object a person would intentionally construct then that’s just gravy. This tight relationship between gameplay intent and physical space is nearly impossible to maintain through procedural scrambling of gameplay or space, though. Absent this connection of intent, game spaces become completely garbled and nonsensical. Thus, procedural spaces in games have largely split into two camps: Either conquering the space is the entire point, and so its specifics are always relevant (as in Spelunky or Noita) or the specific dimensions so unimportant that almost no effort is put into them (as in Hades or The Binding of Isaac).

These are both fine solutions to the problem at hand, but I believe it must be possible to have a game generate a space that’s intrinsically interesting and pleasurable to engage with – however, in order for that to happen, it must have intent. What does that mean? It means a space can’t just be an arbitrary labyrinth for monsters to be scattered in (though frankly even many pre-authored games fail by that metric). Each procedural piece must have purpose and be placed according to that purpose, with logic similar to that a level designer would use to place the same pieces. The algorithm cannot replace the role of level designer, only abstract it, distance it, so that the act of level design still happens through the instructions given to the algorithm.

That works for most rooms, but to make exploration not merely interesting but exciting there must be some chance for anomaly. Say the system is generating a bedroom: 95% of the time it will have one entrance, one bed, one closet, maybe a computer, maybe a TV, and one or two shelves and windows. Some bedrooms are different though: Maybe one has a fridge, or three beds, a balcony, a sword, a trap door, whatever. It’s the contrast between the mundane and the surprising that makes exploration interesting – most of the time we see exactly what we expect, and sometimes we are surprised, and that is where the tension, the humor, the mystery lies.

As long as games treat their environments solely as places where things will happen, rather than places where things have happened or things might happen, places with history and organizing logic, those places will feel mushy and inert. Each place must have a reason to be, or there will be no reason to make it – or to make the script by which it was made.

If you enjoyed this essay, 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.

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.

It’s a new year, and I feel very odd. Estranged from myself – not by some sort of sudden disconnect, but as though I’ve grown so far from the architecture that defines me that I no longer feel like I have contact with who I essentially am. I keep growing because I want to be more, and it’s all meat and no bone.

A thought experiment: The universe, everything that ever has been and ever will be, is a point in space. Every other possible universe exists as a point in that space. These points aren’t integral, though: Each blends slowly, continuously, into the next, the same as 0 goes to 0.5 goes to 0.75 goes to infinite other numbers before it ever reaches 1. Our everything that ever will be exists at that one point, and every other possible universe exists somewhere else in that space.

For each other possible universe mapped in that space, there is some sort of operation to transform universe A into universe B. Some everything’s are very close to each other, and require only small shifts to transform one into another. Some are very far away from one another. If it’s just an extremely high-dimensional space, you could even measure the distance between them with the good old-fashioned Pythagorean theorem.

There’s a few things that are interesting to think about from this perspective. For instance, what realities exist in this space? It might be tempting to believe that any possible configuration of matter could exist here, that any ideal world with any desired outcome could be in this space somewhere, but as long as there’s some form of causality at all points then I don’t see how that could be true. Some conceptual universes would be internally contradictory, so perhaps this would just be the space of all possible real universes, rather than all conceivable universes.

Say you wish you were rich: How far is the universe you live in now away from one in which you’ve acquired great wealth? Well, that depends a lot on who you are. It’s pretty unlikely you’d just stumble across a lottery ticket, and really much more likely that someone in your family tree got rich somewhere along the way and you inherited it – that is, unless there were barriers in place keeping your ancestors from earning or keeping money. Depending on how robust and ubiquitous these barriers were, it may be that in order for your ancestors to have been wealthy you’d have to start looking towards ever more distant universes, and the further away you looked the less the version of you who lived in that world would be you at all. After a certain point your entire family tree would shift, grow towards prosperity like a plant towards light, and whoever your great-great- grandfather’s great-great-grandchild would be, they wouldn’t be you in any meaningful sense.

People talk about butterfly effects, about how if you shift any one trivial thing then everything connected will drastically change – and I think that’s generally true, but in such a continuous meta-universe as we posit that doesn’t really matter. If the butterfly makes a hurricane, that will be a more distant point, where we’re looking for the nearest possible point where a person who is (more or less) you becomes (more or less) wealthy.

For some people that point would be close, for some it might be far, and for some… it might not exist at all, in this space of real universes. Which is why it’s odd that we talk at all about equality – so many of us never had a chance to have a chance.

Here’s another question: How far away are you from who you want to be? How far away are you from the life you want to live? Are these points which are navigable from where you stand right now? Is the person who exists there even, still, you in any meaningful sense?

If you enjoyed this essay, 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.

I was thinking about the line “beauty is truth, truth beauty” – which, it turns out, is from the poem Ode on a Grecian Urn by John Keats, but I first heard on The Simpsons and had not until now bothered to find its origin, much less to read it (fortunately I’ve outgrown being embarrassed by only knowing culture through The Simpsons and Weird Al). I tend to think a lot about what truth and beauty are, what they mean to us, and what the relationship is between them, so I’ve always found the line of thought implied by this line intriguing – though, perhaps in the cause of rhythmic license, a bit abrupt and incomplete. What is beauty? Beauty is understanding. What is understanding? It’s the recognition of underlying patterns, seeing the symmetry and balance of cause and effect, perception of purpose and intent and reason. It is insight into how the part relates to the whole.

This is lofty, so let’s take it down a notch or two earthwards. What things tend to be visually pleasing to us? Bright colors, repetitive patterns, and smooth elegant shapes – traits which increase visual clarity and which help us to understand overall shape and intent, even when we have incomplete information. Similarly, what sorts of sounds do we enjoy? Rhythmic patterns, primarily in the human vocal range, with audible mathematic relationships between its different notes. We like these things because they’re presented for our understanding, and understanding is inherently joyful. Thus is beauty truth – however, just because something can be comprehended doesn’t necessarily make it true, so I would say, rather than beauty being truth, that beauty is plausibility, is consistency, all of which is itself readily perceived as true by those who crave a truth in that shape. If you instead perceive it as being misleading, though, then you will probably reject it; so, rather than beauty truth, perhaps perceived falsehood is ugliness, and its absence beauty by default.

Okay. So what? The importance of this idea is that it means our capacity to perceive beauty shifts dramatically over time – that not only is beauty in the eye of the beholder, but that eye gets trained over time to see different types of beauty. This has interesting implications for artists, because we are responsible not just for creating work to the best of our abilities, but also for becoming sort of evangelist/educators for our prospective audience. Especially if you tend to eschew common forms or styles for your work, whether by aversion or deficiency, it becomes part of the work to convince people that, no, these choices were not mistakes, that the work was genuinely intended to be this way – that there is something here to be understood.

Fortunately, many people are interested in understanding art – perhaps not very many, but enough are willing to put in the effort to understand why weird or experimental things are they way they are to make strange art occasionally catch on. There is joy, as well, in understanding that there is something in a work to be understood, and in working towards that moment of recognition, all the sweeter for its distance, and it’s a sensation some people crave.

It’s crushing to imagine how much beauty in this world we may never see with our eyes cast firmly towards the ground. It is good to make something beautiful: It is better to make that and make something you believe to be true as well, and some people never get the knack of it – or perhaps never even stop to consider what they believe to be true in the first place.

If you enjoyed this essay, 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.

I don’t think game designers talk quite as much about player empowerment now as they used to, and that’s probably a good thing. Power, from the player’s perspective, could be said to be that which lets them affect intentional change on the game world. In practice, though, “power fantasy” usually means the offering of bigger guns with louder booms. Sometimes lip service is paid to “empowering the player to make interesting and important narrative choices” – but even then the emphasis is on the world-changing reach of those choices and the bombast of their presentation rather than their detail, granularity, or emotional impact. It’s all about pomp and circumstance, so even these loftier goals of narrative expression often reduce back down to the aforementioned bigger booms.

If players really wanted power to affect the game world, to make material changes in its construction or systems, they could manifest that with mod tools. I suspect that more than that they mostly just want the game to tell them that they’re cool, and whatever choice they made was a cool choice for cool people. Maybe that’s what the idea of power looks like in our imaginations now. That is mostly how we portray it – powerful people are cool and beat guys up and everyone loves them, even as these traits have no intrinsic connection to power but for the associations we’ve built over decades of cinema. We’re chasing the fulfillment of this meaningless aesthetic shell of power, and we’re doomed never to find it.

The tragedy of the human mind is that it can only desire the idea of a thing, never the thing itself, and thus can never be satiated. There will always be a vast gap between love and the idea of love, wealth and the idea of wealth, food and the idea of food, and so any desire for these, unanchored by specificity, will soon become a wound that will never close. These unfulfillable desires are the sites of our greatest triumphs and of our greatest evils. The chase after ethereal half-remembered visions may power our art, but it still hurts to realize those dreams can never be reached – the itch can be scratched only enough to allay it, not to cure it. At the same time, the love of the idea of wealth, the idea of safety, the idea of purity, the raw desire for these unattainable ideas leads us to collectively leap off cliffs over and over. It’s like the idea of the love of money being the root of all evil: The love of any abstract idea over the reality it’s meant to represent will lead to great harm.

It is an important lesson all too often neglected that not all desires are meant to be fulfilled. The American dream, the American promise, is that dreams are made to be fulfilled and if you can climb to the top it can all be yours. So we have a system where the people on top, with more reason to be happy and satiated than anyone else in the world, still find themselves as far as ever from the ideas and fantasies and desires that brought them to this point, and the only answer is to seek more. More what? Who knows.

That’s only to speak of the desires that can’t be fulfilled. In addition, there’s whole classes of desire that oughtn’t be fulfilled – for violence and domination and cruelty, for destruction of the self and destruction of others. Most people learn somewhere along the line to keep these in check – to, perhaps, think lovingly of their dreams of mayhem while scrupulously ensuring that they remain dreams. If, however, you’ve been taught that your wealth and power ought allow you to realize any dream, and that the only thing that should ever stand in the way of these dreams is insufficient wealth and power…

It’s time to wake up. Not only can we not always get what we want, what we actually want is to want. Past a certain point it becomes your responsibility to parse out those desires that can be attained from those that must be simulated, and those that can be safely and responsibly chased from those which intrinsically cause human suffering to pursue.

This really shouldn’t be that hard.

If you enjoyed this essay, 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.

I think if there’s one idea I’d seek to dismantle, it’s the idea that there’s a single correct way to do something. I believe that this approach creates problems for two reasons: First, similarity of approach tends to lead to similarity of outcome, which is fine if one is, say, building a bridge, but less desirable if one is creating art – and even when building bridges, there might always be a better bridge to build. Second, the belief that there is a single correct approach tends to lead to the belief that we know what that approach is – which leads to situations like a doctor being blacklisted for daring to observe that doctors who washed their hands between handling corpses and performing childbirths tended to lose fewer patients.

This is not to degrade the value of institutional knowledge, just to suggest that it doesn’t comprise the bounds of possible knowledge. We like to conceive of knowledge as a placid pool with new facts dripping in bit by bit, and slowly making the pool grow, but it is more of a boiling stew – every time you drop in a new knowledge potato it creates a splash and displaces some knowledge gravy all over you epistemological stove-top. In the sciences, each dollop of knowledge gravy has someone’s career built on it, so such new potatoes are often resisted by luminaries in those fields – despite this opposition being contrary to the very pursuit of science. Or perhaps this never happens, I don’t know, I’m not a scientist, maybe it’s fine.

Anyway, the arts are different in regarding different techniques and styles as not being in direct competition with one another but in broadening the available range of artistic expression – or, at least, that’s the institutional perspective. Individual artists, meanwhile, frequently sneer at styles and techniques as being amateurish, debased, or obvious – presumably in comparison to their own.

Then we come to game development, which has somehow become worse than arts or sciences in terms of prescriptive approach, inheriting the worst traits from both parents. AAA games – that is, games with multi-million development and marketing budgets – have in particular trended towards a style somehow both gaudy and monochromatic. Many critics and consumers mocked games of a decade past for being excessively brown and uninteresting, all in the name of realism – but I don’t see the current trend of dreary gray wet-looking surfaces with occasional bursts of hyper-saturated light and glowing particles (which somehow don’t affect any cast shadows) as an improvement. Regardless, this is what the forces that drive consumer demand have determined ‘good graphics’ looks like – akin to Michael Bay’s Transformers, all numbing greebled detail with no greater meaning.

Naturally indie games have their own version of what good graphics are – colorful, crisp, high contrast at a stable 60 frames a second. These constraints leave a lot more room for expression, but still cuts out developers who don’t possess the time, skill, budget, or executive function to achieve those results. There is more permissiveness for having ‘bad’ graphics in indie than in AAA – after all, for a AAA game to be visually unimpressive is to betray its very reason to exist – but the range of visual expression deemed ‘good’ is still restrictively narrow.

My primary interest is in expanding the range of what can be expressed – in ideas, in art, in science, in games, in personalities. Any time I see a unified conception of what quality and correctness looks like begin to set in, like a menu burned into an old TV screen, I get itchy. I’m not necessarily dissatisfied by the art or technology we have, but imagine what we have yet to imagine! There’s so many possibilities, and we’ve barely touched on the vast scope of what could be.

Go break some rules. Go make something that looks like shit, that’s awkward and idiotic and juvenile, that’s completely dysfunctional, that’s insulting and worthless. It might turn out to be great. What would the point of art even be if we knew what it looked like before we saw it?

If you enjoyed this essay, 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.

I still find it fascinating to think how often we make stories about machines rising up to destroy us. There’s probably a few anxieties tangled up together in these narratives, and it’s intriguing pulling on those threads to see where they lead. One leads back to Frankenstein, to the abandoned artificial child growing hard and vengeful absent a father’s love – which story itself ties in fears of new technological capabilities trespassing in gods domain, and of careless treatment of those we have obligations towards causing far distant tragic consequences. One thread leads back to the nuclear bomb, a fear that we will invent the means our collective undoing as a species. One thread connects back to our often-unstated understanding that our prosperity, such as it is, is built off of the suffering and exploitation of people all over the world, and that this is unjust and those people might justly cast us down any day. One other thread ties to the understanding that we as well are being exploited, and technology is providing those exploiting with more leverage with which to do the exploiting.

All of these anxieties find a home in feverish imagination as killer robots and malicious artificial intelligences. I’ve begun to suspect, though, that the main thing we see when we look into the terrifying robot future is ourselves. Most automation, as things stand, isn’t actually automatic at all – just a way to allow people to work at a distance, to obscure their presence, to launder and anonymize their labor. On the flip side, most of the decisions that cause the most harm, that cost the most lives, are entirely human in nature, lacking in rigor and data, full of bias and fear and cruelty. What unites these decisions together, however, is that they are usually performed in the service of some sort of system. Some army or corporation or government sets a priority for something that must be accomplished, and otherwise normal people begin to completely disregard whatever ethics, whatever regard for human life, they might once have had.

We’re already very good at performing automated labor. We’re good at playing roles, fitting ourselves into systems, and avoiding looking up at the overall effect of our actions because it is in aggregate too complex and too horrifying to be countenanced. We can tell terrible parables of gray goo and terminators, but what makes these stories effective is how familiar they all seem, created in our own image.

I do not believe humans are evil – I used to not believe in evil at all, and I still don’t really believe a person can be evil, or even if an action in isolation can be evil. We are very good at performing social roles, and those make us capable of doing great harm no matter what our personal beliefs are. We’re scared of the machines because we’ve been them. We’re scared of the machines because we might be them still, just following orders, just acting as we are programmed to act. I believe now that, inasmuch as evil exists, it exists in the space between us, in the way we organize and understand power, in the way we are taught to treat one another. Evil is a machine, and we are its parts, and the duty is ours to see how it might be dismantled.

If you enjoyed this essay, 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.

It’s been a weird month in a completely different way from the way that last month was a weird month. I started off trying to do more animation work, but found myself making very little progress – a few frames here and there, but so few I doubt the casual observer would be able to see the difference between the combined animation now and as it was when I posted it for last month’s update. Around this time I got the news that I was getting gently evicted – which became both a huge distraction, as I ended up moving by the end of the month (albeit a very short distance), and a pressure to reevaluate what I was doing.

Between that pressure and frustration with the difficulty of focusing on animation, I tabled that work for the moment. With my immediate future feeling suddenly a bit less certain, I started thinking about ways to monetize more of the work I’ve been doing. Over the last year or so of developing EverEnding for Unity, I’ve created a number of tools and assets which might be useful to other developers – however, in every case to make it useful would require dedicating a significant amount of time to documenting and polishing them, making them not only useful but easy to use, and also developing a store page and trailer for them. I decided the tool which I was most excited about and which was most likely to become profitable was the sprite shader – I originally just wanted a shader which drew shadow effects properly (which Unity’s standard sprite shaders don’t), but as I became more comfortable with the work I started adding features to it. For whatever reason, I find the work of describing how images get rendered to the video card, vertex by vertex and pixel by pixel, to be tremendously exciting. It’s fun in much the same way as art, but at a slight remove – a distance which makes things more awkward but also grants you the kind of power and leverage a brush or pencil can’t provide, the power to immediately change everything about the way an image looks with just a few lines of code.

I got shadows and lighting working for my sprite shader a few months ago, but I didn’t really understand that much of why they worked. This month, I went through most of Catlike Coding’s Unity Rendering Tutorial series, which demonstrates how to create a generic all-purpose shader from the ground up and which I’d highly recommend to anyone interested in this field, and pulled in every idea which seemed like it still applied to a 2d surface. As I went I added in most of the features of those shaders – Multiple light sources, semitransparent shadows, normal mapping, BRDF shading – as well as several other effects, such as Photoshop-style blend modes.

Additionally, I began work on a special ‘modify’ mode which applies the color transform and displacement effect to whatever’s behind the sprite using the sprite as a mask. This actually raised some questions about how exactly this ought to work – should the displacement effect displace the pixels of the sprite used as a mask, or should it displace the pixels behind the sprite used as a mask? Should alpha alone determine effect magnitude, or should it be based on the individual color channels, or should it be based on the total pixel luminance? Because of these questions and complexities, I’ve split the modification mode out into a completely different shader rather than making it a feature of the sprite shader.

Over the last couple weeks, I’ve realized that in general I’d fallen overly in love with the idea of one sprite shader that can do everything. Thinking about it logically, there’s probably no scenario where you’d need one sprite to both draw as a solid opaque cutout which casts shadows and to have a custom blend mode – so now rather than one ultimate sprite shader, I have three which should cover most or all use cases: The depth sprite shader, the blended sprite shader, and the modifier sprite shader. It might be a bit harder to brand than an ultimate sprite shader, but I think it will be more usable, since all of these special features were getting more and more difficult to organize and optimize.

All of this stuff mostly works right now. Some of these blend modes required me to sample background pixels in the shader, which Unity provides a method for, ‘grabpass’, but which method is both unreliable and inefficient, being kind of a black box – this was causing huge issues, since exactly when the grabpass happened relative to the rest of the world getting drawn wasn’t exactly clear and seemed to be changing based on the position of the camera. Fortunately, I found a very useful resource on how to implement most of the most common blend modes without using grabpass. I may go back at some point and make another sprite shader that uses grabpass to implement the other blend modes, but it seems unlikely to be necessary given the vast range of possibilities offered by both the blended sprite and modifier sprite shaders.

As an example of something that can be done with the blended sprite, I’ve created a paper overlay texture – this actually has a normal map, so it’s not just a static overlay but changes with lighting

This paper overlay is an effect I’ve really wanted to get working since the very beginning, since I think it adds a lot to the sort of storybook presentation I’ve been going for. At the moment it looks a bit odd having everything move across the paper as the player moves while the paper itself stands still – I’ll probably change it so the paper texture scrolls with movement at some point, but that change is relatively trivial compared to the work put in getting this overlay effect working in the first place.

Anyway, that’s what I spent the first few weeks on. The last couple have been mostly dealing with moving, and dealing the exhaustion that comes in the aftermath of moving. Unfortunately this move is probably only a temporary solution, and I’ll likely have to move again sometime in the next 6 months – at least now I know what’s involved and can plan ahead a bit better.

So what’s next? I still need to finish up the sprite shaders – mostly done, but there’s a couple of features I’d still like to add, documentation to write up, and a store page to make. I’m hoping that can pull in a bit of cash over the next year, and once that’s done I’ll probably go back to do more animations and/or pick another tool to get up and running on the asset store. December’s likely to be a not-especially-productive month, though, as that’s usually the case with Decembers.

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.

I’ve been spending much of the last year, and particularly of the last couple of weeks, finally seriously pursuing a field of programming I’ve long found fascinating: Shaders. This is the perfect field for programmers who are also visual artists, as shaders are what determine how images get rendered on the screen in games and in other 3d applications.

A shader broadly consists of two parts: The vertex program, which interprets the shape of the object, and sometimes modifies it; and the fragment program, which interprets the color of the object, and usually modifies it – generally by way of various lighting, reflection, and shadow algorithms. This is, naturally, a gross oversimplification. Suffice it to say that, with an open imagination, the range of things that could be rendered and ways to render those things are effectively unlimited. In practice, such aesthetic ambitions seldom exceed or supplant the straightforward, if stringent, demands of realism – or, anyway, the hyper-saturation comic book version of realism that dominates the big-budget game space.

Many games, particularly indie games, don’t bother with shader coding in any substantial way. I mean, the shaders are there – any game made to take advantage of modern hardware uses them somewhere, somehow. However, for most projects the freely available default shaders are sufficient. Once you have something that gets images and 3d models functional in the game world, a lot of developers are perfectly satisfied to have all those things rendered in basically the same way. My ideas of how I want things to look, though, are a little more particular, and frequently unsupported by general-use shaders. The demanding nature of having a specific vision is one drawback to being both artist and programmer.

I have, meanwhile, also been preparing to move, and looking through my old art to decide what’s worth bringing along. It’s strange to think back to not too long ago, when it was me sitting there with pencil and eraser, paint and brush and water, when it was me interpreting the shape, when it was me interpreting the color, the light, the shadow, noticing the style of my own shading. Now I try to teach my video card to do it.

Artists really only ever make self-portraits, and everyone’s an artist. Or, perhaps more precisely, what artists make are reflections, and the artist is the pool that light reflects against, contorting this way and that to form light puppets. Most onlookers will only see the image on the surface – some will be able to read the ripples and understand the direction of the current. Many people regard themselves as pure disciples of technology, and fail to perceive the tiny versions of themselves, by way of assumption and calculation, projected into their code. In the same way that every character you write is a part of yourself, every program you write is an excerpt of your thought processes. Parts of you you might never have intended find their way in – and only by expanding your thought processes, only by opening yourself to new understandings, can you expand the scope of what is possible.

So I write shaders, trying to describe the process of seeing the world to a machine, that it can know how to show what I see in my mind to the world. So I write words, so you can know what it is to etch an aesthetic autobiography into algorithm.

If you enjoyed this essay, 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.

After you spend a little while doing creative work, you tend to notice certain themes recurring throughout your creations. I have written here about my current project, EverEnding, but seldom in terms of its story and themes – I haven’t spoken at all about the project I thought of first, and which is on extended hiatus, Mechropolis. The themes of Mechropolis are, as may be evident from the title, artificial intelligence and life after death; following a set of three characters all straddling the boundaries of dead and alive, organic and synthetic, and using them to explore ideas of what it means to be made for a purpose – and then to be discarded.

Incidentally, I suspect that when artificial intelligence does come to manifest itself one way or another, it will take a very long time for us to notice. Consider how poor of an understanding and how little respect we have for animal life and intelligence – hell, consider how poor of an understanding and how little respect we have for the life and intelligence of humans who look slightly dissimilar to us. We convince ourselves of patent racial falsehoods every day, make manifold excuses to not perceive or understand the intelligence of others, and you would have me believe that we have any idea that artificial intelligence looks like? It may have already arrived, for all we know. Given our history of treatment of those we deem our social inferiors, it would certainly be in the best interests of any artificial mind to keep on the down-low.

Anyway. The themes of EverEnding are less immediately obvious, but similarly have to do with beings who were created for a purpose and exist somewhere between life and death, long past the purpose they were originally crafted to serve. Noting themes which you’re consistently drawn to, which have ended up woven into your every idea without ever making a specific decision to include them, can be mildly unnerving. What anxieties do they reveal? Are you doomed to always circle the drain of the same few grim fascinations?

I think what fascinates me about the idea of artificial life is a sense that we exist in ways that are far more similar to those of an AI, a golem, or an angel than we generally care to admit. Though we weren’t made explicitly to serve a purpose, many of us have had purpose instilled upon us, or claimed purpose for ourselves – and, once you make a decision to be something, it warps everything in your life around that focal point. The question, when meeting someone for the first time, when wanting to quickly understand who they are is: What do you do? What is your job? What is your function? I have a sense of this as being a particularly American outlook, but I have little basis for comparison having not left the country.

So we find ourselves a role, and we begin building ourselves to fit into it. We learn skills and forget others, we embrace passions and forget others, make friends and forget others, snip off bits and pieces of our personality that jut outside the mold we’re trying to fit into. We tailor ourselves to suit a purpose, and live defined by that purpose. Then, very often, we outlive that purpose and have to figure out who or what we are afterwards, slowly forgetting the things we learned and remembering the things we forgot, regaining a shape we abandoned long ago. After this little death may come a little rebirth, a new sort of life less shaped by the purpose it must fulfill – but this new life, being defined in different terms, can never entirely coexist with the lives of servitude to purpose that surround it, and always will straddle these invisible boundaries, always be out of place, undeath, unlife.

Both games are about the aftermath of some sort of disaster or collapse – in one case the end of the world and in the other the mere collapse of a nation – and the reshaping that happens afterwards. As we all drift, unmoored and unmanned, captained by greed and idiocy and sailing off the edge of the world, I know now why these are the themes I’ve felt compelled to explore. At this point I only hope I get a chance to actually complete these projects – and that there’s still an audience left for them if I do.

If you enjoyed this essay, 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.