As you may have seen in previous entries, I want the game to have a mix of interiors ranging from old and murky 1930s decors to more modern 70s and 80s styles (the game itself is set in the 80s- albeit an alternate reality).
The first task was creating a custom shader that could take walls, floors, even props and apply different colours to them. Manually creating unity materials for each of these, then a range of colours wouldn't really be feasible due to the sheer range of them I would need. Creating a custom shader with a map that told where to apply certain colours seemed to be the way to go. I'm a novice when it comes to writing shaders, but thankfully Unity's new shader graph came to the rescue here, and it didn't take me too long to come up with something that functioned as intended. Remember that green striped wallpaper that was applied to every single interior wall before? Well now I can have that in any colour combination I want. Progress!
In addition to this, I also wanted to represent neglected/abandoned apartments by having an additional dirt map that I could apply also using the shader...
Now I've got a base material that I can alter using a couple of simple inputs. But how do I get my game to look like the style I want? I would have to come up with a system that selected colours similar to the designs I mentioned a couple of months back.
I decided to make a custom palette that features 5 colours: 2x Primary and secondary colours that compliment each other, along with a neutral colour. I used scriptable objects, so I could easily create palettes in-editor.
After some messing around I found a great way to pick these 5 colours. Using images found on various sites and design books from the eras I want to mimic in game, I use coolors.co to pick a complimentary palette from them. It's a great free tool that allows me to cycle through several palettes from each image to get one that I like. I can't export into my scriptable object directly, but copy and pasting the colour hex codes doesn't take long!
As I also wanted the game to pick from these using citizen's personality data- as I wanted someone's apartment to reflect their personality to some extent. So I also added some variables to the palette object that enable me to do this. I settled on these 4 variables:
Modernity: How 'modern' this colour palette is in terms of design. Muted colours like the original green striped wallpaper may be suited to a less modern style, while brighter reds and oranges might be more suited to more modern styles. Richer citizens tend to be able to afford more modern decor styles.
Cleanness: This one is more to do with the room type that citizen personality. 'Clean' palettes will be found more often in bathrooms or corporate environments.
Loudness: I couldn't think of a better name for this, but in broad strokes, this is how bold the colour scheme is. Bright reds, for example, are 'loud', and are more likely to be found in apartments of more extroverted citizens.
Emotive: In general how 'warm' or 'cold' the colours are. This is similar to the cleanness value but links to personality instead; more emotive citizens are more likely to feature these palettes.
Now when a citizen is assigned an apartment, I can use a system that matches colour palettes to their personality!
I've developed a very similar system that does the same thing but for the base materials themselves: A floral pattern may be considered more emotive for instance. A combination of these methods to procedurally decorate apartments, offices etc is a great starting point that gives meaning, reason, and personality to the procedural generation that is at risk of becoming too random and cookie-cutter. Hopefully, this kind of attention to detail will excite some of you (and I bet a few think it's pointless!)
It's already starting to look my previously labyrinth-like environments look like something more habitable. The next step is to start work on some basic props: Chairs, tables, beds etc.