Goals
The main goal of this project was to use the all my most relevant knowledge in practice. Also, to push my texturing skills upfront. For that I chose a simple model but with a wide and complex spectrum of materials (Paint, rubber, metal, scale etc.).
Software
- Blender (modeling: high/low poly)
- ZBrush (wear elements on high poly)
- RizomUV (UV mapping)
- Marmoset Toolbag 4 (baking & rendering)
- Substance Painter(texturing)
- PureRef (to collect references)
- Photoshop (creating decals, alphas etc.)
References
The best reference is the object itself that you have at hand. You can better to evaluate an object, its forms, textures etc. My situation is exactly like this, I took some photos of stove, separated some interesting places that I’ll show on my textures. For collection of all photos I use a PureRef, excellent program for references.
Modeling
This stage I usually divide this into parts like:
- Blockout
- High poly
- Low poly
Blockout
Before I start, I need to know the actual size of the object. In my situation, I just measured the dimensions with a ruler. If you don’t have the item on hand, you can find measurements online.
In this substep, I don’t bother with the wireframe, I just need to repeat the shape of the object using primitive shapes according to size and proportions.
If you’re working in Blender, I recommend using some tweaks that can improve your workflow.
Using different matcaps can help you better control the shading of your model.
Cavity helps with visibility of your model highlighting the edges.
Use backface culling to hide back side of faces. To increase the speed of modeling you can use different modifiers such as Mirror, Solidify, Array etc.
High poly
The main high poly mesh without any micro details (edge wear, bended metal) I made in Blender. For high poly stage I used a standard Subdivision surface pipeline. While you are working with this pipeline important to know how to build a topology, use support loops/edges correctly, etc.
There are a lot of different tutorials on YouTube about how to work with Subdivision surface. To recreate the holes and not to destroy a wireframe I used floaters. Floaters are the best way to resolve concavities and extruded details.
Tape was created straight in Blender in Sculpt mode with cloth brush.
To add some wear elements on plug I exported model in fbx format from Blender and imported by FBX Export/Import plugin in Zbrush. But important to duplicate collection before exporting in order to use mesh with unapplied modifiers on Low Poly stage.
In ZBrush I used different variations of trim brushes, with square alpha and various size and focal shift.
To avoid making unnecessary movements, I bent metal straight in Blender in Sculpt mode.
Low Poly
As my one of the goals was to improve my texturing skills so I did not save polygons on rounded objects. I used polygons within reasonable limits, where I could delete or collapse them, I did it. I used collection that I’ve duplicated recently. I canceled Subdivision surface modifiers and deleted all unnecessary faces.
Since I am satisfied with my low poly I set a sharp edges and marked seams. Then I added a Weighted Normal modifier to correct my shading (turned on “Keep Sharp” checkbox). Also, I set auto smooth on 180 degrees on all objects. After that added a Triangulate modifier (turned on “Keep Normal” checkbox). It is an important to do this before baking to avoid various issues.
UV Mapping
For UV Mapping I used a RizomUV. It is a great convenience program, which in combination with export/import addon for Blender really increase the speed of mapping.
First, I unwrapped my model in Blender, created a base UV. Then exported it to RizomUV.
For this model I decided to use 2048×4096 resolution of textures, so I mapped my UV shells on half of the UV square and then scale it by x2 along the x-axis.
While mapping important to set shells in right position according to their location on 3D model. It is also necessary to straighten the UV shells as much as possible to save much more UV space.
Baking
Before baking stage, we need to do some actions in Blender. First of all, important to rename all high poly meshes adding a suffix “_high” and do the same for low poly, adding a suffix “_low” according to the meshes.
I also renamed our floaters adding another suffix “.###” to suffix that I’ve already had. Where ### is a number, which can be 001, 002, 003 etc.
I put a separate material on the low mesh that will be for the glass.
Then, I exported low and high poly meshes in fbx format separately and imported to Marmoset.
In Marmoset I baked all necessary maps with this settings:
Marmoset is very powerful soft for baking, which has some useful functions such as skew paint and cage offset that help to fix your maps.
Texturing
Texturing part is the most important stage which needs to be given the most attention and time.
I imported the low poly mesh and all maps that have been baked recently in Substance Painter. Before that, I’ve copied some parts of the model and rotated it 180 degrees to see what’s going on underneath.
Below are also some basic settings:
ACES_UE4_Log can be downloaded from: https://bleleux.gumroad.com/l/lHiVg
For glass texture set I set an alpha-blending shader and added an Opacity channel:
Inside Substance Painter I baked another Ambient Occlusion map, which was baked from low poly on itself. It will help me to generate a global dirt that will be at the joints of two separate elements.
So, the first material I began to work was a paint.
First of all, I concentrate my attention on color variations, try to add more tints. Usually, It is just a different addition of grunge and noise textures with various overlay options.
Then I added relief and soft roughness to the paint.
During this process I tried to compare what I was doing with my references.
When texturing, I used a lot of anchor points, which are a really powerful tool.
For example, they were used to display the effect of peeled paint or just in order to add some color variations to certain places.
Gradually, I added more and more details, trying to repeat the references.
According to this principle, I also made the other materials.
To add a global dirt I brought group with dirt forward the others and replaced an ambient occlusion map with the one I baked in Substance Painter.
The decals were made in Photoshop and imported into Substance as a single black&white texture. Then through the stencil, they were drawn with a paint.
As I worked on this project, I learned how to better use different types of projections. This was a revelation for me, as I had not used this function much before.
For example, It helped me add a relief in enough difficult place:
It was made by Warp projection with adjustment of Projection Depth.
Therefore, it makes sense to sometimes play with projections to achieve better result.
Now we can switch to other texture set for glass. It’s very simple here. I turned on an opacity channel in fill layer and set it to 0.3. Also, I added some blur and soft roughess on glass. And finally, I copied a dirt from another texture set, replaced an AO map in generator and that’s all.
Also, it is a good habit to check the correctness of the PBR during texturing through PBR validate filter.
Next step is to export the textures. The only important thing is to set textures size based on each Texture Set’s size since my textures are not square.
Rendering
In fact, this stage took quite a long time. I created a new project in Marmoset, imported the model and textures. In the sky settings, I selected the HDRI I needed.
Then I started to set up the lighting. Basically, I used directional light and in some cases spot light or omni light to show some highlights in certain places.
In the camera settings, I set the following parameters:
Render settings:
Conclusion
Thank you for reading this article. I hope this article will help someone to deal with some problems that arise during the entire pipeline of 3D model development.
I really had a lot of fun with the process during this project. For me, this work really helps to calm down and relax. Since I am only at the beginning of my journey, I plan not to stop there, but to learn and learn and learn more. I wish everyone good luck and perseverance to work further.
I want to thank the Games Artist team for the opportunity to share the experience with other people.