In this blogpost, I would like to share my personal experience, and give insight on my modelling and texturing workflow.
Phase I - Concepting and sketching
After all the planning was done, I started to work on the prototypes. I quickly sketched a few of every type of items in Blender, using only material colors and rough shapes, combined with lots of Mirroring and Array modifiers; I also used beveled Curves where it was needed to achieve complex curvy forms. I figured out scale, main forms of the models, and tried out modularity in Unity. I also created a few basic materials, such as stone, brick wall, wrought iron, and used some pre-made materials too.
Phase II: Base Assets Modeling and Texturing
This phase was, in my opinion, the most time-consuming task, and along the way I learned a lot about productivity, flexibility, and importance of feedback. I made some detours and backtracking and had to reconsider some conceptual flaws. As it is with most production workflows, gradual iteration led me to refine my skills and I have to admit it is still visible – at least, for me – in the assets quality. Here are some early images of the first „pre-alpha” passes in Unity, where I tested modularity:
The modelling workflow
I usually use Box modelling, which means I create a model from basic shapes (boxes, cylinders, spheres etc.) and refine and detail them until I get the form I want. I also like to use beveled Curves to build elegantly curved, or organic models. I often use Cloth simulation in case of draping fabrics. One of my favorites was creating the pillows, which I took from a tutorial, basically inflated the highpoly mesh with a force field. The female sculpture modelling started with a Makehuman basemesh, decimated, her hair was formed of beveled custom Curves, and her dress with Cloth simulation.
When I have both the high poly and low poly meshes, I create the UV layouts. If the model has smaller parts, like drawers, I move those away from the main mesh so they won’t interfere with each other when baking maps. I do the normal map, curvature, ambient occlusion (etc) bakes in Blender or in Substance. I also make a color coded version of the mesh, and create a color ID to be used in Substance.
I check face normals, and correct them with Autosmooth or Weight Normals tool if needed. I export the mesh (or meshes, if they share an atlas). If the mesh is complex, such as the ornamented fences, I also prepare a simple form to be used as a LOD later. Then I move on to an image editing software to create masks and ornament alphas if needed.
Below you can see that I created details for this wardrobe from individual Arrayed mesh shapes. After normal map baking, the result was nearly the same as if I used hand-painted alphas to generate the detail normals in Substance. Making the highpoly details can be more time consuming than painting the alphas, and normal map baking settings can be different for each separate part I do, and the resulting normal maps sometimes need manual correction, which I think is a bad practice. To be honest, I encountered this same problem multiple times while baking very small details, until I gave up and decided to paint alphas and generate normals procedurally at the later models. Of course, these furniture models are not for architectural visualization projects, which would need a higher level of detail.
Creating textures from scratch digitally is a very rewarding task, even if you do not excel in traditional art. Luckily Substance Designer is the perfect tool for this. I constantly try out new node setups, watch highly skilled material artist’s tutorials and techniques. In some cases I take the easier path and simply use a modded version of the built-in materials, or turn to an online material library. While using a material as a reference, you can get a lot of information out of the previews, and there are also options to generate a seamless texture from a single colored picture.
I followed a well-traveled path of PBR material authoring, creating Base color (=Albedo), Normal, Roughness, and Metallic maps in Substance. I also experimented with Height maps, both within Substance and Unity, but I found that Unity’s built-in Tessellation shader is not very good when it comes to buildings, and it is more optimized to be used with Terrain. So I ditched the idea and worked more on the base material. If I can move forward with my (currently limited) Shader knowledge, I will try to find a better solution for wall surface variations. Until then, normal maps and cornerstones will do the trick hopefully.
With Substance it is very easy to create more variations to a material in a non-destructive way. With the covered crates, I made three graphs for this material – one for the wooden parts, one for the fabric, and one where I merged those two and had the variation options exposed. Now I can adjust the base color, detail color, and any other setting I exposed in my main graph. This keeps the work organized: instead of a huge tangled graph I have compact, customizable sub-graphs.
I also created a custom node which helped me merge the Roughness (inverted Smoothness), Metallic and Ambient Occlusion maps into one RGB image, as Unity’s Standard shader uses it. I really like the idea to use the channels of an RGB image instead having 2-3 grayscale images.
In the next post, I would like to tell you about what challenges and difficulties I faced, and how I solved them while creating this pack.