Junk Planet: Working on Textures and Environmental Shaders

Junk Planet: Working on Textures and Environmental Shaders

Nikhil Kedige shared his approach to his graduation project Junk Planet, a highly-detailed sci-fi environment made in UE4.

Introduction

Hey, my name is Nikhil Kedige, I’m 21. I recently completed my diploma at Think Tank Online with Junk Planet being my graduation project.

Before TTO, I used to study at DSK International Campus but I had completed only 2 years of the 5-year course and left the college. That college ended up shutting down and reopening under a different name where I was temporarily employed to teach my former classmates about the process of creating game environments.

Back in high school, I used to focus on computer programming and had no interest in art, but sometime before the exams, we came to know about a Game Jam held by Nasscom. I was part of a 5-person team and the role of creating the environment was given to me by the chance of dice, and ever since I have been in love with the process of creating experiences that you can share with others through games.

1 of 9

About the Project Junk Planet

This was the final project I would get to at the end of my course so I wanted it to show a compilation of skills I had acquired during the studies and more. To challenge myself, I had decided pretty early on that I'll be doing an outdoor environment as it was something I didn't approach before and it would come with its own set of learning experiences and challenges. 

The concept I chose was made by Eddie Mendoza. I decided to go with it because it had a very unique look and feel to it, a blend of aviation tech we have right now with enough variation in scale and unique setup of makeshift houses to keep me motivated during the course of the project. Apart from the pure creation process, there was also the opportunity to tell a story. I truly enjoy looking at artworks and discovering new details that the artist had left there to tell a small story.  I wanted to fill my environment with little details and easter eggs which have been part of my journey as an artist and make this project serve as a milestone for what I have learned.

I had a wide array of references starting with images from MH 17 plane crash which were used in the concept for ship debris. Other references included ship hydraulics, slums, post-apocalyptic signs, and some images from games like Far Cry 5, Borderlands, Dying Light and concept art done by ILM for the Star Wars Movies.

Structure

Having a modular approach for this environment was difficult given how unique each section was. So while blocking out the scene I focused more on the big picture. I divided the scene into different ‘houses’ and had a blueprint set up for each of them. This way I could move large structures around and play with the composition. I also blocked out the shots alongside my environment so I had a clear idea of what would be visible in the camera which made me plan the amount of modeling that was required. 

1 of 3

For the landscape, I started with the default Unreal landscape tool to have a base on which I could set up my composition. Before sculpting, I'll create some really basic geometry to take the place of the major objects that are going to be in the finished scene. At this stage, it's less important for me to worry about getting all the geometry to line up exactly with the reference art than to get the feel of the space I'm trying to recreate. Once I've got the scale and the spacial relationship between the primitives right on the flat ground, I'll raise them to about how high I want them to be above the lowest point in the scene (where the landscape is currently sitting), and then I'll sculpt the landscape to meet the geometry. Now at this stage, I create shapes on the landscape at about the size, shape and position I feel look right using the Unreal sculpting tools. This is just intended as a guide to help me with placing landscape features when I get into Gaea.

In Gaea, I run the exported heightmap through the relevant erosion nodes while masking out the areas I don't want to be affected. I use Gaea to create an albedo map alongside the heightmap for the landscape. This heightmap replaces the one in Unreal and the albedo is used as an overlay in the landscape master material so I can have control over the colors on a larger scale irrespective of the textures I use for close-up details.

Lastly, to get some variations in the landscape, I used Gaea again to create a couple of mountain meshes and textures and I sculpted some modular rock assets to be used alongside the ones from Megascans.

Modeling

I approached modeling according to the shots I had blocked out earlier,  and the structure in focus was the one I modeled first. It ended up helping me out as I was able to reuse most of the assets when I went from shot to shot. 

While analyzing the concept I realized that some engine debris were repurposed to act as roofs for shelters by scaling up, similarly some engine pieces could be reused by stacking them in a different order and changing the pipes on top. This gave me an opportunity to be creative when it comes to scaling without having to do extra amounts of modeling.

When it came to building the main structures, I wanted each one to have its own look and feel as everything is built from scraps and not everyone has access to the same resources. So I approached it as if it was me who was building those structures in person which meant thinking about every asset and its practicality. For example, if I were to put up a sign I would hang it up using existing pieces from the structure and hoist it by tying it to nearby debris. Now if it lights up then it should have a power source, however, that power source shouldn't be used for the signs exclusively as it would be a waste. Similarly while building the houses I kept in mind that not everyone can have the same amount of metal panels and would have to use alternatives like tarp or pieces of wood. This added a little bit of story element to every asset.

1 of 2

For the UVs, I considered every major structure/house as one asset and set the texel density based on the shots I had blocked out earlier. Now to maintain the texel density I used 4k, 2k and 1k textures based on the scale of the assets so I still had room to paint on the smaller assets by using a lower resolution instead of packing everything into a 4k or 2k texture. The assets that were too big in scale to fit inside the UV grid had tiling textures with vertex painting enabled. I also mirrored the UVs on symmetrical assets and put the mirrored parts on the negative axis to flip the texture. Lastly, all small assets like screws and bolts had stacked UVs. 

4k, 2k, and 1k:

1 of 3

I unwrapped the models in RizomUV and baked in Marmoset Toolbag. You just need to separate your model properly to different baking groups and models will bake in one click. Also, try to think about the baking process while you are at the high-poly stage. When you gain more experience in baking, you begin to understand how most artifacts can be eliminated if you think over high-poly correctly.

Texturing

Since the scene consisted of junk and debris set in a low light environment, there were quite a few things I had to keep in mind while approaching the texturing phase, both technically and artistically. It was important to make the viewer believe that all the scrap was actually reused and not just placed for scenery. This can be achieved through the creation of specific damage. Always try to think about how you would use this prop and what incidents might occur during its use. I also added some graffiti here and there as I thought it would fit better in this particular world.

1 of 2

While texturing, always think about the layers of materials that are present on the object and try to repeat them in textures. In my environment, there were mostly no simple materials. Everything had to be built up while keeping in mind different things - for example, some objects were created first from polished metal, then covered with paint; with time the paint cracks and moisture gets under it which results in rust between the metal and the paint; also there might be some dust and dirt on top of those layers, paint can fade out if the object has been exposed to direct sunlight for a long time, and so on. Following this, I created some smart materials for all kinds of surfaces and reused them with minor changes based on what the concept needed for each structure.

1 of 3

On the technical side of things, one of the issues I ran into was that some of my assets looked too dark in the scene and the renders had lots of pure blacks in them which is never a good thing. This is where I found the PBR checker. It's a filter used in Substance Painter to check the albedo and metallic values and it's represented by green, yellow and red colors. Red symbolizes 2 things! Either your albedo is too dark, or the metallic value is too dark! To hotfix this you can assign a clamp filter to bump all low values via a passthrough layer (this is a muddy way of fixing this) or you can use a histogram scan filter to bump the brightness of the textures.

1 of 2

Scene Setup

The lighting along with the look and feel for my scene was mostly governed by the sky.  The concept had a very distinct look with specific colors and I decided to approach this by starting with the sky. I set up a very basic HDRI with an inverted sphere for the sky Ithe HDRIs were taken from hdrihaven.com). When it came to lighting, I had one directional light and one skylight which gave me the first basic setup. I took the renders from this into Davinci Resolve where I set up a distinct look based on the concept and created a Lookup table which I brought into Unreal Engine through photoshop. This took some trial and error as some of the colors and changes done in Resolve were lost when transferred to Unreal. The LUT had to be adjusted alongside the color grading tools in the engine to achieve the final result. For me, color grading and lighting went hand in hand as the concept did not necessarily have realistic lighting but a strong look to it. 

1 of 2

Throughout the process, there were some keywords I kept in mind which I wanted to convey through the atmosphere, such as ‘harsh’ and ‘warm’. With the look setup, I went back to each shot and did some light painting with spotlight at low intensities to bring out additional details that were lost in the lookdev process. Lastly, to finalize the look, I decided to break up the sky with some clouds and planets to emphasize the ‘sci-fi’ look and get more control over the background in each shot.

Cloud and Planet Shaders

Both sky and planet shaders were pretty basic but powerful. I could get quite a few variations without needing to do any additional texture work. The cloud shader worked on an image plane and I had a simple sphere for the planet shader. The whole idea was to get more control over the sky breakup while being able to blend everything together since I was using HDRI as the main background.

Here is the master material for the planet shader:

For the base, I had a general planet texture along with a skymap which was a greyscale image of clouds that was connected to a panner node. I added some additional controls for the UV manipulations so that I could get variations in the texture itself for every shot.

I also added Fresnel to simulate the effect of the atmosphere, it added a gradient to the edge of the sphere which direction could be changed so that I could match the planet’s lighting based on where I placed the sun.

Now to blend the planet into the background, I set this up as it's important for daylight scenes to feel real by making it fade into the atmospheric fog. For using this, it's important for the material to be set as translucent.

I started working on the clouds by researching the type of clouds in my concept. It took me a while but I managed to find some photographs of the same type of clouds. For me just having a simple plane with an opacity map wasn't enough, it meant I had to either make different versions or scale and rotate parts of the same version if I were to duplicate and reuse it. Instead, I decided to add a little bit more functionality to my shader after analyzing the tutorial by Tyler Smith.

Before setting up the shader, I had to create some files for the shader to work with (you can find .tga files here). One was a base texture file with an alpha channel, and the other was an RGBA texture map with different masks packed into different channels. Each mask represented Highlights, Midtones, and Shadows so I could individually alter them in the engine. I also added a flowmap to give more directionality to the clouds.

Here is an overview of the entire material:

Most of the variation in this shader was controlled by using Parallax Occlusion Mapping. Adjusting each of the parameters here gave vastly different results.

And lastly, this was my panning setup with the flowmap. The way I used this was by keeping it at a minimal intensity as tweaking the parallax occlusion along with the flowmap occasionally broke the texture so it was about finding a balance that would work in every single shot without needing any additional tweaks.

Advice

Always pick projects that challenge you. While looking for concepts to work on, never approach it thinking “ yeah this seems like something I can do”. Instead, find something which speaks to you personally, this will more than anything keep you motivated while working long hours on the project. If you think about what you want to achieve then you can figure out the easiest way to do it. Working on something you have never done before helps you grow faster. This even applies to student assignments, - I always kept the idea in mind that if I'm going to be spending days on an asset, I might as well try to make it a portfolio piece. It may not always work out but more often than not, putting that extra effort in will be worth it.

Keep planning ahead, it's always good to have milestones instead of thinking about doing something in the future. This way you will always know the pace at which you are going. Having clear goals is important, you may not always meet your own deadlines as lots of issues come up when you are working on something new, but this also puts you in a situation where you have to find a solution or an alternative faster way to do it, and both of these will be a learning experience you won't forget.

Always look around and find inspiration be it in real life or on the internet, and always keep sharing your work at every stage of the progress. Usually, on big solo projects, you lose sight of the smaller details while focusing on the big picture and it's always good to take a step back and get someone else’s opinion. Every time people will bring attention to the things you didn't think of.

There is an incredible abundance of resources out there that would help you get started, a few of them being Artstation, The Rookies, and 80 Level. Apart from these, one thing I would recommend is watching the Quixel live streams. Every time, while showcasing their environments, the artists also show some amazing tricks that will help you push your environments. The same goes for Unreal live streams.

I'm thankful for the opportunity to give this interview and I hope some artists who are just starting out were able to find something useful here. If you have any questions for me, please feel free to contact me through my ArtStation page.

Nikhil Kedige, 3D Prop & Environment Artist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

Join discussion

Comments 1

  • Demetriades Alexandros

    Great post and very cool atmosphere!
    If you want an easier way to match your Substance painter with Unreal  download the UE4 LUT (https://www.artstation.com/artwork/mrqd8) and change the look in Substance painter. That way WYSIWYG in UE4!

    0

    Demetriades Alexandros

    ·3 months ago·

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

Junk Planet: Working on Textures and Environmental Shaders