Seven
Seven is the character with the most screen-time in the game. And she's a no-nonsense badass. I knew I needed to dedicate
some time to her.
I started out last week by playing hair stylist. I wanted to take Overwatch's wavy hair and bring it into Deceiver's neon aesthetic.
Next I modeled some cyberpunk combat boots.
Then the rest of her outfit.
The last piece was a military ALICE pack, but I'll get to that later!
Rain audio
Logan whipped up a looping rain sound for me. Previously I've just ramped the volume up and down based on a system that calculates how much rain is falling near you. But this time I wanted to control not only the volume, but also the positioning. So if you're standing under an overhang, the
rain will sound like it's coming from outside.
I already had a grid of raycast results surrounding the camera to drive the particle system, so I just ran some weighted averages on that to figure out where to place the rain sound. I used a Wwise RTPC to set the spread to 100% when the sound is close to the camera, so if there's rain all around you, you'll hear it in both ears.
Reverb voxel
I spent a day and a half on this crazy voxel-based reverb system. When my level importer builds a level, it first chops the level up into chunks.
Then at the center of each chunk, it queries the AI navigation mesh and collects all the points that are "visible" from that chunk.
Then it rasterizes those points into three "shells", for close range, middle range, and far range geometry. Each shell is sort of like a spherical
black and white bitmap image. If the close range bitmap is 100% black, then that means we're in a pretty tight space.
The importer spits out three coefficients for each voxel chunk, representing the amount of close range, middle range, and far range reverb. After this it runs the whole voxel through a smoothing kernel and writes the result out to a file.
At runtime, whenever a sound plays or a sound emitter moves, it's just a quick lookup to figure out what reverb values to use.
I'd like to write more about this soon. Hopefully there will be another Poor Man's article on it. :)
Adaptive client-side interpolation delay
I watched a talk on Overwatch netcode:
Pretty much the only thing they mentioned that I wasn't doing already was the adaptive interpolation delay. Basically, if you have a reliable
connection (regardless of ping), the game will buffer incoming packets for a shorter amount of time, because it trusts that new packets will
come in on time. This reduces latency.
If your connection is dropping packets left and right, the game will start to jitter. Eventually it will decide to increase the interpolation buffer to smooth over those missing packets. I use a simple scoring algorithm with some basic hysteresis to prevent the client from switching back and forth all the time.
Of course, algorithms often do the wrong thing, so it's important to give people control whenever possible. Hence this menu option:
Store art
The character in the store art I've been using dates back to 2014... and it shows.
With Seven's model finally done, I decided to redesign the store art and focus it around her, since she's the most important character.
First I tried just adding her to the existing scene:
This worked okay, but I was never quite satisfied with this color scheme. I tried messing with the lighting.
At this point I started soliciting feedback from some fellow developers, and they all thought it looked confusing and muddy. The foreground and
background bled into each other too much.
I kept messing with the lighting.
Everyone wanted me to switch to cold background, warm foreground, so I tried that:
Eventually I realized the old 2014 model had to go. It wasn't up to par. I also had to spend some time in the Blender compositor to get ambient
occlusion to behave the way I wanted to. By the end I had seven render layers, some of which spit out multiple passes.
At this point I slapped the logo on top and realized it would never work. The logo is surrounded by a dark border, and it didn't stand out against
the dark background at all. So I switched back to a pink background, and also threw in some geometry from a level I've already completed.
You can see I also removed the scan lines from the logo. On their own, they were okay-ish, but I realized they were just too complex and I couldn't make them work with anything else.
I'm still not 100% happy with the colors on Seven; I think she might not stand out enough. But after two whole days of tweaking I think my time is better spent elsewhere. I've never had this much trouble with store art before.
The capsule art stands out pretty well, but I'm still worried about it.
The problem I've had with this game from the beginning is that it's essentially two different games in one, complete with two different art
styles. There's the exploration game with vibrant, feminine colors, and then there's the drone combat game with deep, masculine colors. Which
style do I use for marketing materials?
A fellow dev suggested doing a simple A/B test with Facebook ads, which I actually tried once a few years ago. The sample size for a $50 ad spend (on the order of 50 clicks) seemed to small for me to take action on. I dunno. It might be a good idea.