Professional Services
Order outsourcing

Stolen Knowledge: Texturing and VFX in a Stylized Environment

Joey Dhindsa did a breakdown of his stylized 3D scene Stolen Knowledge talking about sculpting and texturing the hero asset, custom SD materials and vertex shader setup in UE4, lighting, and lava, candles, and tornado FX.


Hello! My name is Joey Dhindsa, I am a 3D Technical Artist from LA. I graduated in 2015 from Cal State University Fullerton and currently work at Talespin helping create Virtual Reality experiences. For the past 3+ years, I have been part of many key projects including CoPilot, which helps teach VR users to build effective soft skills in the workforce. For me, donning a VR headset and knowing I’m about to be immersed in my own 3D environment is one of the most gratifying feelings. Artists can now step into their own virtual worlds and find themselves experiencing design in a whole different light. Exciting times we live in!

I remember being in junior high school when I began reading a book on creating 3D assets in Maya. Few weeks prior to that, I had watched Disney’s The Incredibles and my mind could not break away from wanting to create something of my own design. In college, I started to learn about game engines such as Unity or Unreal and found myself hungry to learn everything I could about the future of design and artistry.

I like to think of myself as a sponge, constantly expanding my knowledge in a wide range of art-related topics to acquire the skills needed not only to start a project but also to bring it to fruition. I’m constantly reminding myself to simplify my ideas from overly grand to something more contained and manageable while thinking ahead about the technical challenges before starting a project. This way, I can focus on key elements from start to finish, while fueling my motivation to picture the project through to its final stages. 

1 of 7

Stolen Knowledge: Project Development

Before embarking on my Stolen Knowledge project, I had a case of artist's block. We’ve all been there! It’s late at night and you may be browsing ArtStation on your phone looking at a plethora of visually stunning 2D and 3D concepts of props and environments while feeling awe-inspired. But not inspired enough to the extent that it triggers in you a purposeful action to take steps towards and make something of your own. And right around when you decide to put down your phone and head to bed something catches your imagination. Suddenly, your once droopy eyes are now full of life and a sudden wave of ideas flows through you. This is what happened when I came across the work of a very talented concept artist Baldi Konijn. His collection of stylized art on the game Darksiders Genesis reinvigorated that side of me that wanted to create a stylized 3D environment of my own. Immediately, I told myself to think, “contained and manageable”, as discussed in my intro, which is probably why the project took 2 months versus never getting around to finishing it.

My plan began to take form during my evenings after work hours. I began by collecting a collage of props and structural concepts that I felt were interesting and fun to model. And below is what I put together:

Out of all the collected art, the rock asset with demonic faces and lava pouring down from it immediately caught my attention. I pinned that concept as my hero asset, in the sense that it should be the focal point of my project dictating the environment surrounding it accordingly. I thought, “What if this mysterious rock contained bountiful dark secrets and knowledge and was imprisoned for the purpose of extracting all that it may know?” Based on this idea, I imagined long chains holding this evil rock in place while accenting columns around it. After taking some time to block out the environment in Maya, I exported what I had into Unreal Engine and played around with the composition and lighting until I thought my art direction was just right. By the way, Unreal’s rule of thirds grid in the viewport is my best friend when working on the composition. Here is my early result:

Taking the time to block out the scene really helped me process all the assets I needed to build it. Here is a look at blocking out the scene further; this is where I landed before moving forward to the next stages:

I decided to work on the hero asset first so as to keep me motivated. I’ve been a huge fan of Michael Vicente for years and he’s got a few ZBrush brushes one can utilize to facilitate the process of sculpting stylized assets. Thank you, Michael! Studying his stylized sculpts helped me better understand scale, texture, and technique when using his brushes. After a couple of hours in ZBrush, this is how it looked:


After decimating the rock in ZBrush to a lower polygonal model, I brought it into Maya and UVed it. Next came Substance Painter. Here’s a basic breakdown: 

After baking all my textures in SP, I start by creating a new fill layer and applying the base color followed by another fill layer with some dirt through a generator. Next comes Edge Darkness and Edge Highlights. For this type of stylized texturing, I gave myself some rules to follow for consistency:

  1. The overall color should be lighter farthest from the edge of the form. 
  2. When near the edge of the form the color should get darker. 
  3. The color should be the lightest directly on the edge of the form to create a highlight.

To achieve this, I added the curvature map that was baked earlier to a fill layer and played with a levels adjustment to get an effect like this:

Next, I added some overall white noise while masking out portions of it to vary the effect. Color variation and emissive were also added. Every time another fill layer is added to the project I like to assign its own roughness value. Last but not least, I like to add AO directly into my color for optimization purposes when setting up materials in Unreal. These principles are what I used to help texture most of the custom sculpted assets and this is how the breakdown looks with Albedo, Metalness, and Roughness in Unreal:

Substance Designer was used to create 4 custom materials. With the help of vertex painting in Unreal, two of these materials were used to form the walls - Bricks and Stucco.

For the Bricks, I started out with a simple square shape and subtracted sections of it using gradients when blending the nodes. Using the warp node, I was able to give the brick an uneven look before inputting the alpha into a tile generator. After tweaking the generator settings, I utilized other nodes that would help output the albedo, roughness, and normal map.

For the Stucco, I created two different sized paraboloids and overlaid them with a blend node to help simulate a stylized hole. I ran this alpha through a tile generator varying the location, rotation, size, scale, and the number of holes. Once these two materials were set, I went to Maya and added edge segments to the wall model. 

Segments that are denser or in close proximity to one another would be painted to reveal the brick wall. Here’s an overview of the vertex shader with only the albedo:

I typically add my metalness, roughness, and height or misc maps into the R, G, and B channels of a single texture file. In this case, I multiplied the brick height map to the vertex R color and added a Parameter to control the height intensity. This way, when the brick is revealed under the stucco, it’ll feel more natural and pronounced. Here’s an overview of the vertex shader with the albedo, roughness, and normals:

Another material I made using Substance Designer was Dirt.

For the Dirt, I used the same method as discussed earlier and subtracted sections from a paraboloid before inputting it into a tile generator. Here’s a look at using vertex painter in Unreal to reveal Dirt on top of the ground tiles:

The last material I made using Substance Designer was Lava.


After creating the Lava material in Substance Designer, I modeled 3D lava falls pouring down from the Hero asset in Maya. The next step involved UV mapping it so that the UVs started from the highest point of the lava falls model and ended at the lowest point of the model. This way, when I set up the material in Unreal, the lava texture will be perfectly tileable when panning in the -y direction. While still in Maya, I took the opportunity to paint vertex colors onto the lava falls model. I wanted to create the effect that would make the lava clearly visible at the highest point of the lava falls and slightly dissipate it at the lowest part. The color red was painted at the highest point and green at the lowest point. In the reference image below, the color green is showing up as yellow because I have smoothed the colors between red and green at the lowest point. This should reduce the harshness of the dissipation effect in Unreal. 

I created a parameter to play with the opacity strength which helped me control the dissipation levels in real-time.

My next objective was to add flames to the candles and I wanted the flames to have a sense of believability. The idea was to simulate the flames in such a way that each one would animate differently:

To get this effect, I searched the internet until I found a great tutorial on YouTube by Quixel that goes over the process of animating vegetation. I used the same principles taught in this video but multiplied it to the R Vertex Color channel when creating the flame shader.

Another VFX I had the pleasure of working on was the spirit tornado.

To get this effect, I built a circular model that formed a tornado-like structure. After UV mapping this model, I duplicated it 3 times and rotated it respectively 90, 180, and 270 degrees. The UV map was set up to allow a texture to pan across it from left to right (x- to x+). The texture itself contained different elements in the RGBA of a Targa file. The R channel was used for the purpose of scrolling the spirited skulls through one portion of the UVs and the G channel through another. The B and A channels were a bonus to help add a hint of mist. This is how the setup looked like: 

One can only imagine all the possibilities of varying the RGBA channels to create various different effects.


A combination of both real-time and baked lights can be effective when trying to enhance the overall lighting in the scene. Here’s an early example of blocking out the lighting:

Overall, I wanted the lighting to accent the hero asset more than its surroundings. As shown in the image above, volumetric lighting can be seen coming down from a spotlight above the hero asset. This helps accentuate the focus on this area of the composition.

One of the challenges with lighting this scene was that certain assets began to feel lost in the darkness around the hero asset. If I turned up the overall global illumination, the hero asset started feeling less and less like the main attraction. Finding a good balance in the lighting throughout the scene without sacrificing the visibility of the surrounding assets was key.

I think that lighting is an ongoing process throughout the project during which you constantly make key adjustments. What helps me in particular is to first block out the lighting from the start of the project to find an artistic direction. After that, I would periodically tweak the lighting every so often when populating the scene. Lastly, some final adjustments can be made once the environment is fully populated. It is also worth noting that when texturing assets color consistency is important. In the image below, the main thing that grabs the viewer's attention is the pink lava and crystal, along with the blue flames that help break up the monotony. But the rest of the scene is fairly consistent and the colors play well with one another due to comprehensive hues and values.

While using real-time lights, I wanted to take the opportunity and breathe life into the lamps and fire effects accenting the columns. To do this, I created a light function in Unreal to simulate a flickering effect:

The effect is subtle and perhaps not needed but I felt it added a level of ambiance. The resulting change of adding this light function to a point light is depicted below:

The overall color choices in lighting provided a dark and sinister mood, however, hints of emissive lights on key assets became a bonus to sell the idea of a fantasized magical world. Adding emissive is one thing but one can further enhance it by panning a cloud texture on top of an emissive alpha to vary the intensity.

Final Thoughts

Although I encountered many technical challenges, I had a lot of fun working on this environment piece. Not only was the process enjoyable from start to finish, but I also feel my artistry has matured even further. Sculpting and texturing all the assets for this project was super exciting! One of the challenges I faced in Unreal was getting around light bake errors. I had many issues when baking the lights, namely because of errors stating I had overlapping UVs on my lightmaps. I had to triple check my UVs in Maya and make sure they were perfect before exporting assets to Unreal. Another challenge was finding a good hue and value balance during the asset texturing process. Originally, the color saturation levels were a bit too high on all the stone assets which created a green-like effect when using blue lights around the outer wall, columns, and ground tiles. Lowering the saturation levels mitigated the green effect and made the stone assets look and feel more natural. 

This environment is by no means perfect, and if you have any suggestions or would like to share some tips and tricks of your own, feel free to reach out to me on my ArtStation profile. I’d love to hear from you.

To the artists reading this article, if there is one piece of advice I could give, it is to take care of your health. Investing in a standing desk may be a good idea so you’re not sitting all day. And please find time to exercise and make healthier food choices so that you’re well energized in your quest to build your next stellar art piece.


Joey Dhindsa, 3D Generalist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more