Since I started with game art about a year ago, I feel that I have become a lot faster in creating content. I had been thinking about testing myself for a while, and yesterday I had the time to actually do it. The day started with practicing some Substance Designer, and felt pleased with what I had done for the day in Designer, but I still wanted to create something more. This was 17:30, and I wanted to see if I could finish something before 00:00.
Being an ex musician, the first thing that sprung to mind was and effect pedal that you run your guitar through. It's basically a glorified box, so it felt like a reasonable prop to get finished in a day. All right - the clock was ticking, time to get started!
The plan looked like this:
- Block out / low poly base (Maya)
- High poly (Maya)
- UV and clean up of blockout (Maya)
- Bake maps (Marmoset)
- Texture (Substance Painter)
- Render (Marmoset)
LOW POLY / BLOCK OUT
Time spent: 1h 30 mins
So I started blocking the prop out in Maya. I almost always start with a block out that will be the foundation for my low poly, in game model.
I found specs of the size which I used as a reference, other than that I mostly winged it. I did all this on a laptop, so I didn't have the luxury of two monitors and reference sheets.
This is the low poly after clean up (unfortunately I didn't document the process when I was in it, it would have taking to much of my precious time, haha). But it was basically this but with a bit sloppier topology.
Time spent: 1 hour
Next step was the high poly modeling. Before I did the high poly, I made sure all the parts were named correctly, so when I duplicate the model to make the high poly, all the parts have the same name. This is important when I bake, more on that later on.
Not to much hassle making the high poly, mostly just adding support loops and adding a little detail on the buttons/screws and then smooth it. Below is the finished high poly. I had a bit of pinching here and there, but I knew it wouldn't be visible and it would have been a waste of time to make a 100% perfect high poly.
I have a script that selects all hard edges, and give them a bevel with chamfer off. This is a quick way to add support loops if your topology is ok (shout out to Niclas Halvarsson, my old teacher, for this script). I also have this as a keyboard shortcut (SHIFT+X), so it's really fast. Since this was a dirty, brute force model, I had to go in with the Multicut in a few places to manually make support loops.
LOW POLY CLEAN UP / UVs
Time spent: about 30 minutes.
Next step was to clean up the low poly model. What that means to me is to clean up the topology and make fine adjustments where the low poly doesn't match the high poly any more. I also set up smoothing groups/hard edges.
Then I go on to UV'ing. I learned UVing less then a year ago, and at first it was a bit daunting and scary, but I have found a good workflow that works really fast for me. Not sure if I'm doing anything wrong, but so far it's working really well for hard surface stuff. It goes like this.
- Set up hard edges. I usually do an automatic set up first, and then see if there are any problem areas. In Maya, go to Mesh Display > Soften/Harden Edges. I have it set to 40 degrees. It has worked well for me so far, but sometimes I manually change hard edges to something that makes more sense.
After that I do a camera based planar projection. I have this as keyboard shortcut ALT+1. I'll take this piece as an example.
Then I run a script that selects all hard edges and cut the UVs along those edges. I have this as keyboard shortcut ALT+2. Then I check if there is something else that needs a cut, and in this example it would be the cylinder shape. So I select one of the edges in the cylinder and make a cut there too.
Then I do an Unfold, and I have this as keyboard shortcut ALT+3. It produces the mess below.
Then I do Orient shells. This feature is amazing. Before I used to manually rotate to where it was kind of straight, and then run a Straighten UV's. Orient shells kind of do this automatically for all selected shells. You can also orient along a certain edge of the shell. I have Orient shells set to shortcut ALT+4.
So that's it! This piece takes me a few seconds. I basically press ALT+1, ALT+2, ALT+3 and ALT+4 and I'm done. The part that is a bit time consuming is setting up hard edges.
When I've done this with all pieces of the prop, I set the texel density of all shells to the same. It really doesn't matter what number you set it too, as long as it's the same. This goes for a portfolio prop that you will probably use way too high (not optimized) texture size to it. If you're making props that will end up in a game engine you should plan your texel density accordingly.
Then I just run an automatic Layout, and I'm pretty much done if the layout looks good. Below is the first Layout I did, and I was happy with it for this exercise. For a portfolio piece, I would clean the layout up a bit, and also optimise so that some shells get more UV space than others and straighten out a few shells.
Time spent: about 30 mins
Then the next step is to bake the model. Before I export the low poly and the high poly, I set up some materials on my high poly that will help with the texturing later on. I give different materials to different parts of the model. So steel parts get one material, plastic gets another, rubber gets another and so on. I just assign different colors to the mesh based on what material it is. Then I will bake a Material ID map that I can use in Substance Painter to quickly assign materials to the model. It looks like this in Maya.
Then, as stated before, it's really important that the low poly and the high poly have correct naming of the parts. This is because I bake it in Marmoset Toolbag with baking groups that are created by name. It's really fantastic. I'm quite new to 3d modelling, so I haven't really done anything else but this method. Doing an explode bake would take so much longer time for me I guess. All info on how to bake in Marmoset can be found here: https://marmoset.co/posts/toolbag-baking-tutorial/
So then I just import the low poly and the high poly and Marmoset assigns baking groups for me. Magic.
Then I do a test bake of the normals and see if everything looks OK. I usually screw up somewhere in the process, most of the time it's some naming of the low poly and high poly that doesn't match, so the groups are assigned wrong. But Marmoset bakes so fast, you can just do a test bake and quickly see where you screwed up and fix it. Sometimes I loose a bit of hair on my head during this process trying to find out whats causing the artifact.
For this model everything looked good in the first bake, except a few cages that I had to manually tweak. Also very cool that you can adjust the cages and skewing and you always see what you are doing. Aaaaand it updates in real time.
Then I bake out the maps necessary, and I'm done with baking.
Low poly with no texture maps in Marmoset
Low poly with baked normals and AO
Time spent: 1h 30 mins
I combined my model in Maya, so that it's in one piece. Then I export it to Substance Painter and just get going in there. I knew that the texturing would be quick and dirty, mainly slapping on smart materials and tweaking a bit.
First I imported the texture maps that I baked in Marmoset, and assigned them in the correct slot. Then I set up folders for all the different materials. Then I put a black mask on the folder, and I add mask with color selection. This is when the Material ID map comes in handy.
- Right click on the folder
- Select "Add mask with color selection"
- Press pick color. It uses the Material ID map if you set it up correctly.
- Click on your mesh where you want the mask to be white.
Then when I had mesh separated by materials, I could simply start having fun and playing around with materials following the reference image. I also created a few alphas for the logo and the text of the pedal. I put all the text in one black and white 1024*1024 alpha and then I used Projection in Painter to stamp/paint out the text where it was supposed to be. Going in to Orthographic view (F6) helps to get this done cleanly). You can also change the size and position of your projected texture by holding down S on your keyboard and clicking with your right and left mouse button.
It was getting closer to 23:00 and I felt I had to wrap the texturing up. This is usually where I spend most of the time with my props, so it felt really bad to leave it half finished, but it was part of the exercise. The pain was real. Then I exported the maps from Painter and loaded them up in Marmoset Toolbag.
Time spent: 30 mins
I just set up a simple scene in Marmoset Toolbag, loaded the model and the textures exported from Painter, added some lights, and then took some pictures! And the moment you all been waiting for: The FINAL RESULT!
Time spent on everything: 6 hours from start to finish (with a quick dinner in that time also).
This was a really fun exercise to do, and I think it's really valuable to do these things once in a while. It can expose your weaknesses as well as your strengths, and you can evaluate where you need to improve. It also makes you think about tools and methods that could improve your workflow. I found out I need to learn some more about subD-modeling to improve with hard surface. I'm also gonna make a really good Marmoset render scene that I can use for most of my portfolio props to save time. I also have some other ideas what I could improve.
I'm also gonna go over my keyboard shortcuts in Maya, cause you can really speed up your workflow with keyboard shortcuts. Everything you use in a daily basis should be assigned to a shortcut.
I recommend everyone to try and make a prop in a day or two, and don't care to much about the end result being portfolio ready. Just see where you end up and have fun!
If you have any questions on my workflow, please just ask. And if you have any advice on how I can improve my workflow, don't hesitate to tell me!
Thanks for reading.