Since we are big fans of old game consoles and computers, with Synther we went with the oldschool amiga-c64-early PC look. This decision, in mix with our game mechanics, required us to brainstorm about how to solve a couple of rendering problems, for instance: “How, for the love of all the indie devs in the world, are we going to correctly display everything?”. Below is our current approach, using a total of 5 cameras, 3 with downsampling, 2 with dithering and posterization.
We’ve reached this effect by going through lots of problems during the development. For contrast, that’s how Synther looked like when it was really early in development:
To better understand what is happening we’ll look on the system behind the scenes.
1. World camera
Responsible for rendering the whole world, and it does just that. It works in deffered shading mode to allow the usage of big amounts of lights on the scene. If you want to know more about what deffered shading is, you can look it up at En.wikipedia.org.
Final work of the world camera.
2. World UI camera
Busy with world UI's such as computers, vehicle controls and hacking. Anything it sees must be between player and the world, and it must avoid being scaled by the next camera effect, as downscaled UI would be unreadable. To achieve that, it renders before, but applies what it sees after camera no.3
3. Player FPS camera
Place where the magic happens. After a simple render of the player viewmodel, player FPS camera executes three effects on the image, in the following order:
Downsampling scales the render down, so there are less pixels to process and the game looks more low-res. Posterization cuts the colors to a lower number. For now we are using 18-per-channel colors (18-p-c) posterization, what means that for each of three color channels, RG and B, we’re using 18 colors. Every possible combination gives us a total of 18*18*18 = 5832 colors. That’s nearly a 13 bit color mode, where
Dithering is the main culprit for those cool looking shadows. It mixes the colors giving an illusion of having more than there currently are. It was heavily used in the past just for getting better results for then-available limited hardware and their supported color palettes.
4. Player UI camera
Used for the player personal computer UI display, as well as other screen-space UI elements that should be displayed right on the screen, where camera no. 2 was responsible for displaying UI in the world in 3D space.
Final work of the player UI camera.
5. Effect camera
Final camera for displaying post processing effects. It takes the work of other cameras up to this point, and modifies the result.
A sad fate of one of our agents, who felt to his death.
Computer SGA translation All the text in the game world is shown in the SGA, which stands for Standard Galactic Alphabet. To make it understandable by the player, who doesn’t necessarily know SGA, our personal computer can translate it for us into English.
Translation happens automatically when the computer screen is pointed at any SGA material, either text only, or mixed with additional logos. SGA material’s shader renders ENG translation only, if the pixel would happen to be between one of 4 corners of the computer screen.
Our previous approach depended on using the separate layer and a depth texture, but it gave us two problems along the way. First it was problematic, when we decided to ditch forward rendering pipeline in favor of deferred for light optimizations, Second it required juggling with the depth data of the camera, having to render it twice.
That’s it, for now as you can see we are making sure that the game visuals will be appealing not only for the most hardcore fans. If you liked what you see, then get ready, as Synther is getting close to the release date.
Bonus: Example of the render using downsampled 6-p-c colors, and 60% dither pass effect.
Synther will be available Q4 2018 on Steam: Store.steampowered.com be sure to add it to your wishlist!
- Griz, Developer