This article is part of a series focusing on the 3D industry in India. Read more here.
Last October, we were strolling around the show floor of the annual India Game Developer Conference (IGDC) in Hyderabad. We stumbled upon the small booth of Nodding Heads Games while they were demoing their game, Raji: An Ancient Epic. We were immediately blown away by the quality of the game and its unique visual style inspired by Indian myth and lore. Surprisingly, the game was developed by only a handful of developers and artists. After chatting with the team, we felt we had to share the incredible story and journey of an indie studio with high ambitions.
So the following week we visited the team in their Pune apartment, which also served as the studio’s office. They showcased the game and their use of the Substance toolset, which served to texture the entire game’s beautiful environments and characters.
Discover a compelling narrative of the hopes, dreams, and struggles of a small Indian studio, as they “game dev” their way to releasing an epic game, whose story we are thrilled to share with you today.
How it all started
Nodding Heads Games was founded by Shruti Ghosh, Avichal Singh and Ian Maude. We’re based in Pune, India.
We’re a small indie Indian studio with huge aspirations, not too dissimilar to any other indie developer to be fair. One of our many goals, other than making a heartfelt and immersive game, was that we also wanted to put India on the International game dev map. Because, by and large, India is underrepresented at the best of times, especially when creating original content for video games.
We started out on our journey — now this is where it gets a little hazy — back in the latter quarter/s of 2016. There were rumblings earlier than this, though it wasn’t until soon after we had released our trailer did we collectively decide that it was ‘now or never’. This meant leaving very safe and comfortable jobs that provided a guaranteed income in order to pursue our ‘dream’. Little did we know how difficult this journey would be.
We started out as six, where we literally crunched for 10 months working on our Kickstarter Demo. Ultimately the campaign failed to reach its goal, mainly due to the fact that we only had enough funds for keeping respective roofs over our heads and food on the table. Sadly, at that time, we couldn’t afford to employ the services of a marketing company, otherwise we feel that our Kickstarter would have been a huge success. However, you live and learn — sometimes the hard way! And so, out of our collective savings, we were paying our animator and programmer. This is where you learn to do cost-effective budgeting…
The Epic grant came in the nick of time. The grant helped us to survive until we secured a deal with a publisher, and it’s been 200% ever since. The team has increased to 13, of which four are expats, including Ian, although he is permanently residing in India. We have Linos, who’s residing in Greece, who’s been with us from the KS demo and who has crafted some of the most memorable soundtracks to date.
Then there’s Tedd; Tedd is our VFX artist who is based over in Sao Paulo, Brazil. And finally we have Isaac. Isaac is our cinematic animator all the way from Melbourne, Australia. The rest of the team are based in India; three of our artists works remotely, however. Anirudh [concept artist] is based in Rajasthan, which has provided us with a lot of inspiration, both culturally and aesthetically. David, who’s based in Kolkata, is an exceptional talent who helped Ian create the many characters within Raji’s universe. And lastly there’s Shreyash, one of the few artists working on the team.
Raji: An Ancient Epic
We are currently working on our first title — Raji: An Ancient Epic, which is an action-adventure game set in ancient India. Raji, the protagonist of the game, is a young girl. Raji is on a journey to rescue her younger brother Golu, who has been kidnapped by the demon lord Mahabalasura.
On her journey, Raji is blessed by different Hindu gods in order to face Mahabalasura and indirectly will help save the human realm … or will she?! It’s a beautiful, heartfelt sibling story amidst this chaotic war.
- Shruti: Art Director/Environments
- Ian: Art Director/Characters
- Avichal: Game Designer/Project Manager [loves Google Sheets]
As founders of Nodding Heads Games, our respective roles throughout production are not typical as you would first expect. Being ‘creatives,’ you’d imagine we’d be getting stuck in. This is sometimes far from the truth.
Weeks can be consumed with video and audio meetings with the professional storytellers/writers, weekly calls with our publisher, sourcing voice actors, looking for a decent VFX artist (which took almost a year). Checking resumes, creating art, animation, programming, VFX, and dialogue tests. Coordinating with the guys over at NVIDIA, having supplied us with some of their most recent graphic cards to test the builds. Their support has been absolutely fantastic, by the way.
The folks over at ID@Xbox, again, have been super-supportive, taking Raji to almost every event even if we haven’t been able to attend ourselves. And, of course, there’s Epic whose involvement has been invaluable; without their grant back in June/July 2018, putting it bluntly, we wouldn’t be here. These sorts of grant schemes ought to be encouraged, especially for indies who are not so fortuitous to have such readily available resources or funds at their fingertips.
Both Shruti and I are the ones responsible for the overall art style/vision, and whether it’s being always respected. Again, this can be a time-consuming process due to its very nature. Because we are constantly talking with the artists, seeing if they’re able to deliver the assets on time. If not, then, we must continually guide them, respectively, whether it is for characters, environments, or UI development. But, to be fair to the team, they’ve done a magnificent job considering all the constraints — most importantly, time, or the lack thereof.
As for Avichal, like us, he’s the king of Google Sheets and scheduling, as well as building on top of the Kickstarter demo foundations. In fairness, the whole game’s mechanics have had an overhaul, having listened to the constructive criticism/feedback.
With all this said, at the end of the day, we’re hoping we’re able to deliver an AAA indie title. As a team, we have worked tirelessly crafting what we feel is a comprehensive and well-rounded story. With this in mind, we know we won’t please everyone. But the truth of the matter is that we must be true to ourselves and our vision. After all, this is a game that we want to create and it’s amazing to receive such support and acclaim from the community at large.
Being organized and honest with yourself is an extremely crucial factor that cannot be understated. There’s nothing worse than overburdening yourself or the project unnecessarily. Ultimately, you will be forced out of your comfort zone as an indie developer, because you do not have the financial means to employ someone for ‘that’ specific role. It’ll come down to whether the team can collectively figure out a solution. To be honest, it’s more the latter. And this keeps things fresh. There’s never a dull moment!
So, behind the scenes, as you can sense we three are spinning many plates, often leaving our respective comfort zones.
Indian myths and lore
Avichal ended up in Rajasthan some years earlier and was immediately awestruck by its cultural diversity and medieval architecture; he naturally gravitated to its timeless beauty. Whilst on his travels, it occurred to him that this would be a wonderful setting for a video game. Avi later spoke to Shruti about his thoughts; two and a half years later we collectively resigned from our jobs to pursue this dream.
Our dream is to create a game that represents the myths, the stories, and the culture of India. This was one of the reasons why the team got together. As gamers, we never got to experience a game like ours. We’re extremely passionate about wanting to portray the rare beauty of Indian culture and mythology, which has rarely been explored within the video game industry.
This allowed us to work from the ground up, improving on all aspects where we believed we were lacking. For example, Raji’s acrobatic/parkour abilities were introduced soon after the Kickstarter demo because we wanted to initiate verticality and to improve on the already fluid animations. Hence, creating empowerment for the player, which we believe is a very important factor. However, if playing with overconfidence, you’ll be rewarded with a good old-fashioned thrashing. So, to avoid the latter from happening all too often, you must plan your moves and use what you’ve been blessed with. Essentially, Raji’s movements lead to combat, and we’ve merged traditional dance and martial arts, which are akin to India’s culture.
Art direction and aesthetic
We are very much inspired by the old Indian traditional paintings, such as the miniature and Pahari paintings, hence we wanted to incorporate this style and detailing into the visuals. We wanted to create a unique hand-painted visual style for Raji, like the walls and palaces in India, where each wall has its own story to tell, whether through intricate carvings or the very impressive and communicative paintings.
It was this inspiration that helped us to achieve this aesthetic, where every corner of the game has a story to tell and at the same time is picturesque…
We must be honest here, although we knew of Substance, it wasn’t our first choice. Both Shruti and Ian were comfortable using 3D Coat and Quixel, whereas Jalay and Shreyash were familiar with Substance at that time too.
Crossing over to Substance was the ‘elephant in the room’; you know at some point a decision has to be made — and fast. Needless to say, the results proved that Substance would be better for the project if we were to employ its pipeline. It’s like that feeling of putting off your homework until the day you’ve actually got to hand it in.
Another reason we were hesitant: Both Shruti and Ian knew these other packages well. And as an indie developer, time is very much your enemy. And so you’re constantly reserving judgment whether this software is better at this or that software will aid your art style and whether it’ll improve productivity.
Moreover, they needed to know and understand the interface, how to apply and understand the workflow within Substance. There were so many unanswered questions, but we saw seeing how quickly both Jalay and Shreyash were able to churn out decent maps. The proof was in the pudding, so to speak.
And so, both Shruti and Ian dove collectively into the unknown; luckily, they had the likes of YouTube to lean on for tutorials, as well as Jalay and Shreyash for when they got really stuck.
It was a very unnerving period for both of them, but what one must remember is that there’s investment not only in the company, but in individuals and their skill set(s). Many hours were invested and slowly, but surely Substance proved to be a package that could do all that we asked and more.
Once you understand the principles of the layer/masking system, the world is your oyster. It’s a very comprehensive and powerful piece of software. For those who love Photoshop/CS, they’ll get to grips with Substance in no time.
We had pretty much established our style during our Kickstarter campaign. Although our aim was to achieve a unique, hand-painted style, we still feel we have a way to go to achieving this with Substance. Don’t get me wrong, Substance is a fantastic tool, but we feel that we need more time to home in on the desired aesthetic.
3D art pipeline
Having explained our choices earlier, our 3D art pipeline changed midway through production. Normally this is a no-no. But we felt that we had little choice but to do what we did: Essentially eliminating two software packages in favor of one. This not only saved the team a lot of time, with the workflow and sharing newly created materials, but reduced overall costs as well.
Rather than using 3D Coat and/or Quixel, the process would look something like the following:
- Concept art [environment — deconstruction, looking at which elements can be reused with other assets].
- Block out [Max/Maya — export the basic asset to UE4 for scale purposes].
- Import block out to ZBrush — add details and custom stamps — adding wear and tear, using a limited number of brushes for that ‘painted feel’… export high-resolution geo.
- Substance [new asset], import the game asset with multiple materials assigned [this helps with organizing the UV layouts], for example, for a character, it may have 4 UVs [materials], Body, Eyes, Accessories, Clothing.
- Prior to baking the maps out, remember to import the high res go and then double check your baking settings. The baking is a quick process, as a rule of thumb, a 1k or less normals test is done, followed by the real bake if everything is looking how it’s supposed to.
Then it’s on to add personality to the asset or character. Once you have a grasp of the basics, the learning curve will soon plateau out. That said, we are always learning in this industry.
For characters, Ian’s approach was to create a group with a black mask, add a fill layer [change its color], select the necessary polys via the mask layer. Duplicate the group [remember to rename it] keep changing the color and then name this layer too — Base Color, Diffuse etc.
Once all the groups have been created, it’s time to breathe life into the assets/character. This can either be with a predefined material [environment] or from known materials. It’s always good to have Pure Ref on a separate screen displaying all the reference materials including concept art and or character studies.
It can take as little as an hour using predefined materials [which are shared across the artists] or in case of working with characters, it can take hours — a day or two at most.
There’s also something to be said when being able to concentrate on one piece of software. This increased production significantly while exporting the maps was a dream to customize.
Substance Painter breakdown for character art
Ian had to reorganize some of the UVs and rebake the maps midway through the retexturing. This would have been an absolute nightmare many moons ago.
With the tweaking of UVs, this now involved the animator, because the vertex weights will not correspond to the UVs. So, whilst smiling nicely to the animator [Himanshu], he transferred the weights from the original model to the new. He did a little tweaking here and there; once done, it was handed over to Paras [principle coder] who had to replace the new model. The number of vertices hadn’t changed, so this wasn’t such a huge job.
These are some of the last-minute jobs we must do if we’re wanting to push the visual aesthetics that bit further.
Substance Designer breakdown for environment art
As mentioned above, our core software for texturing was Substance Painter; Substance Designer was only used later down the line to create some quick tileable textures.
Let’s look at one of the assets from our Ruins level.
In this case, we start by importing our low poly mesh inside Substance Painter. Then, we load our sculpted high poly mesh from ZBrush.
This contains some edge damages and adding alpha details like the motifs that we have used throughout our environment. Since these patterns were one of our core storytelling elements, our concept artist Anirudh created a bunch of these greyscale patterns with height information which could be used in ZBrush, as well as Substance Painter. This meant that we could still add all the details regardless if we use ZBrush or not.
Here are a few images of some of these custom-made alpha stamps.
Another example of one of our iconic pillars from Ruins that uses the above patterns.
Back to Substance Painter, bake settings were almost always left at default except for texture resolution and edge padding. We do a quick test bake of just the normal map to make sure there aren’t any baking or shading issues. Once it all looks nice and clean, we bake all other maps except for an ID map since, for the environment and props we mostly rely on creating masks through the poly fill/UV fill tool inside Substance.
Then we start by adding a suitable simple base material either from the in-built materials or from scratch. After that, we focus on mainly looking at references and the concept art, and starting to build on top with layers of color variation, dirt, edge wear, etc. We finish off the texturing by adding a final touchup with an AO and Curvature map on top to push the shadows and highlights.
Once we build everything up, we go back to each layer and manually paint in/out details, for example erasing edge chipping from certain areas and not having it on the entire mesh or painting different hues of color to get some nice variation. We do not use as much height information or micro details since it tends to become noisy in the engine when you are working on semi-realistic assets. If we do use masks that are grungy, we would always blur it out to a certain degree to get rid of all the high frequency details. This is done by using various filters like Blur, Blur Slope, and Histogram Scan.
All this is done through adding fill layers with masks, which allows us to change anything we want if there are iterations needed. The asset you see below was one of the very first. After finalizing the textures, we quickly created a smart material out of it and then shared it with the team so everyone could start using it as the base material.
Following is a gif of the process in brief.
This is pretty much the standard procedure. The differences lie in hand painting all the color variations and wear and tear details to break the procedural look, as well as getting rid of all high frequency details with Blur Slope/Blur and Histogram, which simulates paint strokes. This helped us maintain a balance between manually painting colors and mimicking them through filters since it would have been very time consuming to hand paint every single asset given our time constraint and the amount of assets that were needed.
Here’s a screenshot of the asset in-game and a few more made in using this process.
One of our landmark locations from Ruins was created using the above method and the same smart materials to make it look consistent, so it looks like it all resides in the same universe.
Once the texturing is done, we would just export out all texture maps with a preset we created for Raji that includes an albedo map, a mix map, a normal map, and an emissive map if required. Any asset using an opacity map was added inside the albedo’s alpha channel. The mix map contained metallic, roughness and AO in their R,G,B channels respectively.
After that it was all about setting the textures up inside the engine with our shaders and testing the asset for further tweaks.
Tips & tricks
Remember to name every layer — something sensible because, believe us, those layers and groups are going to expand exponentially. And if you’re not naming them, you’re going to run into a lot of pain.
Look at what others have created, observe their processes and take from them valuable nuggets of knowledge and apply them to your own materials. And remember the three P’s: practice, practice, and practice. Otherwise the three P’s can bite you in the Newton’s Cradle and you end up with Piss Poor Performance.
And buy yourself a very comfy chair because, not only are you invested in the software, but yourself too, and remember that fact. Your knowledge base will skyrocket once you’ve created the moderate learning and the endless possibilities will rapidly unfold.
Since the community is already quite massive, there are tons of resources available online, most of the tools and techniques we use are the same as those that are being used by others in the game art community.
There are a couple of things we can mention that are probably already being followed by others out there, but there might be people reading this who still may not be aware of it.
1) WORKING WITH FILL LAYERS:
If you want to save time and headaches when making changes to your textures, it is a no-brainer to keep your workflow as non-destructive as possible. For example, instead of using a paint layer use a fill layer, add a mask and then add a paint layer to the mask instead. That way if you ever want to go back and change it, you could paint out certain areas in the mask or put another paint layer on top to add more details on your already existing ones. Using a fill layer with a mask also allows you to change its color, roughness, emissive and pretty much everything else. Painting using empty layers doesn’t allow you to do that, as far as we know.
2) USING THE THICKNESS MAP:
Another tip would be using the thickness map to your advantage. The thickness map is useful, especially for stylized assets. It’s basically an inverted AO map or an SSS map. White areas are thick while black areas are thin. You can use this map to fake translucency. You can add an emissive layer on top of your mesh and add a mask using the thickness map; you can then control the emissive amount to fake light passing through the object. We have used this quite a lot with translucent objects or meshes, which require a nice gradient in the emissive. Since hand painting can hog a lot of your time in certain situations, we try to use gradients, position maps and thickness maps as well so that if we want to change things later, we don’t need to go back and hand paint it all over again.
The thickness map is the little hidden gem inside Painter!
3) ADDING QUICK FOLDS OR WRINKLES:
If you have a fabric that needs some quick folds or wrinkles, there are certain grunges/procedurals in Painter which you can use as a mask and apply a blur/directional blur to make them look like fabric folds. This is not a good idea for important assets or clothing on a character but works for generic assets like curtains, tarps, carpets etc. Sometimes you need some quick folds but don’t want to go back to ZBrush to do it. This method comes in very handy in such a situation. Not to mention the non-destructive process. You can swap out to a different grunge to see if it gives a better result. All of this without actually hand painting anything! Necessity is the mother of invention, after all!
We’re closing in on the finish line. In fact, it’s hard to believe where the time has gone and what we as a team have achieved. This is very much a passion project, and lots of blood, sweat, and tears have been poured into the makings of Raji: An Ancient Epic. We’re aiming for a Q3 release for PS, XBox, PC, and Switch.
We’ve entered the spit and polish part of production, squashing bugs in the process, and right now our game is with a focus test team. So, depending on the results, we may or may not have to make drastic changes. We’ll see. But it’s exciting knowing we’re almost ready — on the flip side, it’s quite scary too, because this is where we’ll be releasing Raji into the world.
Mid last year Raji went to Bucharest to DevPlay, where to our collective surprise we walked away with three of the four awards for ‘Best Game Design,’ ‘Best Visuals,’ and ‘Best Game of the Show.’ This was very humbling, giving the team a wry smile, not to mention a huge morale boost. Moreover, it validated all our hard work.
I also forgot to mention, we also did a live stream with the guys over at The MIX recently where we won ‘MIX Choice’ Best of The MIX Award for their live showcase!
In their words:
“The craftsmanship of Raji really stood out to us and the online audience of The MIX Live Showcase.”
All images courtesy of Nodding Heads Games.
Read more about 3D in India here.