Scan Anything with Dave Riganelli and his Homemade Scanbox
If you haven't met Dave Riganelli yet, he would define himself as a "photogrammetry wrangler". He also is a Technical Art Director at Ubisoft Toronto, where he experiments with new photogrammetry processes and pipelines. In this article, Dave will show us how he scanned a textile fabric and ground materials with his homemade scanbox.
Dave Riganelli: I’ve been working with photogrammetry scanning for a while now and using Substance Designer to bake my maps. When Substance Designer 6 released their scanning workflow, I started experimenting with this process and found it was returning the same or better results for flat surfaces in a fraction of the time. At first, I was using my camera on a tripod and moving a flash around the object triggering the camera remotely.
This worked well enough but was time-consuming to set up and break down each time, took up a lot of floor space, and was a little clumsy to operate. I wanted something that I could leave set up so that I could scan items quickly and easily. So I decided to build a scanning machine to meet these needs. You can see the process here on my blog: Part 1, Part 2, Part 3.
Here’s how the inside of the complete scanner looks.
When preparing to scan a surface, the first thing I look for is any tiling issues. The closer I can get the object lined up in camera, the easier it will be to tile later in Substance Designer. I try to scan the object so that it fills the frame of the camera, and since the camera has a 3:2 aspect ratio, I zoom in the camera so that the top and bottom of the frame reach the edge of the tiling area.
Next, I make sure there are no unwanted issues or foreign objects on the fabric. Since the scan will show up very fine detail, even the smallest wrinkle or stray hair will show up in the normal map of the scan.
The steps to running my scanner are pretty simple. When constructing it, I wanted to keep the build simple and keep costs down, so I didn’t use any automation, just eight switches to turn each light on/off. To capture the diffuse image, I turn all the lights on to get an even, flat lighting and I set the camera's exposure for the lighting. Next, to capture the images for the normal map creation, I turn off all the lights except one. I adjust the camera exposure for just that one light, and then I take eight images, one with each light turned on.
Post Processing in Lightroom
I import the nine images into Lightroom using a preset I have previously set up. This has a color profile created and white balance set using an X-Rite color checker. For editing, I start with the diffuse image and set the crop size to 1:1 and select the portion of the image I want to use. Once that is set, I copy the crop settings across to the other eight images to ensure all images are cropped the same.
Next, I make adjustments to the diffuse image if needed, fixing any issues that may have come up with the original capture or adjusting to enhance the image. Also, raising the Shadows controls can remove any unwanted shadows from the image. For the normal maps, I don’t change much. Once that’s all done I export the images as 16-bit .tiff files.
The graphs I use are pretty straightforward. The diffuse texture is taken directly from the diffuse image. The other eight images are piped into the Multiple Color Equalizer node and then into the Multi-angle to Normal node. Creating the rest of the maps after this somewhat varies depending on the scanned object.
Here’s the final dish rag materials rendering in Marmoset toolbag3, the granite background came from Substance Source.
After using the scanner for fabric, I had the idea of trying to scan some outdoor surfaces, and since my car has a 12V outlet in the trunk and I have a 12v-120v power converter, I decided to take the scanning on the road.
I found a parking lot near a hiking trail that has a good mix of surfaces for my first try. Since the parking lot was unpaved, there were some good spots to scan. Some gravel, packed dirt, a mix of both, and the grass that bordered the lot.
As the scanner is very light due to its construction material, moving it around is pretty simple. This wasn’t the intended use of the scanner when I designed it so there are some things I would change for a dedicated outdoor scanner, such as moving the control up to the top and having some shade on the camera LCD to cut down the glare.
The process for capturing the ground follows the same steps as mentioned above when scanning fabrics, except that the scanner needs to be moved around to get the sample in the capture area. For the camera settings, I had the camera zoomed all the way out to 18mm to capture the largest area possible, which ends up being 0.5 meters square.
The eight images that make the normal map look like this:
The graphs all start out the same to generate the normal. For the diffuse, I’ve sometimes noticed when capturing an area this big, and this near the lights, that there can be some lighting differences near the borders. So I use a Color Equalizer node to balance out the diffuse. Then I’ll usually try running the diffuse and normal into an Auto Crop node to make the maps tile. The nodes for the rest of the maps vary based on the scan.
I was able to capture and build three other scans from that trip.
I found that the outdoor scans worked out very well as long as the captured area was relatively flat. If the ground was too uneven, there were issues with the scanner not sitting flat, and if there was too much height variation on the surface, it would cause problems with the normal map construction. I’ve already started thinking of a new build for outdoor captures for a more extensive area (1 square meter) but it would need to be more portable, perhaps collapsible, and battery-powered. If you’re interested in seeing if I end up building this new scanner, follow me on Artstation for updates.