In Art Spotlight, we invite Sketchfab artists to talk about one of their designs.
Hi, my name’s Marie. I’m a 3d environment artist, currently working at Goodgame Studios on an unannounced PC title. I’ve been doing 3d for almost ten years now, and I’m happy to present my latest project: a living room fit for a Granok based on concept art from the game Wildstar.
Originally this scene was not a planned project. I started building it last year as a response to a new project I was starting at work. This new project was my first time working in Unreal 4 and my first experience with physically-based rendering, and I needed to understand how PBR should look with stylized assets. I also wanted to get into the flow of baking textures from highpoly to lowpoly. I picked Wildstar as the visual bar I wanted to hit and made a small cat clock, intending it to be a standalone piece. Then I just kind of…kept going. What can I say? Cory Loftis art takes me to my happy place. I made three props and put them together and I thought I was done, but when I showed them to people the reaction I got was “yeah, that looks nice”. Not good enough! The scene’s been growing ever since. Even I don’t know it’s really done now. Nevertheless, it’s been essential to developing the workflow I use today, which goes something like this:
My preferred modeling software is Blender. I start by setting up a camera and giving it my concept art as a background image. I make a very rough blockout of what I think the prop’s proportions should look like and adjust the position and focal length of my camera so that it lines up with the blockout.
I start modeling the highpoly version of the prop. I keep my geometry as simple and straight as possible, and instead use deformers to bend, warp, mirror, bevel, and smooth. My priority is to model non-destructively, so at any point I can make large changes to the shapes without needing to move a lot of vertices around. I add as much detail at this stage as I can, in part because it’s easier to make revisions to a model in Blender than in Zbrush, and in part because it’s my experience that it’s way easier to model clean, organic edges than to sculpt them. However, I don’t waste time trying to get a flawless edge flow with neatly intersecting forms, because I know I can dynamesh things together later in ZBrush and smooth out the imperfections there.
When I’m done, I create a copy of these to be my lowpoly model. I put them on a separate layer so I can tell them apart easily. I remove edge loops and edit the topology until I have a suitable lowpoly model. I apply all of my modifiers EXCEPT for the edge split modifier, which needs to be intact for later when I inflate my cage.
I set the face smoothing on all my lowpoly pieces to “smooth” and add an edge split modifier. I mark as “sharp” all the edges I want to be hard. I also assign these edges as seams. I do this because every hard edge needs to have some edge bleed in the UV map to avoid normal seams. I unwrap the lowpoly by doing an automatic unwrap on everything and then manually straightening out the island edges, fitting them into place. If parts of the model are meant to use the same texture space, I overlap their UV islands in the editor and then offset all but one of them by the width of my texture. The parts that are NOT offset will be the parts of the mesh my ao and normals are baked from.
I then triangulate the lowpoly and check all the edges to make sure they support the silhouette. I do this manually because I can’t guarantee that whatever engine or viewer my model ends up in will triangulate the faces the same way Blender does. If parts of my model are mirrored, I want to make sure the triangles are mirrored too so the normal map will work with both halves.
I animate exploded versions of both my lowpoly and my highpoly. I key all the pieces’ locations on frame 1, go to frame 100, move the pieces a good distance away from each other (far enough that I don’t have to worry about them casting occlusion on one another), and key them again.
I export the collapsed highpoly model to Zbrush. Like I said, sculpting in ZBrush is destructive so my goal is to do as little work here as I can get away with. I dynamesh the parts I want to work on at a high resolution and manually smooth over edges where different pieces have been merged together. I add small scratches and dings, and go over hard edges with the flatten and smooth brushes to give them a nice bevel. I decimate all my subtools so the total is around 2 million polygons, import them back into Blender, put them on a new layer and give them the name prefix “highpoly”.
I then duplicate all of the pieces of my exploded lowpoly at frame 100, merge them together, and remove the remaining animation. I put these on a new layer and name it “lowpoly for baking”. This is the model that will be exported to xNormal.
I duplicate this “lowpoly for baking”, rename it to “cage”, and give it a translucent red material. I inflate this model along its normals until it covers most of the highpoly. I then manually push vertices in the cage along their normals so that the cage completely encompasses the highpoly. It’s very important that no vertices are added or removed to the cage at this stage, or else the vertex order will be messed up and the cage won’t work with the lowpoly.
I export the highpoly, the cage, and the “lowpoly for baking” as .objs and bring them into xNormal. I bake out my maps: usually an AO, tangent space normal, and a bent normal. In Blender or Marmoset Toolbag, I apply the normals and AO to the model to check that there are no baking errors. If there are, I adjust my cage or add more edges to my lowpoly and re-bake until I get a clean result.
From the normal map, I generate a few cavity maps with different widths in nDo. In Photoshop, I combine my baked maps with handpainting techniques to generate diffuse, spec, and roughness maps. I go back to Blender/Toolbag periodically to check the results.
When I’m happy with my textures, I set up my scene in Toolbag with some nice lighting and post process effects.
If my model is going to have an animation, I do that last. Back in Blender, I go to my un-merged lowpoly model, make a copy on a new layer, remove all the exploding animations, assign an armature to the animated parts, and make my animation. This final model gets exported as an .fbx and uploaded to Sketchfab.
Throughout the project, Sketchfab’s been motivating me to up my animation game. Since the addition of animation support, I’ve been creating small ambient effects (like the ticking of the cat clock) to add to my scenes. I’m not an animator as a rule, but if I have the opportunity to make my props stand out from the crowd, I’m going to take it!