Case study: Haunted Well

In this study I go over my process from concept to execution for my Haunted Well sketchfab diorama.
It covers my pre-work sketching, texturing, low-poly modeling and optimization, all in the context of designing for a model viewer.


1. Designing for Sketchfab

All of my decisions on this project were guided by my choice to display it in Sketchfab. When designing for a model viewer, you don't get to decide how people view your work! So, for an environment, you need to design for interactivity in 3D space.

  1. Engage all viewing angles. Treat every side of the environment as its own composition.
  2. Break the silhouette. Having something organically sticking out of the bounds of your model stand adds naturalism and makes it feel more alive.
  3. Consider rotation. People tend to rotate models to the right/left before flipping them over: the progression around the model should have visual interest.


2. The Sketch

The sketch is important. Its an easy step to skip, but it really is crucial to visualizing your project, and gives a deeper understanding of the scene and its individual assets that a simple 3D block out might not. Even if you are working from someone else's concept, a sketch can help you create a more interaction-friendly. Through the sketch, I was able to set up the composition as well as visualize and plan the textures. Being able to visually take stock of how many assets I'll need to model allows me to build a more useful blockout.

My sketch engages all viewing angles by having multiple layers, and considers viewer rotation by changing the topology in a curved slope, leading the eye down from the upper to lower level as it is turned.

The sketch also helped me establish a narrative for the scene: without a story, an environment is just a place, but with a few narrative elements, it can be a place where something is happening. Maybe it was the fall weather that inspired me to pick the haunting theme. I picked the very moment after someone had an encounter with one of the spooky ghosts around the well, with the half-filled bucket frozen in mid-air. 



As a painter, all my 2D work begins with large washes of color. I often establish a color scheme before I even know what I'm painting-- this is how my mind works, so even in my 3D workflow, color enters as early as possible. If I have time to paint a concept, I will. In this case, painting the concept completely would have taken up too much time, so I opted for filling in my clean sketch with different color options and tweaking based on mood.

I begin with some grayscale color washes to establish my values. Value can add emphasis and really ground objects in a scene, but they also guide my color choices later and ensure I don't use a bunch of similar mid-tone colors that are visually difficult to distinguish from one another.

Once I've finished that, I do a set of simple color studies to see how it all plays out visually. I started with a desaturated 3-color primary scheme, but I didn't love the way the grass looked, and having to balance all those shades made the scene look washed out. My second attempt upped the contrast, but all the values were too dark and too similar. On the third attempt, I got rid of green entirely in favor for yellow, and reduced the red to an accent color. The tone feels much more "spooky" with more violet/yellow and less red/blue/yellow. Now that I have a better guideline, I can go on to modeling.

4. Modeling

I model my lowpoly assets primarily in Maya, it has nice deformation tools and the 2016 version made great improvements to the UV texture editor. However, sometimes I'm not happy with the silhouette, even after soft selecting, pulling, scaling, bending to get some curvier shapes. When this happens I pull my lowpoly base model .obj into zbrush and manipulate it there. As a painter it feels much more natural than tinkering in Maya -- I have enough tinkering to do when I optimize, so I cut it out of the process wherever possible. The newest version of Maya has some improved sculpting tools, but I haven't had a chance to try them. They may be a good alternative if zbrush is unavailable to you!

As you can see on the left, playing with organic models in zbrush can really bring some life to static models. I generally use the inflate, move, move topological, and pinch brushes at very low intensities. After all models have been given this treatment, I move into the blockout phase.


On the left is my initial blockout. The stone path wasn't reading well, so I switched to a stone staircase -- in its blockout phase, it still felt it was lacking something, so I added the fencing. It separates the path to the well from the graveyard, which I think serves to improve the overall scene composition. The second image shows these and some other minor style changes, as well as basic smoothing in maya (smoothing groups in 3ds Max). The real test comes later when I actually preview it in sketchfab, after UVing everything and optimizing those layouts.


Sketchfab has their upload guidelines on their website, but I have a few tips of my own based on how I laid out my textures. Geometry is obviously a factor (Sketchfab limits model uploads to 500k tris), but my scene is low-poly so I didn't have to worry about that. What I did have to take into account was textures- managing your UVs efficiently is the easiest way to make your scene load quickly and run smoothly. Sketchfab recommends one texture map per model, and you can take this a step further by grouping your smaller asset textures into one UV sheet. In my scene, use a handful of mushroom and grass models that I lump together -- they're so small, they don't individually need all the real estate. I do this again with the rocks, and the different pieces of fence. The trees, well, and especially the model stand needed their own UV sheets, but I sandwiched all repeating UV shells within the well and tree models (which are made up of modular branches) to make the most of the 1:1 space. To the right you can see the UV shells laid out by color -- its ugly, but it gets the job done. :)

6. Texturing

My texturing process is essentially the same as my painting process. Start with base colors, build up detail, adjust as you go. I generally do a first pass with local color (each object having its own colors, for instance the fence is bluish-black), then add details, then a third pass with global colors (the fence painted to reflect the surrounding colors, such as the green grass, red mushrooms, etc.) On the right you can see a gallery of my overall process. You can see the overall color adjustment, as well as the fiddling in sketchfab with the settings.

In the first two screenshots, I'm using the PBR renderer with no specularity. In the rest, I switched over to the Classic renderer, which is better for handpainted textures. The air trails are transparent .png gradients on planes, using the Blend transparency function at around 70%.  The ghosts are similar, only they also have a bit of emissive glow. Other than that the textures are fairly straightforward: I most use round brushes in 3dcoat, and then I do a final pass using blend settings (usually overlay, multiply, screen, and color dodge) in photoshop to really warm up the colors. 

7. Rendering in Sketchfab

There's no one "correct" way to render handpainted stuff in sketchfab, it just depends on what kind of materials you have. The PBR renderer is better for materials that are light-dependent -- materials that mimic realistic reflection etc. Handpainted stuff doesn't always require lighting in the first place. I'd use the classic renderer option when setting up, then deciding if you want the scene to be lit or unlit -- very simple textures or models with a minimal or 2D aesthetic sometimes look better unlit. If you choose unlit, you will not have shadows cast in your scene, because there is no light source! Off to the left here you can see the difference between lit and unlit (or Shadeless) with all the other same settings. Lit is on the left, Unlit is on the right. Unlit models will have to rely on their "baked" or painted shadows to show depth and lighting. Unlit models will get colors true to texture, while lit models will change based on the lighting (and often get washed out) unless you fix it in post processing.

Above are 3 Lit renders of the scene with the same post processing settings (seen on the right) on the 3 different presets.  While they may not seem too different at first, they can really change the colors you worked so hard to paint! The affect is most noticeable on the far right image, which used the Filmic preset. It immediately looks much more vibrant and high-contrast, but the colors morph as a result, with the brown-wine color of the ground turning much redder, and the orange tones lean much more yellow -- there is less middle ground with the Filmic preset compared to Linear and Reinhardt, but It pushes contour lines and adds clarity to textures that may not be super developed. It may mean you have to tweak and reupload textures more, however.

8. Final Polishing

The best advice I can give for working with sketchfab (and in general) is to constantly test your textures in the viewer itself as you work! Nothing is worse than working on a beautiful texture and then realizing it is way too dark, too pigmented, too washed out, etc. and needs major changes. Check your model from all angles, take screenshots and compare, show other people, take a step away from it and come back a couple hours later with fresh eyes. I like to take screenshots and correct colors in photoshop so I know I have a target for what needs to be fixed. Zoom in really close to your textures, and don't abuse post processing features like Sharpen-- I'd only recommend using this in values under 5. It may look good zoomed out but as soon as you get close, the textures will have artifacts, and look very compressed. Luckily it is very easy to edit render settings and reupload your model in sketchfab, but if you want to avoid tinkering and showing off an older version, try to get it right the first time and re-upload entirely when complete to show it off at its best (if you're looking for views).