A BETTER SCAN

Photogrammetry tests

I’ve been trying to raise my photogrammetry game in the past few weeks. This is what came out of it.

I decided to tackle some problem areas: Very dark (avocado), shiny (avocado, pomegranate), or very smooth (mango) assets, and objects with fine displacement that I’d been struggling to capture (melon).

What helped: Better lighting (cross-polarized, new ring flash…), better photos (shooting raw and converting to jpg in Lightroom, chase noise), better masking in Agisoft, and higher settings (ultra high for the dense cloud and the heaviest mesh possible).

It’s still not perfect. I’ve learnt that even cross-polarization doesn’t get rid of all reflections. There’s always a highlight here and there, sometimes from bouncing light, sometimes from the environment). But with a bit of smoothing in Agisoft and some ZBrush trickery, you can get very high-quality assets.

Generally though, the poor-man’s photogrammetry workflow remains valid, except the new approach has slightly better gear, the addition of the raw-processing step, and more time needed to process the higher-quality dense cloud.

All assets were retopologized and UVed in ZBrush and are relatively low poly, as you can see on the wire below, and use normal maps for the fine details except for the melon, which uses displacement.

For these elusive folds in the cloth (itself simulated in Marvelous Designer), I used Dabarti Capture to generate super high-quality normal maps from several sections of cloth, tiling this normal map in Affinity Photo, and generating a new depth map from it. If you don’t know this tool, it’s very well worth purchasing. It fills a big hole in photogrammetry when you want super-high displacement detail (much higher than Agisoft can capture) from a 2D surface rather than a 3D object. The latest version is great, with normal-map post-processing commands and the ability to process raw photos (works a charm with my Sony A7 raw files).

The wooden tray at the end of the series was a slightly different process. I used a quick-and-dirty 3D scan of the actual tray (which had a lot of noise in it) as a guide to remodel the tray using standard poly-modeliing techniques. The texture was then baked from the textured scanned object onto the Sub-D poly object directly in Max.

All shots here rendered with Octane and a little post-pro in ArionFX.

Enjoy and let me know what you think.

Photogrammetry tests

Photogrammetry tests

Photogrammetry tests

Photogrammetry tests

Photogrammetry tests

Photogrammetry tests

Leave a Comment

    • Erald
    • July 17, 2017

    Again, speechless….!!!

    • Johan
    • July 17, 2017

    It looks awesome. Any details about cross-polarization would be nice. Setup, equipment etc.

  1. @Johan I basically ordered a large quantity of linear polarizing film sheets, which you can cut to match the shape of your lights. At the other end, of course, you need a polar filter on your lens. By rotating the polar filter to offset the polarization from your lights, you can cancel out pretty much all reflecting light and be left with the pure albedo.

    Check this out here: http://www.diyphotography.net/getting-started-with-cross-polarized-light/

    • Johan
    • July 17, 2017

    Thanks for the info. What kind of lights are you using for this setup? Small softboxes?

    • stephanie
    • July 25, 2017

    Hi Bertrand,
    Again, realistic looking scan assets you got here. Have a question on the displacement map seams. How do you manage to eliminate displacement map seams when dealing with relatively high amount of displacement like for example the melon you have here?

  2. @Stephanie have you had that problem? It’s never affected me, whether with Octane, V-Ray or Corona. Displacement input from ZBrush shows with no seam in the render. I haven’t had to do anything.

    • stephanie
    • July 26, 2017

    Hi Bertrand,
    Sorry for off-topic here. Yes. Got those displacement issues on scanned meshes that has greater displacement depth like 5cm or more. I’m using 32bit vraydisplacementmod .exr maps with keep continuity on, but still got those issues.