We are always on lookout for a new techniques that can be added to our production toolbox. Recently we did some experimenting with ray tracing inside Unity Engine and Signed Distance Fields, and come up with a few clips to share.
Last Pirate: Island Survival is an awesome mobile survival game from our long-time partner RSG. Project features complete 360o degree of player freedom: Survival, Crafting, Hunting and Base-Building mechanics inside detailed open world.
2018 - Present
Unity, Houdini, CG Programming, Shading, Optimization, LRPL
We came along to assist with technical challenges encountered along the development process:
Optimize open world environment to run on wide range of low-end devices.
Develop shaders for Ocean and Island Environment.
Research and Implement engaging resource gathering mechanic.
We began by establishing optimization goal with specific low-end device and target fps count. This way we get a static target to focus on, which is necessary for effective optimization work. Generic CPU profiling comes next: making sure game logic is not a performance bottleneck, at any point, is required before work on rendering performance can start. In Last Pirate’s case we discovered few minor problems that were promptly fixed before we proceeded with next step.
We approached GPU optimization by replacing all game shaders with minimalist, bare-bones implementations to discover what could be the best theoretically possible performance. Again, this helps establish clear targets to move from and towards; Since all aspects of application can be optimized to work faster, it is easy to fall in to common pitfall of optimization work - miss prioritization of optimization targets. Having a clear view of maximum possible optimization benefits allows for effective decisions based on time spent to performance gained.
After optimization targets were defined and prioritized we created a set of environment shaders. We come-up with shaded environment that both provided a significant FPS increase, and look exactly the same as initial one. This is achieved by removing redundant shader operations, simplifying and backing shading data. In the end Last Pirate turned out to be a great optimization case: we reach the goal of stable 40 fps from initial 7 fps on low-end device.
Achieving engaging resource gathering system is crucial for successful survival game were player spends most of his or her time interacting with gathering systems. Our goal was to design reusable and engaging interaction model that can be applied to wide range of game gathering nodes.
For iron and rock nodes we developed a fractured model and behavior; As well as system to handle pooling, physics and animation.
For range of various trees we created a chopped version of the models with proper physic behavior.
Hit decals and particles also were added.
In the end, it isn’t necessary to have overly complex and detail interaction system. The main goal is to create sufficient emotional variance for player to break monotony of clicking on resource nodes, which in turn leads to engaging game flow. It is easily achievable by applying unity physics, decals, simple particles and sounds.
Improved game logic performance.
Significant rendering performance improvement for terrain and environment.
Developed performant shader replacement pack.
FPS increase from 7 to 40. Increased 60 FPS stability on mid range and higher devises.
Significant Resource Gathering look-and-feel improvement resulting in improved retention after update.
Solution delivered in an initially estimated deadline of two weeks.
Continuous support for implemented solution.
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.
ATD (working name) is in development Tower Defense game set in underwater post-apocalyptic world. Project features beautiful isometric environment, highly customizable towers, challenging difficulty and tons of enemy types.
We are giving Player the choice how to approach challenges by crafting and customizing he’s defenses with numerous behavior changing items collected during the game.
Enemy has ability to support each other by healing and buffing. Attacking the player defenses chaotically or assembling in to attack squads.
Tower customization system allows player to combine found items in to different tower configurations. Many items add specific properties like Area of effect, Poison, Slowing, Bouncing.. etc. We have more than 20 properties so far, and all of those are combined to work with synergy. Towers change they look depending on parameters resulting from item combination. Our procedural visualization system handles representation of wide range of possible combinations.
In hose developed custom lighting model applies lighting to 2d Sprites with consideration to isometric space and depth. As a result we achieved a highly capable toolset for shading and lighting for our environment, with added ability to apply Fog, Vertex displacement, Ambient Occlusion, Animated Caustics and more.
Zombie Run 2 is a endless runner mobile game we co-developed with our long-time partner Retro Style Games. While we've been responsible for gamelogic and asset integration inside unity, RSG provided beautiful assets and art direction.
Project features colorful endless environments, engaging game play, customization, destructive environments and more.
We put a spin on generic endless runner formula by introducing an antagonist character - Igor. Igor runs away from player, dropping traps and various pickups while taunting player to catch him.
As a special treat, we give player the ability to transform in to huge mutant, for a limited time. Changing the gameplay from avoiding to crushing and looting obstacles.
Multi-player events were created with help of Azure. Back-end API supports global player events with different themes and tier rewards for participation.
By breaking obstacles, reaching distance milestones and catching Igor player rewarded with resources he can spend on upgrading his character, mutant or purchasing new avatars.