First an image of a surface is captured without flash. Portions of the surface that are higher appear brighter, and portions that are deeper appear darker. The problem is that the different colors of a surface also reflect light differently, making it difficult to determine if the brightness difference is a function of depth or color. By taking a second photo with flash, however, the accurate colors of all visible portions of the surface can be captured. The two captured images essentially become a reflectance map (albedo) and a depth map (height field).
"Software then compares the brightness of every matching pair of pixels in the two images and calculates how much of a pixel's brightness is down to its position, and how much is due to its colour. That information is used to produce a realistic rendering of a surface's texture."
There's a video demonstrating the technique - quite impressive. This quick, cheap capture technique should drive a whole new level of realism in video games.