Skip to main content
Version: 3.4.8 (unreleased)

Roughness Map

The Roughness Map measures how rough a mesh is, everywhere on it, from the power spectra of its profiles: the spectral pre-factor C, which says how large the roughness is, and the Hurst exponent H, which says how it changes with scale. It measures them in square windows stepped across the surface, each lying in its own plane, and blends the windows' values onto the triangles as attribute layers, so you can see where a fault surface is polished and where it is rough, where a joint face changes character, or where the mesh itself is noisy.

It is the measurement Grow Planar Patches makes on each planar patch, made instead on windows of a size you choose, over the whole mesh whatever its shape. How the spectra are measured, and how to read H and C, is in Surface Roughness Spectra.

Running it​

  1. Select the mesh in the Project Tree. Select several to map them all with the same window.
  2. Right-click and choose Attributes & Analysis → Geometry → Roughness Map.
  3. Enter the window side in model units and press OK.

The dialog suggests the smallest window the mesh allows: 128 times its resolution (the square root of its mean triangle area), rounded up. It says the least it will accept, which is 127 resolutions: a window must hold profiles of 128 samples. It reopens with the last window used, when that suits the mesh.

The run shows a roughmap progress bar; the analysis itself takes about half a second for four million triangles. When it finishes the mesh is coloured by Roughness Log Prefactor Dip, and the messages panel gives one line: how many windows were measured, how many triangles mapped, and the median log10 C and H each way.

Choosing the window​

The window is the scale of the map. The map cannot show roughness changing over less than about one window, and each window's values carry the scatter of a surface that size (see Reading the map). So:

  • the smallest window gives the most detailed map and the noisiest values;
  • a larger window gives steadier values over coarser areas, and measures longer wavelengths: its band runs from five resolutions up to half the window.

On a mesh with 1 cm triangles the smallest window is 1.28 m. A window wider than 1024 resolutions is sampled more coarsely, at a 1024th of its side, to keep memory in check, so its band starts at a longer wavelength.

What it writes​

Five triangle attribute layers, each with no value where no measured window covers the triangle:

  • Roughness Log Prefactor Dip / Roughness Log Prefactor Strike: log10 of the spectral pre-factor C from the profiles down-dip and along strike, C in model units cubed. The higher, the rougher. The dip layer is left on display.
  • Roughness Hurst Dip / Roughness Hurst Strike: the Hurst exponent H each way.
  • Roughness Spread: the spread of log10 P across a window's profiles, the larger of the two ways; a noise flag.

Each run replaces the five layers. Like the other mesh tools, it leaves out the triangles you have taken out: hidden ones, and while the mesh's Use Attribute Filters is on, filtered ones.

How it works​

  1. Windows. The surface is divided into cubes half a window on a side. Every cube holding surface centres a window on the area-weighted middle of that surface, so each point of the mesh lies in about four windows.
  2. A plane for each window. The window lies in the area-weighted mean plane of the surface within half a window of its middle, so on a curved outcrop each window follows its own piece of it. Its profiles run down-dip and along strike in that plane, or north and east on a level one so that level neighbours agree.
  3. The square. The triangles over the window's square are rasterised onto a grid in its plane at the mesh's resolution, with the height off the plane interpolated inside each triangle. A triangle leaning more than 60° from the plane is left out: it is an overhang, the far side of a fin or a second surface, and would fold back over the first. A window whose square is less than 60% covered is not measured.
  4. The bend taken off. A least-squares quadratic surface is removed from the window (see Curved surfaces).
  5. The spectra. The window's rows and columns are measured as a patch's are: a line removed from each profile, a Hann window, the mean power spectrum, and the fit over the band. See The measurement.
  6. Blending. Each triangle takes the mean of the measured windows whose squares hold its middle, each weighted by a tent that is 1 at the window's centre and 0 at its edge, so the map changes smoothly from window to window. log10 C is averaged as a logarithm.

Curved surfaces​

A window's plane touches a curved outcrop, but the bend is still in the window: 5.5 mm across a 0.26 m window on a surface of 1.5 m radius, more than the roughness of a polished slip surface. Left in, it reads as power at the longest wavelengths and raises H. On a rough synthetic cylinder of that radius H read 0.93 where it is 0.7. With the quadratic removed it reads 0.70, and on flat surfaces it changes nothing that matters (0.61 and 0.79 where the truth is 0.6 and 0.8).

Reading the map​

  • One window is noisy; the map is right on average. On synthetic surfaces one smallest-size window's H scatters by about 0.15 and its log10 C by about 0.5 decades, because C is the fitted line carried back to one cycle per model unit, far outside a small window's band. Blending averages about four windows. Averaged over a surface the map is unbiased: over eight synthetic surfaces its mean log10 C was within 0.06 decades of the true value and its H within 0.02, and on any one surface it agreed with that surface measured whole to within a few tenths of a decade. Read the map for differences larger than the scatter.
  • Differences in amplitude stand out in C. A surface ten times rougher than its neighbour (in RMS height, with the same H) read 1.5 to 2.4 decades higher in log10 C over several synthetic pairs, against 2 expected.
  • The spread flags noise. A clean window reads about 0.3, below the 0.557 of independent profiles because a window's profiles share every wavelength longer than it. 20 dB of white noise lifts it to about 0.53 and pulls H down, to 0.3 from 0.8. A patch of high spread with low H is the mesh's noise, not the rock.
  • H of 1 or more is not a self-affine surface: a step, a fold hinge or the edge of the mesh inside the window. Read it as a flag.
  • Down-dip and along strike are each window's own. On a dip-slip fault the down-dip layers are the slip-parallel ones, and the paper found both H and C lower along slip.
  • The mesh limits what can be seen: nothing finer than its triangles, H reading high where it has been smoothed or decimated, low where it is noisy. See Mesh quality.

Tips​

  • Display Roughness Log Prefactor Dip with Use Filter and the histogram handles in the Charts panel to pick out the roughest or smoothest parts of the surface over the photo texture.
  • Run Grow Planar Patches with Roughness Report ticked as well, for the spectra of the largest faces drawn as figures, with all three fits.
  • For a fault surface, segment it from the rest of the outcrop first and map that, or hide the rest: vegetation and scree around it are mapped too.

Troubleshooting​

  • "not mapped, because a window of … holds profiles of … samples": the window is under 127 resolutions of this mesh. Enlarge it; with several meshes selected, the window was checked against the first.
  • "none of its windows … could be measured": the windows were never 60% covered by surface facing their way. The mesh may be smaller than one window, full of holes, or a body rather than a surface. Try a smaller window.
  • Some edges are unmapped: a window at the edge of the mesh is often less than 60% covered and not measured, so the triangles there take their values from the windows further in. Where none reaches, along a ragged edge or a strip narrower than a window, they have no value.

See also​

For developers: RoughnessMapAnalysis drives vrgs::geotech::MapRoughness in GeotechCore_RoughnessMap.h, which is MFC-free and unit-tested (GeotechRoughnessMapTests).