SSH #10 — The Lineman Cometh

Lucien
Saturday @ Second Half #10

Happy Saturday! And not even like the last time I said that, it's actually Saturday still!

It's time for some news about MEANWHILE IN SECTOR 80!

Last week, we worked up to a big playtest and had a bunch of fun playing the game.

This week, we're unveiling our new art style. In one word: lines!

Line Art!

Laura has been experimenting with line art as a way to give the game a more unique look and also improve readability of a lot of the parts. She painted a bunch of concepts within the last couple weeks on top of screenshots of the game.

A mockup from the Third Schwartz-Mocker Friendship Dam
A mockup from the Third Schwartz-Mocker Friendship Dam

We had a chat this week about what the lines mean, which made them suddenly sound easy and fun to implement, so I did!

Ka-pow!
Ka-pow!

You can click on these images to view them at full resolution. I've left them huge and uncrunched so you can see the full detail!

Images taken seconds before disaster
Images taken seconds before disaster

We really like how much the lines make enemies pop out from the environment.

Our style is coming together!
Our style is coming together!

I'm proud to say it: I think we're zeroing in on a proper — capital A, capital S — Art Style. We've come a long way from the vision of the game I had in mind circa gamescom and MEANWHILE IN SECTOR 80 is better for it.

Here's a little video where you can see the lines in motion:

I'm pretty sure I've got hundreds of videos in this same stairwell.

Regulated Battery VoltageRasmus

Our batteries have gotten smarter and now regulate the voltage with Pulse Width Modulation (PWM) instead of internal resistance. This makes it easier to tune stuff as they will draw just as much power as you say they will as long as the batteries are rated for it. When the batteries are insufficient, stuff will draw exactly what the batteries can provide.

It was a bit tricky to get this working well together with capacitors and batteries with different voltages but it was well worth it!

Before, even though we have enough power, the voltage is sagging and we're under-powering this laser.
Before, even though we have enough power, the voltage is sagging and we're under-powering this laser.
After the change, our voltage is staying at 24V and we're getting full discharge from the batteries!
After the change, our voltage is staying at 24V and we're getting full discharge from the batteries!

Globally Illuminating

There are some weeks where I am very thankful that we have a custom engine. We can build so many specialized, powerful tools, and it's easy to reason about the entire system whenever we run into bugs.

Other weeks, I'm reminded that we've signed up to complete an absolutely herculean task. Shipping a game is already hard enough, but building everything underneath it is insane.

Nonetheless, we've been plugging away at a few cool rendering improvements!

First up, our real time GI solution is starting to look like GI! It's still not merged into the main branch of the game but it's very satisfying to see colored light bounce off of surfaces in a couple very specific scenarios.

Red and blue light reflect off of this oddly positioned mushrooms.

Random Performance Improvements

Besides the GI implementation, I made our SSAO implementation over 10 times faster this week. There's an old adage that if you make something 2 times faster, you probably started doing something clever, but if you make something 100 times faster, you probably stopped doing something stupid.

Unfortunately, it was the latter. C'est la vie d'un idiot.

A Brand New Renderer

Our graphics stack is based on wgpu. It's a Rust library that provides a nice cross-platform graphics API that's safe, modern, and fast, but higher level than the APIs it runs on like Vulkan or D3D12.

wgpu has gotten us really far and I'm glad we started the engine using it. I'm not much of a graphics programmer and so it was a really awesome way to get things off the ground. If you're looking to get into graphics, I highly recommend it!

That said, we're starting to outgrow it. wgpu's main focus is on safety, and as we've accumulated a number of native extensions, we've started falling more and more outside of the target audience for the library. That's fine, but it means that sooner or later, we'll likely need to start taking on our own graphics abstraction.

So, this weekend, I started on a dedicated Vulkan renderer! It turns out it's not that hard. Here's where I got after around a day of work:

This image is probably a good PNG compression stress test
This image is probably a good PNG compression stress test

All of the geometry streaming and plumbing is done! All that's left is a little bit less rainbow, fixing some distortion, some textures, and plugging the rest of the shaders in. It's been surprisingly smooth!

When I was at Roblox, I worked with someone named Arseny Kapoulkine. He's well-known in the graphics programming space and is the kind of person who can write a whole new renderer for a new graphics backend for an existing game in a single weekend. Arseny's always been someone I look up to and that kind of talent was a big inspiration to finally take this project on in earnest.

Looking Ahead

Overall, it was a bit of a slow week. Most of the team has been enjoying some time with family or otherwise working on life stuff.

Next week, it'll be time to focus on our next set of production goals and build up to another team playtest.

See you all next week!