Hi there, future Commanders!
My name is Miguel Garcia and I am the Creative Director of Abylight Barcelona. In this series of articles we are going to be talking about the development process of our next game: One Military Camp. The idea being to show different areas of development such as programming, design, and art.
You'll get a first row seat to what happens behind the curtain of game development while we still work on finishing the game. You'll get to see the evolution of the game during this journey. If we do this right, you'll also learn some neat tricks about how games are made, or at least our tricks for making great games!
In One Military Camp, characters are very important. They enter as recruits and then, as you assign them to different training sessions, they change their uniforms and evolve, showing progress while maintaining their physical features. Not only are the characters important for the game, but you will also see A LOT of them over time. After all, this is a management game with the usual camera set in an isometric-like shot. So, it's essential to feel that there are many different characters and not just the same ones repeated over and over again and we need some mechanism to allow that.
We could summarize the list of issues to tackle regarding the character generation system in the following ones:
- Change the characters' clothes over time.
- Generate characters with different physical attributes.
- Some of the uniforms have hats, so we need to figure out how the hair adapts to the different clothes.
Mix and match
Let's start by talking about how we build the characters. For this game we model them as 2 different pieces: bust and body. Each of these pieces are attached to the same male or female skeleton and in the game we select which combination of pieces to show according to gender, head and the necessary uniform. In terms of rendering, 2 draw calls are painted for each character.
This separation allows us to change clothes according to how the role of the character evolves within the game:
But combining heads and bodies is not enough to generate a large number of distinct characters. For this reason we introduce two new variables: Skin color and body complexion.
For the skin color we generate the diffuse textures of all the pieces of the character (heads and bodies) in two skin tones. We can combine them by changing the value of a variable in the shader, so that the color mixture is shown according to the value of a slider. This allows us to create different combinations of skin tone and we can generate a high range of characters from the same set of basic pieces.
To represent the body type we use a technique called blendshapes, which consists of having different position states for the vertices of the 3D model stored in the same mesh. Using this technique we create a vertex state for slim and another for strong.
Just like we do with the skin tone, we can control the mix of blendshapes by changing the value of a slider, in order to achieve an interpolated result.
So far... this is the easy part! Things get really hairy when you want every uniform hat to work properly with all the different heads. Each head has a unique hair shape: some have it long, others with a ponytail, and even afro hairstyles. How do we solve this?
Solving “The Hat Problem”
The solution is a brilliant combination of vertex painting on the 3D model plus a little bit of shader magic. For each head, the process is to paint all the vertices of the hair in red color (what in shader means value = 1 for that channel). This information can be read later in the shader to do a special interpretation, but it will be hidden for the player in the game.
After that, we associate each head with a list of spheres that delimit the "non-deformable" zone. The shader receives the list of spheres and for each vertex of the head painted in red outside one of those spheres, its position will be projected to the surface of the sphere. This creates the effect that the hair has been flattened by the hat or helmet and we avoid having to generate new head assets for each hat in the game, since everything happens procedurally in real time.
Using the right tools
At this point, with all these parameters and different elements for each character... we begin to feel that we are juggling too many things. Sure, some companies, (especially those with more resources), can solve this kind of challenges with brute force, employing a large number of personnel to take care of all that meticulous work. Smaller indie companies like us, we need to create many tools, to do many things with few people. For this project, we are currently a team of 16 people, but with the appropriate tools, we are able to achieve a high level of quality like if it was made by a bigger team.
Abylight's development method is heavily tool oriented and that’s an understatement. We make tools for each process whenever it's possible, thus requiring fewer people to obtain great results.Of course, we're not trying to cut staff, what we want is that the members of the team can focus on unique creation tasks, things where their time is well spent without having to do repetitive and absurd work. That's why one of the first steps when we started the development of One Military Camp, was creating the character generation tool:
With this tool we can create the different characters, test the animations and set all the parameters to bring to life the thousands of unique recruits that will populate One Military Camp.
Once in the game, the characters look like this:
This is how we manage to have all those tiny little characters in the game, feeling alive and different! But this subject is far from over. In future entries, we’ll tell you about the animation system. You won’t believe the problems that may arise when you want the characters to interact with objects on the 3D map and how we have solved them in One Military Camp.
If you’ve enjoyed this sneak peek into the development process, don't forget to wishlist and follow the game on Steam! This way you won't miss the next entries of this Development Diary.
See you soon!