Naga Shrine of Rejuvenation: Texturing Game Assets in Substance Painter
Alexander Nguyen did a breakdown of his stylized scene, Naga Shrine of Rejuvenation, made during the CGMA course, discussed his approach to creating a stylized look to the assets, talked about working on the vegetation and water texture as well as shared his lighting setup.
Hi, my name is Alexander Nguyen, and I’m a 3D Environment and Prop Artist from Southern California. I have a Bachelor of Fine Arts in Entertainment Arts: Animation from California State University Fullerton. I’ve been enamored with video games and animation, so it was natural for me to gravitate towards stylized game art. Some of my favorites over the years have been WoW, Legend of Zelda, Trine, Dark Souls, Battle Chasers, Ghibli films, and Avatar, the Last Airbender. I’ve had the fantastic opportunity to intern at Obsidian Entertainment as a 3D prop artist for The Outer Worlds after finishing school. I also had some freelance gigs as an environment artist for EscapeVR. After working on those projects, I decided to follow my heart and focus on creating stylized art. My journey thus far has led me to CGMA’s Creating Stylized Game Assets with Ashleigh Warner. I will be breaking down my fourth project from the class.
On the CGMA Course
After learning how to make a hand-painted hero prop from Brushforge’s Aeon Core mentorship with Jordan Powers, I wanted to challenge myself for my next project. Seeing all of the progress from the students of Ashleigh’s previous term and her incredible work on World of Warcraft were significant deciding factors of my enrollment. The various topics covered throughout the course outline seemed like perfect exercises for me to hone my skills.
Inspiration and References
My 4th project required an environment with plants, architecture, and blended ground texture. I knew that I wanted to make a diorama of a flooded temple, so I gathered all of my references and organized it in PureRef. When it comes to finding references, I try to combine my ideas from games, travel experiences, real-world locations, films, and illustrations. Zuldazar and my experiences from exploring temples in Thailand were my main inspirations for this project. I also looked at background art from the 1967 Jungle Book film, the Balinese Tirta Empul Temple, and various concepts from artists such as Jourdan Tuffan for additional references.
I wanted something sculptural to stand out in my scene, so I sketched a water fountain with an ornate serpent to serve as the focal point. The design went from being based on a cobra to being a blend between the mythological Naga and Quetzalcoatl. Another idea that I wanted to tackle was a cross-section of a pond with fish in the scene.
Working on Game Assets
It’s beneficial to strategize and figure out what parts need to be modeled from trims versus what needs to be uniquely unwrapped for modularity.
Since this is a portfolio piece, I wasn’t too concerned with the polycount. My main concerns were with the overall silhouette shape and avoiding shading errors. I wanted to leave the rest of the detailing to the textures. Most of the assets in this project are between 500 – 4,000 triangles.
The bricks began from a tileable texture that I painted in Photoshop. To get the chunkier brick pieces, I used the multi-cut tool and extracted them from the plane. I also pushed around some vertices to get the volumes that I desired.
When I made the columns, I started with a 12-sided cylinder. From that cylinder, I made a trimsheet and added some embellishments. After finishing the column’s clean version, I deconstructed it and created a ruined version with the multi-cut tool.
The tree stump started as a cylindrical base with flared edges. To add roots to the stump, I created a curve with the CV curve tool and undulated it from its sides. I then made a diamond-shaped plane with the Create Polygon Faces tool and snapped it to the curve. After selecting both the curve and diamond shape plane, I extruded it along the curve and played around with tapering, thickness, divisions, and twist until I was satisfied with the results. Once I had the desired root shape, I welded the verts of the base with the roots.
Texturing Workflow in Substance Painter
When hand-painting in Substance Painter, it’s crucial to isolate the viewport to the Base Color view to represent the diffuse texture accurately. I usually set up a base fill layer first and then add paint layers for the forms, details, and colors to blend with the smudge brush. Substance Painter’s update with native support of Photoshop brushes, the opacity blending mode, and the ability to toggle on and off pen pressure sensitivity has allowed me to spend more time within that program rather than having to jump between different painting apps. To get the wear-and-tear and organic look on my surfaces, I alternate between Kyle’s Paintbox and Spatter brushes when I paint and smudge the colors around.
Joe Pikop’s SoMuchMaterials plug-in helped establish the initial base color, lighting angle, and roughness for the serpent’s head. To fully take advantage of that plug-in, I had to sculpt a high poly version of the statue’s face with ZBrush first and then bake the volumes down onto the low poly mesh. After the bake, I painted in the scratches and sharpened some of the edges to get a more chiseled look.
THE PAINTING PROCESS FOR PLANTS
To make my lotus set, I blocked out the silhouettes of petals, buds, leaves, stamen, stems, and a seed pod in Photoshop with the lasso tool and made tweaks with a hard brush. Doing this allows me to set up an alpha channel early to use for the modeling phase. After rendering everything out, I added padding to the plants by duplicating the layer, applying Gaussian blur, duplicating the blurred image a couple of times, and finally merging the blurred layer with the original layer on top. This step is crucial to avoid bleeding and artifacts.
My ivy bushes are composed of a bunch of duplicated leaves. To add some depth and variation, I made shaded versions with the levels editor and liquify filter. After creating all of the leaves, I made two sets of vines and placed the brighter leaves on top of the darker set.
When I make plants, I generally start from a polygon plane with the diffuse and alpha maps applied. I’ll usually toggle on preserve UVs before cutting out the leaves and petals with the multi-cut tool. Doing this allows me to adjust the vertices without any stretching. Once I’m happy with the topology, I’ll turn off preserve UVs, extract the selected faces and either deform the shape with lattice or push around the vertices with soft selection turned on. I’ll then duplicate and rotate the foliage card around a center point to build up my plant. After finishing the top portion of the plant, I’ll make a stem and attach it to the bottom.
My approach to making plant stems depends on its thickness. The fern’s stem was modeled directly from a plane and kept flat while the monstera and lotus’s stem were made from separate meshes and attached to the base of the flower or leaf. To make a low poly stem with enough volume, I needed to make a flat triangle as the base and then extrude it to the desired length. One of the things I learned to watch out for is overdraw, so I modeled the leaves as close as possible to the plant’s shape.
Simulating Fountain and Pool
I based my water texture on some water caustic photos that I found on Google. I started with a mid-tone for the base and then painted the brighter caustics on top. I wanted my caustics to be subtle, so I painted it with a lower value. To get my transparency map, I desaturated the diffuse texture and adjusted the levels to reduce any extreme values.
The liquid in the water fountain started from a circular plane. To get the cascade and rim, I selected some of the edges and extruded it to its destination. After adding additional edges and getting the shape down, I UV’d them into strips and placed them on a trim sheet with vertically tiling streams on the right and horizontal ripple lines on the left. The direction of the flowing water depends on the orientation of the UV shells. It helps to test the stream’s path by vertically dragging the UV shells.
To make a ripple effect that spreads outward, start with a circular plane with the vertices merged in the center. Select the outer edges of the circle in the UV editor and scale them down until you have a pyramid shape.
To get a softer transition between the edge of the waterfall and basin, I applied a duplicated waterfall material to the mesh and combined the gradient mask texture with the albedo’s alpha.
The pond reuses the same tileable water shader and the water stream trimsheet.
Danilo Paulo’s Collection of Custom Shaders for Marmoset Toolbag 3 was crucial to getting the water to pan and animate. I ended up copying the alpha map from my water texture and increased its contrast to utilizing it as my gloss and displacement map.
The directional light angled towards the wall was my main light. I positioned it to get cast shadows from the ivy hanging from the roof. To get more color and atmosphere into the scene, I placed a golden Omni light above the fountain and a green Omni light behind the foliage. Finally, a spotlight was used to lighten the cast shadows and add a bit more roundedness to the pillars.
Figuring out the shape language for the secondary assets and the scene’s overall composition were the biggest challenges for this project. I was a little lost with my pillar and gateway designs until Ashleigh painted over them. She also helped me improve the pool’s shape by getting rid of the sharp corner and making it curve towards the viewer. Other suggestions that helped with this project were the addition of bigger plants up top and varying the bricks’ wetness and size. The 5 weeks of feedback taught me a lot about shape language, balance, and the reuse of specific motifs to tie everything together.
After finishing the course, I revisited and polished the scene by adding fish, FX, and animations. Overall, I had a lot of fun working on this and learned so much from this experience. I have a couple of unfinished projects that I plan to work on next. One of them is a broader environment in Unreal.