Introduction
Hola Pingheros! 👋
I’m Kathia and today we're going to talk a little bit about our snow fighters 🐧 and their sense of fashion🩲🎀.
During the project, one of my responsibility was to set up a
texture workflow for characters and skins.
This colorful, explosive game requires a ton of variation to satisfy every player's needs 😉.

Problematic
Working with multiple color choices and adaptable color Skins can become overwhelming very quickly. That’s why we planned a workflow that’ll provide more scalability for the future of the game.
Creating a material for each color and each skin is too exhaustive and expensive, but we've found a way to optimize it!
- We needed to be able to create a wide palette of colors quickly and easily (for now there are only 10 available Characters Colors but who knows? Maybe a Rainbow Penguin with 5 variations could be needed! 🌈).
- Team mode is also requiring specific colors (Skins needs adaptive team colors!).
Current Colors Variations:
Some Customization might adapt to each colors of characters (based on the Rarity of the Skins ✨).
- Common (Basic materials and strict minimum of surface coverage).
- Need to adapt to the Team mode.
- Rare (Medium materials and surface coverage).
- Need to adapt to the Team mode.
- Legendary (Premium materials and advanced materials, full surface coverage, VFX).
- Need to adapt to the Team mode.
- Need to adapt to each character color.

So how can we meet all these needs efficiently?
Solutions
One solution is to use RGBA masks! 🔴🟢🔵⚪
It will provide a good mix between flexibility and optimization.
We're using RGBA channels independently to store black and white data (I call them masks). That way we can have 4 different masks on the same texture! We then use masks to apply color to certain areas of the models 🖍
This is how my RGBA masks are organized:[h3] Base Color Map [/h3]
- Channels RGB is for different colors, R (principal color)/ G (secondary color)/ B (tertiary color).
- Channel A (Alpha) is used to select zones that display texture directly and those that display colors selected using RGB masks.
What's more, it can be applied in cases other than that of the character, such as skins!

Colors driven by shader allowed me to quickly iterate within the engine and generate multiple variations without wasting too much time 🕰.
Characters Colors are picked via code and only one shader is used for all of the characters and skins.

[h3] Other textures. [/h3]
- Metallic/Rougness/AO are also packed in one texture ((R=Roughness)+(G=AO)+(B=Metallic)).
- Normal texture.
Conclusion
This technique can be used in a multitude of ways, and depending on your needs, you can push it even further.
Thank you for reading and see you soon! 😃
Kathia Lebon