Unity Station is ongoing open source project, the re-implementation of cult classic Space Station 13 on Unity Engine. Game is centered around surviving on an outpost exploration ship in the far reaches of space.
We joined with Unity Station team with a goal to solve number of specific challenges:
Implement player Field Of View System.
Implement performant 2d Light and Shadows System.
Integrate resulting system to match with retro art style of the game.
Community was preparing for release of 0.3 version of the game, and we were on tight deadlines.
After we easily found common ground with the client, we committed to experimentation phase during which we developed a working prototype within few days. Experimentation phase helped us to established clear direction and added more specifications detail. With direction and reduced risk of rework we could begin implementation of production quality solution.
We approached problem with implementation of “Ray Marching” shader to create occlusion masks for player view zone and light sources. To improve quality and performance, of this generic approach, we developed a post processing stack with Pixel Perfect rendering capability for all processing stages.
This solution allowed for more precise control and significantly reduced resulting textures and overall fill-rate; Beyond that, it allowed leverage of low resolution to apply low-cost blurring effect on resulting masks to improve quality, as well as create special lighting for the walls, that required a different visual effect.
At this point we already gain enough performance to run Unity Station on low end configuration, and even on mobile with playable and stable FPS. However, with additional experimentation we separated light rendering loop from scene rendering loop, to control update rate of each separately. This give us an ability to further increase post-processing performance by reducing the update rate without compromising the visual quality.
Integrated, tested, refactored clean post-processing solution that looks great with Unity Station’s art style.
Implementation of additional requests.
Reached optimization and performance goal.
Delivering integrated solution within a limited time frame to meet the release deadline.
Continuous support for implemented solution.