28 April 2022

Relic Weapon – Prop Breakdown – Lucas Mania

shot_02-scaled

Introduction

 Hey There! I am Lucas Mania, a 3D game art student from Berlin, Germany, with a passion for Hardsurface and Prop Art.

I am currently in my final Semester of education at the S4G School for Games, trying to build up a portfolio and prepare for my graduation.

Up until the point of starting this project, I was always focused on creating realistic props. While venturing through Artstation, I came across a piece of concept art by Rock D, which I enjoyed. Inspired by games like Valorant and Overwatch, I took this as a chance to try something new to expand my skill set.

References

Since I was trying to translate a concept into 3D, there weren’t a lot of specific references I could work from, compared to a realistic prop, for example. Instead, I collected screenshots of props from the games I mentioned earlier. To ease the texturing process, I tried to find images of assets with similar materials to the one I was going to create. I also gathered some references for specific details that would come in handy later down the line. Given that the brass/gold takes up most of the prop, I was especially focused on finding good references for that material.

I highly recommend using PureRef to collect your images. It is a great tool that enables you to have all your references in one place. It also allows you to place them over your 3D application or texturing software.

screenshot_01

Blockout

This part of the modelling process is one of the most important yet sometimes overlooked steps. Concentrating on small details from the get-go can be a stopper and can cause unnecessary work down the line if you have to make large-scale adjustments to your asset. It’s always easier to change shapes and overall proportions early on when you do not have to worry about intricacies. I usually try to introduce as much detail as needed to get a proper feel for the model, yet avoid spending too much time on topology and features that are probably subject to change anyway.

If I work this close to a specific reference, I usually place it within my scene. In 3Ds Max (my primary modelling software), you can simply create a plane with the same aspect ratio as the image you are trying to import. So if your image file is 16:9, you can create a plane with a length of 16cm and a width of 9cm. Subsequently, you simply have to drag your desired image from your windows file browser onto the plane. You can then add a helper cube with the dimensions you want your final prop to have and scale the image plane accordingly. The goal here is that the object you are going to model matches the size of your helper cube. This process may differ from software to software, but I generally recommend doing so, since it makes blocking out your asset easier. This obviously only works when you have an orthographic image at hand.

screenshot_02

Base Mesh

After finishing the block out of the weapon, I started to work on my base mesh by adding detail and refining the different shapes. Since the reference only shows one side of the asset, I had to improvise in some areas. Generally, I would advise not to be afraid to deviate from the concept a little if necessary. Your overall goal should be to create a convincing final result, not to flawlessly match your concept.

The base mesh can be described as the precursor of the high poly. I usually include all the details of the design while not being too concerned about topology and support loops yet. That way, I have a model which can easily be broken down to get my game ready mesh but can also be used to create the high poly down the line. A rule of thumb I try to follow is to use as many polygons as needed to translate the concept into 3D, with enough density to avoid making it look low poly. On the other hand, I try not to go overboard so I can easily reduce polygons to achieve a low-res mesh later on.

One of the areas I struggled with was the front part of the gun, holding the faces. Initially, I tried to achieve those with regular polygon modelling. Unfortunately, I wasn’t really able to get a satisfying result that way. Instead, I imported the piece the face was going to be placed on into ZBrush and quickly sculpted it roughly the way I wanted it to look. I mainly used the ClayBuildup Brush combined with the DamStandart for some more refined cavities.

screenshot_05

Subsequently, I reimported the mesh back into 3Ds Max and used Max’s internal retopology tools to get some cleaner geometry. From there, it was just a simple matter of connecting the retopologized face with the surrounding polygons.

screenshot_06

High Poly

Given the intention behind this project was to try whether I could achieve a certain level of stylization and learn a new texturing workflow, I tried to avoid any hold-ups during the modelling process. Therefore I chose to go for the Dynamesh Hardsurface workflow instead of utilising traditional subdivision modelling to achieve my high poly.

I won’t go into too much detail here because there are already several comprehensive guides on the topic online. The workflow revolves around using ZBrush to create all the soft edges, which you would usually achieve by adding support loops and a level of subdivision to your mesh.

The process is pretty straightforward and does not require a lot of experience with ZBrush in general. I started by setting up the UVs of my base mesh based on their respective smoothing groups. At this stage, it is not of importance to lay them out properly. They only need to be a separate UV island each.  After importing all the meshes into Zbrush as individual subtools, I applied polygroups based on their UVs.

screenshot_07

Following that step, I dynameshed all the different pieces so they would have a higher polycount to work with. Based on the polygroups I set up earlier, I could mask all of my hard edges and smooth them with the polish slider.

screenshot_08

Afterwards, it was simply a matter of decimating the meshes to a lower polycount and then reimporting them into 3Ds Max.

This approach can be an immense timesaver due to the fact that it is extremely forgiving in terms of topology and does not require you to do a whole lot of cleanup to achieve a high poly without shading issues. The workflow has its shortcomings in some cases. Yet I would recommend everyone who seriously considers getting into Hard Surface art to add it to their repertoire. There is also an alternative using Blender, which works in a similar manner.

Since I was already working in Zbrush, I decided to introduce some sculpted details that would help with the stylization of the asset. I added a few cracks around the wooden part of the handle and some indents to edges that would potentially be more exposed to external influences.  Furthermore, I sculpted the teeth of the faces and also added some structure to the cloth around the grip. Michael Vicentes “Orb Brushes” came in handy here, which are great for stylized sculpting.

screenshot_09

Low Poly

Creating the low poly was a pretty uncomplicated process. I made a copy of my basemesh and started optimising areas by removing polygons and loops that had no use. Generally speaking, you can always remove geometry if it does not majorly impact the silhouette of the asset. I always try to keep an overall low polycount while avoiding obvious faceting, especially in areas that would be close to the camera.

screenshot_10

UV Unwrapping

Given that the number of UV seams in the model affect the “true vertex count” of an asset within the engine, I tried to minimise the number of individual UV islands. That is due to the way GPUs interpret 3D models. There are a few informative explanations on the polycount forums should you be interested in the topic. There is no need to frantically cut back on UV shells, but I would consider it a good guideline to abide by. It also helps with the clarity of your UV layout. Furthermore, I tried to straighten most of my UVs to allow for better packing and to get less aliasing on my seams.

Since it is a portfolio piece, I would argue that it is not necessary to mirror any UVs, but I did it anyway to get more texel density and save some time later during the texturing process. Looking at it now, there are probably a few areas on the faces that didn’t necessarily need to be their own island.

Following the unwrapping process, I used an add-on called “UVPackmaster”. It allows you to pack your UV Islands with the click of a button and covers a lot more space than a manual UV layout could. I highly recommend using it, given it saves a lot of time and makes rebaking easier if you have to adjust your UVs later on. (It is also available for Blender)

Another add-on I integrated into my Pipeline is textools. It comes with a  feature called “Smoothing Groups from UV Shells”, which does what the name suggests. Since every hard edge of the model needs a corresponding UV seam to bake an error-free normal map, you generally want each UV shell to be its own smoothing group. If you are interested in normal maps and their correlation to shading and UVs, I advocate reading through Carlos Lemos’ “This is Normal” tutorials on Artstation.

screenshot_11

Baking

Ever since I started working with Marmoset Toolbag, it has become my go-to in terms of baking maps. I rely on substance painter for smaller assets every once in a while, but I have yet to find an application that is equally efficient and intuitive as Toolbag. It comes with a live preview feature which is especially great for less capable hardware and shows results without having to rebake after a fix. It also offers the option to adjust the baking cage directly and has a painting tool that accounts for skewing. Therefore you don’t need to jump back and forth between applications or change the geometry for most fixes.

I generally bake all my maps in 16 bit since Toolbag’s dithering algorithm can produce quite poor looking outcomes when baking in 8 bit. I tend to get better results whenever I import 16 bit bakes into substance painter and export them in 8 bit with dithering once I am done with my textures.

I set the samples to a maximum of 64 to improve quality and anti-aliasing for the curvature-, ID- and both of my normal maps. Since the sampling rate hugely impacts baking times, I set it back to 4 for the remaining maps. To reduce possible graininess in my AO, I opted to increase the raycount. Given that this can also result in much longer baking times, you should be cautious not to push the value too much. 1024 is usually enough. I baked all the textures in 4K.

screenshot_12

Texturing

The texturing process was the most challenging part of this project for me. As I previously mentioned, I had never done any properly stylized art before, which meant I had to start from scratch. Luckily there are a variety of guides and tutorials online that aided a great deal in achieving the final look, but it surely took some trial and error. One thing that I would definitely recommend doing is always considering your references.

I started by creating a simple base material consisting of a base layer with colour- roughness- and metallic value.  Additionally, I added three layers for edge highlights, cavities and ambient occlusion. I copied the material a couple of times and adjusted the parameters to get a basic version of all the materials present within the concept. Making use of my previously baked ID map and substance painter’s colour selection tool, I set up masks for every material to apply them to their respective parts of the weapon. I would generally advise applying base materials to your entire mesh early on to balance them out with one another.

In the next step, I stamped in a couple of height details using custom alphas and a few of the alphas that already came with substance painter. For those details to be affected by curvature and AO generators, I used anchor points which I then referenced within said generators.

A mistake I  frequently made while learning Substance Painter was to put a lot of time into variation within my roughness while neglecting the colour. You always want to keep in mind that both colour and roughness should look visually pleasing. Otherwise, you get a bland-looking asset whenever your lighting is not adequately set up to highlight your roughness. It is especially important for in-game use, where you will very rarely have the perfect lighting setup.

Real-life brass usually oxidises and thus turns a little darker and greenish after being exposed to weathering for an extended period. Since the weapon is supposed to be an ancient relic, I wanted to reflect that aged look within my textures. I set this up by adding a new fill layer to my stack without input into any channels (colour, roughness, metallic, etc.). Subsequently, I added the „Baked Lighting Stylized“ filter, a great tool to achieve this sort of colour variation. It applies static lighting as a colour input, based on your world space normal.  However, you can also use it to generate a directional mask.

Additionally, I added two „mask editor“-generators above the filter. I adjusted one of the generators to input some ambient occlusion and customised the other to slightly highlight the edges. Both help to give the mask a little bit more depth. I then added an anchor point on top. You must place this layer at the bottom of the stack below your materials. That way, you can reference the anchor point within the colour channel of any of the base layers of the materials.

screenshot_17

After setting up this layer your base colour should look something like this:

screenshot_18

You can then remap the colour of the base layer by adding a gradient filter to it. In my case, I set up the filter so that the white values further on the top of the weapon would have the golden colour of the brass and the darker values at the bottom and in occluded areas would get that aged, greenish tone.

screenshot_19

I also added another layer affecting only the roughness on top, though this one referenced the anchor point within its black mask. Adjusting the roughness value of the layer allowed me to make the oxidised areas less reflective than the pure brass.

screenshot_21

Gradients are another great and commonly used way in stylized art to break up uniformity and give some more variation to your colour. They can also help provide directionality to your asset and lead the viewer’s attention to specific details. Because I worked with a relatively large amount of gradients, I created a second painter file with the same mesh to generate a gradient map. To my knowledge, there is currently no practical way to use a large number of gradients without adding quite a few layers to your stack. Hence the second Substance file. Thus I was able to import the gradient map as a simple texture and keep my original texturing file clean and organised.

screenshot_22

I also made sure to add a couple of noise layers with differently tiled grunge maps and scratches to provide more variation to my roughness and colour. Since most grunge maps natively coming with Substance Painter tend to be quite noisy, I added a „blur slope“-filter on top to give them a more stylized feel. I experimented with a couple of different custom noises as input and found the „creased“ and “creases soft” maps to work quite well. I really enjoyed the brushstroke-like structure they added to the grunge maps. I experimented with different opacity values of the layers since leaving them on 100% looked very noisy.

At this point, I tend to export my textures into Marmoset Toolbag for the first time. Since there will always be some discrepancy between your substance viewport and your target software or engine, it can be helpful to look at your asset in both applications during the texturing process. By checking different possible render angles and lighting conditions, you can determine which details or materials might need tweaking. You don’t have to check your renderer after every adjustment you make but going back and forth every once in a while is definitely good practice.

Since almost everything I had done up to that point was achieved using generators and masks, I decided to add some hand-painted details. Those are what give your asset character and help achieve a more natural feel most of the time. In addition to the strong generated edge highlights, many games with a non-realistic, stylized art style use broader chipping like edge damages. They are typically placed in areas that would be more exposed to collision or around normal indents and cracks. The process to paint those in is pretty straightforward. I started by drawing a rough polygonal shape and continued by removing some of the painted detail in some areas to introduce a few more rounded shapes to make it look more natural. The process of painting in detail and then removing some of it where necessary usually yields the best result for me. Something I learned through feedback was that you want to balance out those details. Don’t place large chippings everywhere, but rather vary them in size and consider their placement to one another.

screenshot_25

Another thing I noticed while looking at references of Overwatch is their use of water spot like details which are usually placed in cavities and corners where dirt and grime would accumulate. Using Substance painter’s internal alphas turned out to be a viable way to achieve said detail. That way, the water spots felt more natural and convincing compared to painting them entirely by hand. Since many of those alphas are catered toward realistic art, I repainted them to eliminate noise and graininess and give them a more stylized look. I frequently used the “grunge map 04” as a stencil since it offers a variety of different water stains you can arbitrarily rotate and combine to get a good looking result. There are also a few good alphas if you look for “brush”, “stains” or “smudge” within the substance shelf. Closely observing my reference helped a lot in getting an idea of how to approach this kind of detail.

screenshot_26

The last thing left to do by then was to polish the letters on the drum of the weapon. So far, I had only applied a single emissive colour utilising the anchor point I had used to stamp in the normal detail. Yet I found it to look too bland and not all that fitting. Once again, looking at examples of my references helped a lot to find out what I was missing. I chose to vary the colour and intensity using a secondary layer that applied a gradient to the letters. I also added another layer with a hue shift to the outline to give them a more glowing appearance. Last but not least, I copied my base layer and added a blur with a levels adjustment on top of the alpha to mask out the core areas of the letters. By changing the layer’s emissive colour to an almost white value, I was able to push the glow effect even more.

screenshot_27

Lighting and Rendering

I did my final renders in Marmoset Toolbag. I started by importing my mesh and textures and set up a few cameras for different possible render angles. I usually include one or two wide shots to display the asset in its entirety and follow up with a couple of close-up shots. Utilising depth of field for the latter can highlight specific areas and details. Looking at other people’s artworks on Artstation can also help get some inspiration on how to best present your assets.

For my lighting, I combined a typical 3-Point-Light setup (key light, fill light, one or two rim lights) per camera with a fitting HDRI. Most of the time, I find this type of setup to be enough, but you can always add extra lights to highlight specific features of your model. Ultimately, it comes down to personal preference though I would generally recommend not to exaggerate the number of lights. Otherwise, you might end up overexposing your image. Emre Karabacak and Eugene Petrov each posted an article about lighting and rendering first-person weapons on the Marmoset Toolbag website. I highly recommend giving both of them a read if you are looking for a detailed and comprehensive guide.

screenshot_28

Before I rendered the individual shots, I switched the tone mapping of my cameras to „Heijl“ for a more cinematic look and applied a slight S-curve to boost the contrast of my images. I left the rest of the effects on their defaults. Additionally, I checked Ambient Occlusion, Global illumination and Local Reflections within my render settings and set all the quality settings to their maximum for the best output. I also adjusted my rendering resolution to 3840 by 2160, the samples to 100 and enabled transparency. Bear in mind that the number of samples you choose can increase rendering time, which is especially prominent on older, less capable hardware. In the end, it is up to your personal choice whether the improved quality is worth the time investment.

screenshot_29
screenshot_30

Polishing

To improve image quality, I did a final pass in Photoshop. Compared to what I see within my viewport, the renderings I export from marmoset tend to be slightly less saturated. By using an adjustment layer in Photoshop, I increased the saturation again. Through the „Camera Raw Filter, “ I also added a bit of sharpness and very slightly increased the texture and clarity values. The key to working with these additional post-processing effects is to exercise subtlety since they should only support your image. If you apply strong values, your final product might end up looking off.

Since I enabled transparency in my render settings, I also had to add a backdrop to my Images. I prefer working this way compared to changing the colour in Marmoset directly because it gives me more flexibility to make adjustments to the background independently. I added a layer that I proceeded to fill with a single colour. Stacking a „Hue/Saturation“-adjustment layer on top allowed me to try out different tones to find the best fitting one. Rather than sticking to a single colour, I opted to add a gradient and a slight vignette. Both can help focus attention on your prop and make your background look more interesting. As always, this comes down to preference.

The final step was to add a very faint, blurred, dark outline to the asset. It helps to highlight your silhouette and can support your rim lights, especially when you choose a brighter background.

Conclusion

A piece of advice I would like to offer is not to shy away from a challenge even though you might be unfamiliar with certain parts of the workflow. Trial and error was a big part of my experience, and failing at certain steps will always teach you something down the line. Stepping away from the project allowed me to return more motivated and with a fresh view.

Don’t be afraid to continue another time, should you ever hit a stop. There is no shame in taking a break every once in a while.

Overall I am pretty happy with how this project turned out, especially given that the art style was new to me. My biggest takeaway is how important and helpful references and feedback can be to achieve a pleasing final result. Especially if you ever find yourself stuck in the process.

A huge thank you to GamesArtist for approaching me about writing this article and for the opportunity to share my art with the community. If you are interested in specific parts of my workflow or have any questions, I invite you to contact me. I am always happy to help!

Thank you for reading and take care!

Lucas Mania.