Making of “Jeep Willys”
Martin Ostrolucký and Rudolf Herstek take us through the creation of their World War 2 "Willys" jeep, using 3ds Max, Substance Painter, and V-Ray...
We are Martin Ostrolucký and Rudolf Herstek. Together, we're going to show you the steps involved 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 a 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 modeling (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 a 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 not 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 the 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 the weld function we connected all the little parts and then added two bend modifiers. The first one created convexity and the second one bent the plane to a circle. Finally we used weld vertices to finish the tire. If you have trouble to close a circle, we recommend adding reset xform and setting the object to pivot before you move on to bend modifier.
And the final result look like this:
Objects made of cloth (eg. seat padding or the gear shift cover) are best created in ZBrush. Before you export a HP model from ZBrush, we recommend reducing the model using the decimation master function. It can lower the poly count by millions without a significant visual change which is good for the baking workflow.
Low-poly model (LP)
The final HP model went through a feedback phase; we made some last changes and advanced to the LP modeling 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 the 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 the unwrap layout, we also highly recommend starting with larger objects, and doing the smallest ones last. It's 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:
- Cut UV seams with regard to the object topology
- Cut UV seams with regard to the object topology
- Explode LP and HP object to avoid artifact glitche
We decomposed the LP model and the HP model (explode) so that their parts overlap, exported them to FBX and baked them using 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 toSubstance 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 the baking phase corrected. Therefore we avoided fixing artifacts that could have had appeared on additional maps.
When baking additional maps from the normal map do not forget to unselect Normal and check Use Low Poly Mesh as High Poly Mesh.
References helped us to assume what materials the jeep is made of, what its structure is, what its surface details are, where does dirt gather, and which parts are most often susceptible to damage. For textures we used 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, and so on, 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 the details after.
That is how we arranged layers group for the seats.
Thanks to mask generators it is quick and easy to create masks. You can immediately tell how a project shapes up. For us, that was just a beginning though.
We wanted to feel that our model was really unique. We have repainted the mask manually, most of the time using brushes and projection tool. This way we avoided a mask look that felt generic and random.
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 V-Ray.
Early on we have struggled to reach optimum color and rendering setting. We found out that you need to follow these rules:
- In Gamma and LUT settings, set Gamma correction to 2.2, check enable Gamma/LUT, Affect color selector and material editor
- Export textures with V-Ray preset designed by Allegorithmic from application Substance Painter. Use TIF 16-bit format
- Import diffuse texture into 3ds Max with override 2.2
- Import all the other textures with gamma override set to 1.0 (normal, glossiness, reflection, IOR, height)
- Set BRDF to Microfacet GTR (GGX) - only newer V-Ray versions
- Check Glossy Fresnel in V-Ray material settings
- You can use Height texture as a Displacement map but it would make rendering very memory consuming
- Put imported textures to: Diffuse=Diffuse map ? Reflection=Reflect map ? Glossiness=RGlossiness map ? IOR=Fresnel IOR map ? Bump (value 100)=VRayNormalMap=Normal map
The image below shows V-Ray material settings.
We used two V-Ray lights and one V-Ray dome light with HDRI texture to support realistic reflections. Other cameras 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 of 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 and 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 and check out our website.