Dev Diary: Creating Low Poly Models from High Poly Assets Like any modern video game, Path of Exile uses 3D low polygon count models with normal maps that are created from a high polygon source model. This week, our 3d modeller Saveun Man describes the process of creating these low-poly models and normal maps for a Path of Exile monster. Normal Maps Normal maps are used throughout Path of Exile and are very common throughout the entire games industry. They are a technique that transfers detail (usually from a detailed higher polygon mesh) through a texture map to an in-game mesh. There is a lot of information online about normal maps and how they work that I won't go into. This article is going to focus on a work flow that I use to get from high poly to in-game model. Preparation We’ll be using this very tame looking “Zombie Boss” (known in game as Hillock). This model was created in ZBrush by a high-poly sculptor. Hillock weighs in at about 6,250,000 polygons and 14 meshes (subtools). Right off the bat we have a pretty major issue because this is far too many polygons to render in real-time. Your average Path of Exile character model has to end up around 1,500 triangles. This value would be low for a first person game, but allows for good detail with our fixed camera distance. There are a few modelling guides to go by: Use the lowest number of polygons while keeping good edge loops.

Make sure the mesh is able to hold its own form when deforming.

Have a good looking silhouette. Luckily this model is fairly symmetrical, with the major muscle masses lining up mirrored across the x-axis (ignoring the minor flesh wounds here and there). This makes modelling the low poly version much easier. [/frame] [frame width="360px" bMargin="5px"][/frame] The Build Staying inside ZBrush, we're going to go through each mesh and create a low poly version of the asset. ZBrush has a feature called “Projection” that can be used to create a low-poly cage. While this is turned on, points you create will be placed on the surface of the detailed mesh. This allows you to create a low-poly model very accurately based on the original high-poly model. [/frame] [frame width="708px" bMargin="5px"][/frame] With low-poly game models it helps to plan ahead. Try to pick out areas where you could save polygons or texture space by mirroring UVs. Areas like the character’s palms and soles of his feet will rarely be seen. Their poly count can be very minimal. Things like the face and shoulders need more detail and planning. Above you can see the torso portion of the character from high to low poly. You’ll notice the transition in geometry density going from the head to the body (trying to keep everything in quads of course). Edge loops are very important. The face is a good area to use as an example - you need to get the edges of your polygons to go around features like the mouth and eyes. This ensures that the character will deform correctly when they talk or emote. If an artist is unsure where to place edge loops, they will usually look at muscle in that area and model around that. When dealing with characters at this level of detail (1,500 triangles) you need to ensure that the main areas like the shoulders, elbows and knees hold their volume when deformed. I’ll usually add extra edge loops on either side of the joints, so that when it comes to weight painting you can get a nice weight transition from joint to joint. Maya Preparation Once the meshes are looking good and we’ve got a consistent flow of polygons through the model, we’re ready to import the assets into Maya. Hillock now sits at 1,368 triangles. I should also mention that it is also possible to bake maps in ZBrush. I prefer the control and baking options of Maya. [/frame] [frame width="708px" bMargin="5px" ][/frame] Low-poly wire, High-poly silhouette, and Low-poly silhouette Texture Mapping Everyone has their own approach to texture mapping. One question that always comes up is where to place the seams. Sadly, seams really stand out on 3D characters. One tip is hiding them in areas like the inside of arms and legs or other geometry (on the top of a characters head, under the hair for example). Because Path of Exile is viewed from a fixed camera angle, we want to have more texture resolution towards the top of the character. We use the test pattern shown here to get a consistent texture density across the model. At this point your normal maps are ready to be baked. Once this is done, I use a program called “xnormals” to bake an ambient occlusion map. [/frame] [frame width="328px" bMargin="5px"][/frame] [/frame] [frame width="708px" bMargin="5px" ][/frame] The finished UV maps [/frame] [frame width="708px" bMargin="5px" ][/frame] The Hillock model with normal and occlusion maps applied in Maya Path of Exile is entering beta later this year. If you haven't created an account yet, please sign up! This week's Screenshot of the Week shows Hillock in action: [frame bMargin="5px"] [frame bMargin="5px"]