I thought I would explain the workflow I have used for creating the assets during this project and talk a little about what happens behind the scenes.
Any assets starts out with the creation of a reference for the model and the textures. Once a reference has been decided on I will block it out in Maya. I then create a lowpoly basemesh and UV map it. If the lowploy mesh (which is what the highpoly will be baked onto) has very sharp angles (somewhere around 90° or more) I will make sure to separate the UV along that edge and keep those edges hardened. That is to avoid grading in the normal map by using hardened edges while not having them appear in the normal map. Which would be the case if the UVs were not separated and the edges were still hardened. We try to avoid grading as UE4 does not like it and it can cause issues with the lighting.
Before creating the highpoly model I will decide if the model needs to be sculpted in Zbrush or if I can create height details on the normalmap in the texturing process instead. I make this choice because sculpting the model in Zbrush will take longer and require an extra step in the workflow than simply painting height values in the texturing process. And since we’re on a tight schedule I would save valuable time by not sculpting in Zbrush.
An example of this are the metal bars. Since they are not very “organic” in their nature it makes more sense to have bumps, scratches etc in the normalmap whereas old wood is more organic and look much more convincing if the edges are worn down and have cracks.
If the asset needs to be sculpted in Zbrush I will to through that process of sculpting the highpoly from a lowpoly basemesh and then bake the normalmap in Maya using Transfer Maps. I bake the normalmap in Maya because I think it gives the best result compared to xNormals and Substance Designer. It also makes editing the meshes and correcting errors quicker since you don’t have to jump between applications.
If the asset is something that does not need to be sculpted I will bake a normalmap for it from a beveled and smoothed highpoly copy of that asset. I will also in some cases (if the assets is in multiple pieces) “explode” (move the parts away from each other) the mesh before baking in order to avoid artifacts caused by parts of the mesh being too close to each other.
Once the normalmaps have been baked I will flip their green channel in Photoshop because normalmaps baked from Maya will have its green channel set for OpenGL while UE4 uses DirectX. This can of course be changed in UE4 and Substance Painter and Designer can handle both, but I do it for the sake of consistency.
I then import the model and the normalmap into Substance Designer and bake Ambient Occlusion and Curvature maps for the object, these will be used later to drive certain effects in Substance Painter. I import the model and the maps into Painter and set up the maps there before I start the texturing process. I use a metal/roughness workflow instead of spec/gloss. Any details such as scratches, bumps etc I paint as height information in Substance Painter, which is then baked down on the normalmap.
With the texturing done I export the maps to Substance Designer where I connect the maps and set up a base material for them, which will be the material used in UE4. I then publish the material as .SBSAR file, which will contain all the maps, compressed and set up with its material. This makes importing, sharing and handling the materials and textures for an asset much easier as you are only dealing with one file per asset, instead of one file for each map used. Textures packaged in Designer like this will be “parametric”, meaning you can do all kinds of useful things with them even once you have imported them into UE4. For example we can change the resolution of all the textures hooked up to a material in UE4 on the fly, without having to re-package them and re-importing them.
There’s a lot to be said but this gives you all a glimpse of my workflow with the assets I have created for this project.