Awesome! I had been working on a similar project couldn't figure out the snow on the trees for the life of me! It's great to see how you approached it. The work look great! Thanks for sharing your process.
I believe author would be surprised that it's not american, but soviet bunker :)
The talented guys from Gunstar Studio showed how they created explosions, textures fighters and built levels for space action game Phobos Vector Prime.
Gunstar Studio is made up of four people, although we have more additional collaborators who help us with other aspects of the game such as music or marketing. But behind the development there are four of us: Santiago Aguilar, programmer and FX artist; Arán Moreno, lead 3D, environment and cinematic artist; Rafael Casaucao CEO, game design and 3D artist; and Juan Damián Reina, 2D artist and additional game designer. This is our first video game project, although the components of Gunstar Studio have experience in different audiovisual fields, from graffiti to video mapping.
Phobos Vector Prime
Phobos Vector Prime began to take shape in June 2016, when four friends (we, of course) imagined the video game that, as gamers, we would like to play. We wanted to make a multiplayer game because we love to play with friends and feel the competition, but we knew it was difficult to work in a massive online game being an indie studio – so in our first GDD we also picked up a single player mode focused on the narrative that helped players understand the mechanics and prepare them to face other players.
Our first prototypes consisted of a bunch of spaceships facing each other, but later we managed to adapt it to the genre MOBA but whit a twist that many players in our environment asked for the great names of the sector. We were looking for a competitive video game that mixed the strategy of the MOBA with the frenetic action of the arcade games of the 80s.
We wanted Phobos Vector Prime to be a nostalgic look at the games that we enjoyed in our childhood but without falling into the exact copy, but extracting the playable sensations of the arcade and bringing them to the current technology: we did not want pixels or 8-bit music, but environments realistic and challenging gameplay. That’s why now when you play Phobos Vector Prime, you see many colors and lights, you have many enemies to shoot down and listen to a retrowave music. Like a game, they wanted to have made in the eighties but they could not because of technical limitations.
The engine we use is Unity 3D. We have always had as main objective to achieve a fluid and accessible gameplay so that regular players of this genre can master the controls of the spaceship on minutes at the same time that the newcomers face a well-escalated difficulty curve.
To achieve the current result we have had to work a lot based on the feedback that users who have tried the game in events have given to us — their opinions have helped us to change the game, which has undergone a great change since its first prototype, as you can see in the following video:
During the development we have given special importance to the number of enemies on screen as we consider that they add extra tension to the game: we want the player to feel cornered, receiving dozens of shots that he must dodge while trying to eliminate the enemies. We wanted to recreate the essence of the classic Bullet Hell games, but we knew that could affect the performance of Phobos Vector Prime so from the first moment we have made the most of all Unity 3D tools. These are two basic tips for better performance in Unity 3D that we have applied:
1. Optimize physics: define at the beginning of the development that elements will intervene in the physics of the game, organize them correctly using the system of layers to configure the layer collision matrix. This solution prevents the engine from continuously calculating if things are colliding with each other, when according to the design of the game they have no relationship with each other at any time. Unity 3D allows a maximum of 32 layers, so you have to manage them carefully so that they do not run out, since they are used for other engine features.
A previous step that we recommend before deciding which layers we are going to create is to design a simple table with the different elements and see the link between them. This is the table we defined for the first prototype:
When we have already decided which layers we are going to have, we can create them and then configure the layer collision matrix in Unity 3D (Edit> Project Settings> Physics). This is our current configuration:
2. Object Pooling: when you are creating and destroying a large number of objects (bullets, enemies, etc…), instantiating them and destroying them in the engine continuously becomes inefficient. The most commonly used solution is to pre-instantiate the objects, have them inactive and use them as you need them. You can find a large number of tutorials that explain in more detail how to implement this system.
To build the levels we started by designing a paper (a state-of-the-art software) and then digitalizing it using Photoshop. Our game designer works on the sketch of each level and, once finished, we pass it to Unity and build the map based on those guides – we place the assets of rocks, walls and buildings (depending on the aesthetics of the mission) to delimit the possible routes that the player can take.
For maps that do not develop in open space (but on asteroids or planets) we use Unity Terrain:
With the stage established, we began to integrate assets with those that can interact as doors and generators. To accelerate the development process, our programmer has created a kind of own level editor that facilitates the implementation of objects and allows the design of levels to iterate.
We also find it interesting to explain how we have worked on the development of the elements of the game (ships, turrets, enemies…) because their design directly influences the construction of the levels.
Initially, our video game had low-quality spacecraft that we used, mainly, to prototype mechanical devices. Once settled the core of the gameplay, we could focus on improving the graphics section of Phobos Vector Prime, so we made the decision to completely redesign all models to achieve a more professional and detailed aesthetic.
To model the objects of our video game we use several tools, although the main one is Cinema 4D, in which we work to design the low-poly models of all the elements. Our line of work begins by first creating a design with few polygons in Cinema 4D, then filling it with details with Zbrush, converting it into a high-poly model.
These are the UV corresponding to the low-poly models of the Falcon spacecraft and enemy turrets:
To get spaceships and more detailed objects we use different Zbrush tools: subdivision, alpha brushes, decimation, zremesher … We always seek to respect the original low-poly form, because we want the designs to be simple but attractive, and at the same time maintain a good performance within the game. Once the result we want is achieved, we export the final high-poly model using Xnormal, from which we obtain the ID, Normal, Ambient Oclusion, Bent Normal, Height and Curvature channels.
With all these maps, we proceed to texturize the model with Quixel Suite. The first thing we apply is a metal material for the base to which we then apply a layer of paint, one of dirt and one of dust. Damage masks are also placed on the edges and scratches on the surface.
This is how the final result looks:
We think that the VFX of a game can make a big difference in the way in which the public perceives its professionalism and affects substantially to the game feel, that is why we have spent a lot of time investigating how to do it until the current result is achieved. When creating effects, we usually follow two basic steps:
- Make a simple sketch on paper with the different states that it will have from the moment it is created until it is destroyed (when isn’t cyclical) and estimate some duration times for each state.
- Search and take references from the market that have similar effects to those you want to create. Our explosions are very influenced by those of Just Cause 3 and Battlefield 1, which we study thoroughly to make ours from scratch (although the difference between their VFX and ours are still abysmal).
Once we have clear what we want to achieve and we have decided the techniques we are going to use, we begin to perform tests on the engine until we achieve something that we like visually. Or end up discarding it if we see that the idea cannot be carried out. This process can last from a couple of hours to several weeks, depending on the effect. We can explain it better using a real example of the process of creating our explosions:
- First, we use a fluid simulator to generate the explosion (FlumeFX, Phoenix FD, etc.)
- Then we export two renders of the complete animation of the explosion in 32 frames (one only of the fire of the explosion and another of the complete explosion, format .PNG to 256×256 pixels each one). In our case, we decided to take the render from above taking into account that the explosion had a circular shape so that it looked good from any angle in the game.
* NOTE: complete these two steps can take several days or even weeks if you are not familiar with the tools and you have to learn to use them well from scratch. It is also recommended to have a good computer to speed up the process. If not, there is always the option to buy a video of an already rendered explosion that suits what you look for and get the frames from there.
3. We use GlueIt to generate the sprite sheets from the frames generated from the two previous renders. In this case, our fire animation was shorter, so we eliminated most of the last frames. Finally, we should have a texture of 1536×1024 with 24 frames in .JPG format with a black background. Additionally, in this case, we decided to remove the color from the texture and put it in the Unity material, to obtain the color we were looking for. For the sprite sheet of the smoke animation, the texture is 2048×2048 with 64 frames and the .PNG format respecting the transparency of the render.
4. In Unity 3D we created two materials, one additive for the fire, which will give brightness to the explosion, and another alpha for the smoke, which will serve as a base.
5. For this purpose, we have also used a particle system called Particle Playground (although you can achieve a similar result using Unity 3D by default) in which we create two particle systems and assign each one the materials previously created. We define in both the positions in which each particle will be instantiated, which will define the shape that the explosion will have. They must share these positions so that each particle of fire adds to each particle of smoke, giving it brightness and fitting correctly. We use the Texture Sheet Animation functionality to configure and reproduce the animation of the sprite sheet, keeping in mind that it is important to set the sorting fudge well so that the fire is shown above the smoke.
6. In addition, we create other materials, shaders, and textures for other parts of the explosion:
- Fire Embers: these particles are generated with a force and a random initial rotation along a circular spline around the explosion.
- Shock Wave: consists of a single particle with an additive shader that increases in size over its lifetime.
- Wave Distortion: it is practically the same as the Shock Wave except that it has a distortion shader.
- Flare: a particle that gives something more brightness to the center of the explosion.
- Sparks: small flashes that bring a sense of damage and destruction.
7. Finally, we join each part of the effect, we create the prefab of the explosion and it is ready to be used when needed. Of course, it is essential to apply post-processing effects so that the effects look much better. In our case, we only use Amplify Bloom to make the scene shine much more.
A multiplayer component
First, we started working on a multiplayer video game and then we built a single player mode with the same mechanical bases. It may sound a little weird, but from the beginning, we thought that the gameplay of Phobos Vector Prime gave way to be used for many styles of play and one of them was that narrative campaign.
Our story mode allows players to discover the origins of the three factions that face each other in the MOBA mode (Renegade, Milician and Bounty Killer) while understanding the core mechanics. What we wanted to do here is to use the classic strategies of the MOBA in a narrative way, for example, the protagonist of the first campaign takes the role of tank, so the levels are focused on forcing the player to endure damage and defend structures… The use of the specific skills of each ship is also enhanced, which are activated along the history.
We have now completed the development of the first single-player campaign, which will be launched on PlayStation 4 in Europe during this month of April (we still can not say a specific date). Later we will take it to America. After launching this first campaign, we will continue with the development of the other two narrative campaigns at the same time that we polished the multiplayer to launch it worldwide.
That is our plan, but as an independent study, it is difficult to know with certainty if all this will work out (we have already verified that this is not always the case and that is why we have had to delay this interview so much, we apologize). Even so, our idea is to get Phobos Vector Prime to be that game that we dreamed of in June of 2016 and at the moment we seem to be on the right track.