Gridding Surfaces from Polylines & Orientations
VRGS can interpolate a triangulated surface through your structural interpretation using kriging. Two kinds of interpretation data can drive the surface:
- Polylines — digitised bedding contacts, horizon traces, fault traces, or any other lines that lie on the surface you want to model.
- Orientation measurements — dip/dip-direction readings (bed attitudes, structural measurements). These act as gradient constraints: the surface is bent so that its local dip and dip direction honour each measurement.
The result is a regular grid converted to a triangulated mesh. The mesh stays linked to its source interpretation and regenerates automatically when the source polylines or orientations are edited.
In the Interpretation Tree, right-click a polyline group and choose Convert to Regular Grid (2.N D Grid). A new mesh named Grid is created in the project tree. To let dip measurements shape the surface as well, Ctrl-select an orientation group together with the polyline group before right-clicking.
Creating a surface
From polylines
Right-click a polyline group in the Interpretation Tree and choose Convert to Regular Grid (2.N D Grid). All visible polylines in the group are used as elevation control. Vertices are averaged per grid cell, then ordinary kriging interpolates between them.
From orientation measurements
Right-click an orientation group (bed attitudes / structural measurements) and choose Convert to Regular Grid (2.N D Grid). Each visible measurement contributes both its position (a point on the surface) and its dip/dip-direction (a gradient constraint).
The grid plane is automatically aligned with the mean orientation of the group, so consistently dipping successions grid correctly even at steep dips. Overturned geometry cannot be represented — the result is always a surface of the form z = f(x, y) in the (possibly tilted) grid frame. To model a fold that doubles back over itself, use an implicit surface instead.
Combining polylines and orientations
Ctrl-select an orientation group together with the polyline group, then right-click the polyline group and choose Convert to Regular Grid (2.N D Grid). The polylines fix the elevation of the surface; the orientation measurements constrain its dip between and beyond the lines.
In combined mode the orientation positions are deliberately not used as elevation control — only their dips matter — so measurements taken on nearby beds at a different stratigraphic level will still steer the shape of the surface without dragging it up or down.
This is particularly effective where a contact is only exposed in one part of an outcrop: a handful of dip readings lets the surface project the observed trend correctly instead of flattening away from the digitised lines. Dipping planar trends indicated by the orientation data are reproduced and extrapolated exactly.
The generated mesh
The surface appears as a triangulated mesh (named Grid) in the project tree. Because it carries a live generator:
- Automatic rebuild — editing, adding, or hiding source polylines or orientations regenerates the surface on the next redraw. Untick Auto Rebuild in the surface's properties while making many edits: the edits are remembered rather than acted on, and one rebuild catches up when it is re-ticked (or on Regenerate).
- Saved with the project — the link to the source groups and the gridding parameters are stored with the mesh, so automatic rebuilds and the Surface Generator submenu keep working after the project is closed and reopened. (If the source group is later deleted, the mesh simply becomes a static surface.)
- Surface Generator submenu — right-click the mesh in the project tree:
- Regenerate re-runs the gridding on demand.
- Paste Orientation re-orients the grid plane from an orientation on the clipboard (use Copy Orientation on any structural measurement first). Use this to tilt the grid frame when modelling a steeply dipping surface from polylines.
A gridded surface can also be attached to a DFN as an upper or lower limit of the model, or as an internal barrier that fractures may or may not cross — see Model Surfaces. That is how bed-confined (stratabound) fracturing is modelled: grid the top and base of the bed, attach them, and fracture height follows bed thickness. Implicit surfaces work there too, and are the way to bound a DFN by an overturned or recumbent fold — the DFN uses the potential field itself rather than the extracted triangles, so the fold does not have to be flattened into a height field first.
Gridding & variogram properties
Select the generated mesh to edit its gridding parameters in the Properties panel, then regenerate.
Gridding
| Property | Meaning |
|---|---|
| x / y spacing | Grid cell size. Smaller cells give more detail and slower rebuilds. The cell size is also the effective data resolution, because kriging runs on per-cell averages. |
| Max Distance From Data | Blank the surface further than this (metres) from any control point. 0 grids the whole bounding box; a negative value re-derives the distance from the next variogram fit (the default for new surfaces). Beyond the correlation range the estimate carries no information from the data, so this stops the mesh presenting pure extrapolation as interpretation. |
| Compute Uncertainty | Add a Kriging Std Dev node attribute giving the surface's own error estimate, in metres, at every node. Colour the mesh by it to see where the surface is guessing. |
Faults & breaklines
A barrier or fault trace is interpreted as the fault's line in map view — its elevation values are ignored and the cut is treated as vertical in the gridding frame. Digitise the fault where it cuts the horizon being gridded (the cutoff, or the edges of the fault gap), not as a sub-vertical trace down an outcrop face. For a steep fault the two happen to coincide; for a dipping fault an outcrop trace puts the tear in the wrong place.
There are two ways to supply faults.
The quick way — Ctrl-select a second polyline group alongside the horizon group when creating the surface and every line in it becomes a fault trace or breakline. Tree order decides: the topmost selected group is the horizon, the next is the barrier set.
The full way — right-click the polyline group and choose Convert to Regular Grid with Faults… instead. A dialog collects the horizon group, an optional orientation group, and any number of individually defined faults. Each fault has a type:
| Fault type | What it does |
|---|---|
| Single trace | One map-view line; the surface is torn along it. The same behaviour as a trace in the quick-way barrier group. |
| Map gap | A hangingwall and a footwall cutoff pair. The surface is torn along both lines, the fault tips are sealed, and the gap between the cutoffs — where the horizon does not exist — comes out as a hole. Elevations on the traces are still ignored. |
| Fault-plane polygon | As the map gap, but the cutoffs were traced on a modelled fault plane, so their elevations are real. Each cutoff's vertices additionally become elevation control for the block on its own side, pinning the throw at the fault instead of leaving each wall to extrapolate freely toward the tear. |
The two cutoffs of a pair may be digitised in opposite directions and may live in any polyline group — each fault names its traces individually. To change the fault set later, right-click the mesh and choose Surface Generator → Edit Faults…, then regenerate.
| Property | Meaning |
|---|---|
| Barriers Are Faults | On: the barrier-group traces are faults — the surface is torn along them and each block is interpolated only from its own data, so the two walls are independent and each gets its own trend. Off: they are breaklines — the surface stays continuous but is free to change slope across the line. Faults defined in the dialog always tear and are not affected by this switch. |
| Defined Faults | How many dialog-defined faults the surface carries. Reported, not editable — edit via Edit Faults…. |
| Blocks | How many independent fault blocks the traces split the grid into. Reported, not editable. |
Uncertainty envelope
| Property | Meaning |
|---|---|
| Simulate Envelope | Run conditional simulations and publish Kriging P10 / P50 / P90 node attributes. Off by default: it costs a solve and a full grid pass per realisation. |
| Realisations | How many realisations to draw (default 40). More gives smoother percentiles and a longer wait. |
Every realisation passes exactly through the data, so the spread between them is the surface's uncertainty rather than an assertion about it. Note that P50 is not the kriged surface — it is the median of surfaces that all honour the data.
Variogram
| Property | Meaning |
|---|---|
| Auto-fit Variogram | Fit the range, sill and nugget to the data by cross-validation on every rebuild. Untick to freeze the numbers below and set them by hand. |
| Cross-validated Error | Typical error at a control point the fit did not see, in metres. Reported from the last fit, not editable — this is the honest "how far do I trust this surface" number. |
| Sill | Variance of the surface about its trend. Because the trend is fitted at the same time, this is much smaller than the raw elevation variance on a dipping surface. |
| Nugget | Measurement noise on the elevation data. 0 forces the surface exactly through the (cell-averaged) polyline data; larger values let it smooth through digitising noise. |
| Orientation Nugget | Noise on the dip data, as a fraction of the expected gradient variance (default 0.01). Larger values honour dip measurements more loosely — increase it if compass scatter makes the surface undulate. |
| Intermediate Axis Direction / Dip | Orientation of the grid plane (dip direction / dip). Set automatically on the first build for orientation-only grids; editable thereafter, or set via Paste Orientation. |
| Major Axis (strike) Range | Correlation length along the grid x-axis, in metres. |
| Intermediate Axis (dip) Range | Correlation length along the grid y-axis, in metres. |
With Auto-fit Variogram ticked the range and nugget are chosen by leave-one-out cross-validation — each control point is predicted from the others and the model that predicts them best wins — and the sill follows from the residuals. Untick it to keep a fit you are happy with while changing something else.
How the interpolation works
Points-only surfaces use ordinary kriging with a spherical variogram. As soon as orientation constraints are involved, VRGS switches to a gradient-augmented kriging system (the same family of methods used by implicit structural modelling packages):
- A cubic covariance model carries the dip constraints — it is smooth enough to differentiate, and much better numerically conditioned than a Gaussian model for densely digitised lines.
- A linear drift term lets the surface follow and extrapolate dipping planar trends instead of reverting to a constant mean away from the data.
- Dip/dip-direction readings enter as exact surface-gradient constraints, relaxed by the Orientation Nugget.
Tips
- Surface undulates between measurements — increase the Orientation Nugget, and check for measurements with inconsistent dip directions (a single flipped reading bends the surface hard).
- Steeply dipping horizon digitised as polylines — copy a representative orientation and use Paste Orientation on the mesh so the grid plane dips with the structure; near-vertical surfaces cannot be represented by a horizontal height-field.
- Surface too spiky through noisy digitising — raise the Nugget slightly (a value around 5–10% of the Sill is a good start).
- Slow rebuilds on large interpretations — increase the grid spacing; kriging runs on per-cell averages, so the cell size is also the effective data resolution.