We are Martin Ostrolucký and Rudolf Herstek. Together, we’re going to show you the steps in creating a model of the iconic World War Two “Willys” Jeep. After seven years of experience in the games industry, we founded Cassa Game Industry as a way to support young game developers and artists. It is one of the reasons why we want to share our experience with you and present you our workflow of “Willys” Jeep.
The “Willys” Jeep is one of the most popular military vehicles of World War 2. The first version of the 3D model was created in 2013 and has gone through several major changes to become the AAA game asset you see today.. You can almost track our increase in experience and skill in the changing quality of the model. Take a look at the images below!
Goal and references
At the beginning we made the decision to create an AAA game model using high quality PBR textures. We wanted it to look realistic, not stylized and we also needed a model ready for rigging and animation. First we searched online for many useful references of the vehicle. We sorted through them and decided upon vehicle design, damage level, surface color and relevant symbols and texts usable as decals.
Blueprints can almost always be found for real object modelling (vehicles especially). They are a great place to start – and will allow you to easily shape most of the key features. Places like www.the-blueprints.com have a huge and useful selection of blueprints. Ideally a blueprint shows an object from all sides.
High poly model (HP)
Many would argue whether it is better to create a Low poly (LP) model and then smoothen it into an HP model or the other way around. It depends on the project to a certain degree but usually it is easier and better to start with an HP model when you model unique assets.
We have placed blueprint pictures on a plane, farther from viewport center and farther from the model so that they wouldn‘t obstruct the view.
We modeled the object starting with big main features and then moved to more detailed ones. Most of the time a plane is the best thing to begin shaping a piece of sheet metal. First you shape it according to the blueprint, then you use shell modifier to add thickness. To make it round we use Turbosmooth subdivided 2-3 times. We always work with simpler object topology to maintain control over the process and don’t get lost in too many polygons. We apply this approach to almost all aspects of the model creation.
For example let’s see how we created the tire design. We started with plane and modeled one tire sector. The pattern repeats itself 80 times around the tire surface so it is enough to model it once and then copy it one after another over the surface.
Using weld function we connected all the little parts and then added two Bend modifiers. The first one to create convexity and the second one to bend plane to a circle. Finally we used weld vertices to finish the tire. If you have trouble to close a circle, we recommend to add reset xform and set object pivot first before you move on to use bend modifier.
..and the final result look like this:
Objects made of cloth (ie. seat padding or the gear shift cover) are best created in Zbrush. Before you export an HP model from Zbrush we recommend to reduce the model using function decimation master. It can lower the poly count by millions without a significant visual change which is good for baking workflow.
Low poly model (LP)
The final HP model went through a feedback phase, we have made last changes and advanced to the LP modelling phase. As long as a model has a good looking topology, all you need to do is to remove supporting geometry and optimize the object to a minimum of necessary polygons.
For example a Jeep bodywork for LP models consists of just a big monoblock but for a HP model it is more effective to use more elements and avoid unwelcome effects that may cause problems in some cases. Let’s see how we work on this one:
Model (A): you can see its geometry is suitable for a cube but it is harmful for the curved area at its base. A solution may be to have the cube as a separate element (B) but you would lack a natural curved joint between the cube and the curved area. If the joint area is very important and you can’t use supporting geometry, you can create a third model which combines the first two and isn’t connected to any of them (C).
Unwrapping a model
Before moving on to texturing we had to unwrap the jeep. You can see texture pixel density on various model parts below. The smaller a checker, the higher pixel density. For example to unwrap the model we used more space for small text plates than we needed for most other model parts combined.
During unwrap layouting we also highly recommend to start with large objects and do the smallest ones last. Its is easier to place small objects in gaps between big objects.
Before you start with texture baking, there are some mandatory rules to stick to. Some of these are:
1. cut UV seams with regard to the object topology
2. set Smoothing groups with regard to Unwrap
3. explode LP and HP object to avoid artifact glitches
We decomposed the LP model and the HP model (explode) so that their parts overlap, exported them to fbx and baked them using application Xnormal.
Even if you heed all the rules, artifact glitches are common to appear. To fix this, you can create multiple normal map textures that you combine using application Photoshop. Then using masks you select texture parts that are flawlessly baked. The resulting texture will then become artifact-free.
We loaded the normal map and the jeep fbx model to Substance painter and baked remaining Additional maps – Ambient, Curvature, World Space, Position and Thickness. Instead of baking from the HP model we use the imported normal map. The reason is that it already has all the artifacts from baking phase corrected. Therefore we avoided fixing artifacts that could have had appeared on additional maps.
When baking additional maps from normal map do not forget unselect Normal and check Use Low Poly Mesh as High Poly Mesh.
References helped us to assume what materials is the jeep made of, what is its structure, what are its surface details, where does dirt gather on it and which parts are most often susceptible to damage. For textures we used the application Substance painter 2.6.2.
Before we imported the jeep to Substance Painter, we divided its UV map to two texture sets – Jeep Body (opaque material) and Windows + Lights (translucent material).
Later on we realized it would be more practical to apply more UV maps to the jeep. It significantly speeds up work with the Substance Painter and improves project supervision.
We always start a texturing process with basic material assignment. You can find them in shelf or you can download them with Substance source. First we have assigned every jeep part (bodywork, wheels, seats) with only one material – sheet metal, metal, rubber, plastic, hide, etc. and created 18 main groups.
The first material version was born. To preserve texturing logic we chose to go from macro- to microstructure. In other words to define a base material first and then add details.
That is how we arranged layers in Group seats.
Thanks to mask generators it is quick and easy to create masks. You can immediately tell how does a project shape up. For us, that was just a beginning though.
We wanted to feel that our model is really unique. We have repainted the mask manually most of the time using brushes and projection tool. This way you can avoid a mask look that feels generic and random.
A quality texture for masks improves overall realism feeling. Use those from shelf or find some online. See examples of those we used below.
Presentation and rendering
It was important to us to decide how we wanted to present the jeep. We created a reference table full of concepts and car photos. That helped us to choose a camera angle and lighting to make the jeep stand out. Then it was just a matter of trying out different preview renders. To render the model we used application Vray.
Early on we have struggled to reach optimum color and rendering setting. We found out that you need to follow these rules:
1. In Gamma and LUT settings, set Gamma correction to 2.2, check enable Gamma/LUT, Affect color selector and material editor.
2. Export textures with Vray preset designed by Allegorithmic from application Substance Painter. Use .tif 16bit format.
3. Import diffuse texture into 3DSmax with override 2.2
4. Import all the other textures with gamma override set to 1.0 (normal, glossiness, reflection, IOR, height)
5. Set BRDF to Microfacet GTR (GGX) – only newer Vray versions
6. Check Glossy Fresnel in Vray material settings
7. You can use Height texture as a Displacement map but it would make rendering very memory consuming
8. Put imported textures to: Diffuse=Diffuse map │ Reflection=Reflect map │ Glossiness=RGlossiness map │ IOR=Fresnel IOR map │ Bump (value 100)=VRayNormalMap=Normal map
Image bellow shows vray material settings.
We used two vray lights and one vray dome light with HDRI texture to support realistic reflections. Other camera and lights settings have been subjected to multiple changes based on our aesthetic feelings.
We would like to add that there is no ultimate and superior way how to create a game asset. If you replace just one application with another one it makes a significant workflow impact and brings in new advantages and disadvantages. After all, what matters is the final result.
Thank you for reading. Good luck in your 3D modeling adn texturing adventures!
Don’t forget to follow us on FaceBook where you can find the latest news of our projects.
If you want to get in touch, feel free to contact us: