LAPIDEO

LAPIDEO-Research

Contents

  1. LAPIDEO Technical Briefing: Historical Craft & Computational Methods for Procedural Marble
    1. TL;DR
    2. PART 1 — HISTORICAL & CRAFT TECHNIQUES OF IMITATION MARBLE
      1. 1.1 Ancient Roman / Pompeian: the First (Incrustation) Style
      2. 1.2 Opus sectile and the book-matching grammar
      3. 1.3 Renaissance & Baroque: scagliola, pietra dura, marmorino
      4. 1.4 18th–20th century faux-marbling: the working rulebook
      5. 1.5 Egyptian precedent: the stipple/speckle ancestor of spattered granite
      6. 1.6 Giotto's Scrovegni dado: oil-bound white and book-matched grisaille
      7. 1.7 Renaissance and Baroque quadratura: marbling coordinated to illusionistic architecture
      8. 1.8 The professional faux-finishing tradition, in the practitioners' own words
      9. 1.9 Vein taxonomy and compositional rules, synthesized
      10. 1.10 Two traditions: deceptive marbling versus frank fantasy
    3. PART 2 — COMPUTATIONAL & ALGORITHMIC MARBLE (core)
      1. 2.1 Foundational procedural texturing
      2. 2.2 Domain warping (Inigo Quilez) — the workhorse
      3. 2.3 Cellular / Voronoi (Worley) noise — breccia and crystals
      4. 2.4 Physically- and geologically-motivated models
      5. 2.5 Reaction–diffusion & pattern formation
      6. 2.6 Vein-network–specific algorithms (contour-based vs curve-based)
      7. 2.7 Production practice: Substance Designer, subsurface scattering
      8. 2.8 Real geology as constraint — distinct visual signatures
      9. 2.9 Aesthetic / perceptual guidance — why procedural marble looks fake
    4. PART 3 — SYNTHESIS: RANKED ALGORITHMIC RECOMMENDATIONS FOR LAPIDEO (WebGL/GLSL)
      1. Key references
    5. Named-marble preset library
    6. Translation table: craft rule → algorithmic feature
    7. Implementation roadmap (staged build order)
    8. Caveats

LAPIDEO Technical Briefing: Historical Craft & Computational Methods for Procedural Marble

A research briefing for improving a browser-based (WebGL/GLSL) procedural marble generator. Part 1 distills hand-craft imitation rules into algorithmic constraints; Part 2 (the core) surveys the computational literature; the final section ranks concrete, implementable features by likely visual impact.

TL;DR

PART 1 — HISTORICAL & CRAFT TECHNIQUES OF IMITATION MARBLE

1.1 Ancient Roman / Pompeian: the First (Incrustation) Style

The earliest systematic marble imitation is the First Style / Incrustation Style of Roman wall painting (c. 200–80 BCE), classified by August Mau in his 1882 Geschichte der decorativen Wandmalerei in Pompeji. Its explicit aim, per Britannica's "Western painting" entry, was: "At Pompeii during the 2nd century bc the interior walls of private houses were decorated in a so-called Incrustation, or First, style; that is, the imitation in painted stucco of veneers, or crustae ('slabs'), of coloured marbles." Painters divided the wall into rectangular fields, each rendered as a slab of colored stone, connected by projecting stucco moldings that added literal three-dimensional relief. Vitruvius (De architectura) and Pliny the Elder (Natural History) describe the technique: workers applied at least seven successive coats of lime-and-sand plaster (coarse to fine), the uppermost containing powdered marble, before painting in fresco.

Key craft logic for the algorithm: the visual grammar is panelized — discrete rectangular fields of differing stone, not one continuous field. The stones imitated were the prestige imports: giallo antico, africano, pavonazzetto, cipollino, portasanta, rosso antico, and porfido rosso. The decorators were imitating the slab-and-veneer logic of real revetment: bounded rectangles, framed edges, and abrupt discontinuities between adjacent panels.

First Style frescoes, House of Sallust, Pompeii — August Mau's own 1882 plate (Mau being the scholar who classified the style, cited above), showing the painted false doors flanked by colored rectangular panels — the clearest possible view of the panelized logic described above. Drawing: August Sikkard, 1882, from Mau's Geschichte der decorativen Wandmalerei in Pompeji, plate II. Public Domain. File page

First Style wall, Casa Samnita (Samnite House), Herculaneum — the same panelization surviving in situ: rust, salmon, and cream rectangular fields banded beneath a projecting stucco cornice. Photo: Miguel Hermoso Cuesta, CC BY-SA 4.0

First Style wall, Casa Sannitica, Herculaneum — a second surviving example, two registers of colored panels separated by a moulded band. Photo: Mentnafunangann, CC BY-SA 4.0

1.2 Opus sectile and the book-matching grammar

Real Roman stone-cutting practice shaped the visual grammar that painters imitated. When a marble block is sawn into consecutive thin slabs and those slabs are opened like the pages of a book, the vein pattern mirrors across the seam — book-matching. Four slabs mirrored around a center produce the classic quartered/"mirror-fold" kaleidoscopic symmetry seen in opus sectile floors and wall revetment. This symmetry is a strong perceptual cue for "expensive real stone" and is precisely what LAPIDEO's book-match feature exploits. The craft rule: veins must be continuous across the mirror seam (mirror symmetry of a single underlying field), never merely two similar-but-unrelated panels placed side by side.

The Pantheon's opus sectile floor, Rome — cut-stone slab-and-panel logic, in continuous use since antiquity though restored more than once. Photo: Larry, CC BY 2.0

1.3 Renaissance & Baroque: scagliola, pietra dura, marmorino

Scagliola (from selenite, a laminated crystalline gypsum) is the inlay imitation of marble and pietre dure using ground selenite mixed with animal glue and natural pigments. Historiography credits Guido Fassi of Carpi (1584–1649) as the Italian progenitor; the technique arrived from Germany (Blasius Fistulator's Munich workshop, active from 1582; the Reiche Kapelle) in the second decade of the 17th century, with the first dated Italian piece a countertop signed by Pietro Baseghini of Modena, 1629. The material preparation starts from selenite itself — a form of gypsum, chemically calcium sulphate dihydrate (CaSO₄·2H₂O) — which is calcined to drive off part of its water of crystallization. Per the Camera di Commercio di Firenze ("Florentine scagliola," Google Arts & Culture), "selenite must first be heated to 128° so that it loses three quarters of the crystallisation water," which converts it to calcium sulphate hemihydrate (CaSO₄·½H₂O) — plaster of Paris. (Correction from an earlier draft of this page, which had the dihydrate/hemihydrate direction backwards. The source also doesn't specify Celsius or Fahrenheit, and the conservation literature describes the same firing more loosely — treat "128°" as approximate, not a precise, unit-confirmed figure.) The powder is crushed, sifted, mixed with pigment paste, inlaid into a wet gypsum base, then polished with pumice, charcoal, and oiled felt or beeswax to a marble-like sheen. Baroque architects — Borromini at San Carlo alle Quattro Fontane — used scagliola for curved veined surfaces. Crushed selenite crystals were added to impart a sparkling crystalline texture mimicking the calcite sparkle of real stone.

Pietra dura / commesso fiorentino at the Opificio delle Pietre Dure is "painting in stone": thin veneers of semi-precious stone cut with a wire bow-saw (water + emery powder) and fitted with invisible seams. Per Wikipedia, "the Opificio was established in 1588 at the behest of Ferdinando I de' Medici to provide the elaborate, inlaid precious and semi-precious stoneworks"; its 17th-century masterwork was the decoration of the Cappella dei Principi (Chapel of the Princes) in the Basilica di San Lorenzo, Florence. The critical selection logic — artisans chose each stone "for their colour, opacity, brilliance, and grain" — is exactly the correlate-color-with-structure principle. Marmorino and stucco lustro (Venetian and Roman lime-plaster techniques) build depth and translucency through multiple thin lime glazes burnished to a polish, achieving the lit-from-within quality that is the plaster analogue of subsurface scattering.

Scagliola tabletop by Annibale Grifoni, c. 1660–79, Carpi — Guido Fassi's own town. Photo: Sailko, CC BY-SA 3.0

Scagliola panel by Carlo Ghibertoni, San Tommaso d'Aquino, Florence — the same inlay tradition as the Grifoni tabletop above, on an interior wall rather than furniture. Photo: Sailko, CC BY 3.0

Pietra dura wall inlay, Cappella dei Principi, Florence — colour chosen to correlate with structure. Photo: Sailko, CC BY-SA 4.0

1.4 18th–20th century faux-marbling: the working rulebook

The trompe-l'oeil marbling tradition (John Taylor; Kershaw; P. van der Burg's School of Painting for the Imitation of Woods and Marbles; the French formal school vs. the looser Italian school) codified concrete rules that map directly to algorithm constraints. Per Wikipedia's "Marbleizing" entry: "The Italian school was loose and artistic, the French school was formal and realistic. It typically took an apprentice 10 years or more to fully master the art" (British marbling reached its apogee between 1845 and 1870, master Thomas Kershaw). Distilled from the practitioner literature (Building Conservation's "Trompe L'oeil Marble"; Traditional Painter; Matisse; and the DIY marbling corpus):

Marbleized altar plinth, San Pietro, Modica, Sicily — painted stone imitating stone. Photo: Acabashi, CC BY-SA 4.0

Per-marble veining logic the faux tradition distinguishes: Carrara/statuario (fine, soft grey veining on white); arabescato (netlike, flowing grey-green veins); calacatta (bold, thick, dramatic gold/grey veins with lots of negative white space); Portoro / black-and-gold (fine gold veins on black, dark ground); serpentine/verde antico (angular clasts, chaotic mosaic rather than flowing veins); Sienna (warm yellow with reddish veining); breccia (angular fragments cemented together). The differences are differences in vein geometry, density, contrast, and clast-vs-vein balance — not just color.

1.5 Egyptian precedent: the stipple/speckle ancestor of spattered granite

The faux-marbling impulse predates Pompeii by a millennium. New Kingdom Egyptian funerary vessels and coffins imitate five stones: travertine ("Egyptian alabaster"), a red-and-white limestone breccia, granodiorite, serpentinite, and red/pink Aswan granite. Thutmose III's and Amenhotep II's sarcophagi were painted to imitate granite using a stipple/speckle technique — flicking or dabbing darker spots of pigment over a lighter base coat to read as igneous grain at a distance. This is the direct ancestor of the spatter method Armstrong later codifies in exact, repeatable steps for porphyry and Egyptian porphyry (see the preset table below) — the same gesture, three thousand years apart: load a brush thin, and eject droplets rather than draw a line.

1.6 Giotto's Scrovegni dado: oil-bound white and book-matched grisaille

Giotto, Scrovegni (Arena) Chapel, Padua (1303–05). Beneath the narrative cycle runs a monochrome faux-marble dado using marmorino/"Roman stucco" technique — a socle of fictive marble panels framing grisaille personifications of the Virtues and Vices as if they were carved stone statues standing in niches. The 1990s restoration (Giuseppe Basile ed.) established that the dado's white lead is bound in oil, not the fresco medium used above it — which is why that white hasn't altered with time the way true fresco lime-white can. The dado was executed giornata by giornata, top to bottom, and — most relevant to LAPIDEO's book-match feature — the paired dado panels use book-matched mirror symmetry: a panel reflected about a vertical axis, exactly the painted analogue of the real quartered/book-matched slabs described in §1.2. It is worth noting explicitly for the algorithm that this symmetry trick is 700 years old and was already understood as a deliberate illusion of costly cut stone, not an accident of workflow.

Giotto, "Justice," Scrovegni Chapel dado, Padua, 1303–05 — a grisaille personification painted as if a carved stone statue standing in a fictive marbled niche, part of the book-matched dado program beneath the narrative cycle. Photo: Petrusbarbygere, Public Domain

1.7 Renaissance and Baroque quadratura: marbling coordinated to illusionistic architecture

Painted faux-marble columns, pilasters, entablatures, and revetment were built up in fresco within quadratura schemes — marbling coordinated to illusionistic cast shadow and modelling so that a painted column reads as a cylinder, not a flat stripe. Named cycles: Raphael's Vatican Logge and Villa Madama; Giulio Romano, Palazzo Te; Veronese, Villa Barbaro (Maser); Andrea Pozzo, whose marbled columns at Mondovì and S. Ignazio, Rome, are documented in his own treatise Perspectiva Pictorum et Architectorum (1693/1700; English translation by John James, 1707, on archive.org). Bavarian and Austrian Rococo church interiors — the Asam brothers, Zimmermann at Wies, Vierzehnheiligen, the Wessobrunn school — contain vast quantities of stuccoed and painted faux marble and scagliola, extending the plaster family introduced in §1.3 to full architectural scale.

The plaster family, distinguished precisely:

Real-inlay traditions set the visual vocabulary these plaster techniques imitate: Sicilian marmi mischi, Neapolitan commesso, Florentine pietra dura/commesso (§1.3).

A scagliola altar, San Filippo Neri, Cingoli — the plaster family in §1.3/§1.7 at full architectural scale, not tabletop scale: stucco marmo as a built structure. Photo: Sailko, CC BY 3.0

1.8 The professional faux-finishing tradition, in the practitioners' own words

A.R. & P. Van der Burg, School of Painting for the Imitation of Woods and Marbles (1878; 7th ed. 1936). (Recovered here via secondary quotation in Stacey & Davies, The Building Conservation Directory, 2015 — the full primary text has not been located online; treat the quotes below as secondhand.) The fundamental rule stated there: "the marble-painter must take it as a fundamental rule that marble, the colour of which is transparent, can only be imitated by glazing or some similar process." On handling: "the paint is loosely put on in a rolling way; the more freely and artlessly this is done, the better it will serve the purpose." Grounds are mostly off-white, but vert de mer and black-and-gold use a dark ground. The tool kit: spotting/marbling brush, flat "French" brush, round "mop" brush, sable/pencil brush, a wide-thin glazing brush, and a flat long-badger softener — broad veins from the French/glazing brush, fine veins from the sable, softened on one side with the badger to give the signature "one hard and one soft edge." The splayed-brush trick: dip the marbling brush in turpentine, press it out on a cup's edge to splay the bristles, and dab it through sequential palette colors to break up a flat wash instantly.

Thomas Kershaw (1819–1898), "Prince of Grainers & Marblers," apprenticed in Bolton, became leading grainer at William Cubitt & Co., and took first prize at the Great Exhibition of 1851; his marbling survives at Buckingham Palace and Osborne House, and panels are held at the V&A and Bolton Museum. His method: dilute opaque base colors, then transparent oil glazes cut with turpentine, veined with feathers, brushes, and sponges. His panels were deceptive enough to provoke Ruskin's condemnation of faux marble as untruthful (§1.10 below).

George D. Armstrong, Cyclopedia of Painting (1907/1908) is the richest verbatim recipe source available — the full book is on archive.org and page-by-page on Wikisource. Armstrong defines scumbling as thick color thinly rubbed on with a hard brush (opaque) and glazing as thin transparent color — the two blend modes every named-marble recipe in the table below is built from. His green master rule states the logic once and applies it everywhere: "The mode of producing all the green marbles... must be the same as that directed for Verde antique. The ground must in all cases be black... shades of green may be formed by scumbling the white over the black, more or less thickly... and, when the whole is finished, glazing with green."

Institut Supérieur de Peinture Van Der Kelen-Logelain, Brussels. Founded in 1882 (Pierre Logelain) and 1892 (Alfred Van der Kelen), merged in 1951; current directors Denise and Sylvie Van der Kelen. It is the only surviving school teaching the full traditional method: a 6-month intensive (October–March), oil-based, conducted in silence with white aprons. Per the school itself: "at the end of six months, the student will be able to imitate more than thirty varieties of wood, and thirty of marbles." Students work from an archive of pattern models plus natural specimen samples; each completes a "decisive panel" kept as a career reference — the modern survival of the échantillon sample-book tradition. Alumni include Pierre Finkelstein, Jean-Luc Sable, and Marie Vanesse.

Pierre Finkelstein, The Art of Faux (1997), codifies the explicit three-layer process: (1) background, (2) veining, (3) overglazing — the same three-value build as §1.4, formalized into a named sequence. His tool vocabulary is worth carrying into the algorithmic translation table below verbatim: the chiqueteur (squirrel-hair, for breaking tonalities and dispersing color), the brecher (single- or multi-headed, for fissures and fragment edges), the badger softener, the veiner, the spalter, the stippler, the spattering brush, and the onyx brush. His signature named moves: "chiqueteuring" — breaking a wet background with a barely-damp chiqueteur; "dispersion" — dipping the chiqueteur in denatured alcohol and tapping it onto wet paint for a reptile-skin/cissing pattern; "fragmenting" a breccia by painting the veins that map the fragment boundaries in negative space first, then adding small fragments positively into the gaps; and "skipping" a dry-bristle veiner across the surface for a broken, intermittent line.

1.9 Vein taxonomy and compositional rules, synthesized

Reading the manuals together (Van der Burg, Armstrong, Finkelstein, and the general trompe-l'oeil corpus in §1.4) against each other surfaces a small, remarkably stable rule set:

1.10 Two traditions: deceptive marbling versus frank fantasy

The historical record actually contains two distinct, coexisting traditions, not one: deceptive imitation, meant to pass as real stone and studied directly from geological specimens, and conventional/fantasy marbling — frankly decorative, invented rather than observed, and often more purely beautiful for not needing to fool anyone. Ruskin, in The Seven Lamps of Architecture (1849, "The Lamp of Truth"), condemned only "definitely attempted deception" and explicitly praised frankly conventional ornament that never claimed to be what it was not. This licenses a "fantasy mode" for LAPIDEO distinct from its "realistic mode" — see the mode-switch item in the roadmap below — rather than treating every non-photoreal output as a failure of realism.

PART 2 — COMPUTATIONAL & ALGORITHMIC MARBLE (core)

2.1 Foundational procedural texturing

Ken Perlin, "An Image Synthesizer," SIGGRAPH 1985 (Computer Graphics 19(3), pp. 287–296; DOI 10.1145/325334.325247; published 1 July 1985, Courant Institute, NYU) introduced the Pixel Stream Editor, solid texturing, and the noise function. The paper's abstract: "We introduce the concept of a Pixel Stream Editor. This forms the basis for an interactive synthesizer for designing highly realistic Computer Generated Imagery." Perlin's original marble is a phase-modulated sine: perturb a periodic stripe function with a fractal sum (turbulence). The canonical code (reproduced in GPU Gems Ch. 5):

// STRIPES (good for marble)
double stripes(double x, double f) {
  double t = .5 + .5 * sin(f * 2 * PI * x);
  return t * t - .5;
}
// TURBULENCE (sum of |noise|/f)
double turbulence(double x,double y,double z,double f){
  double t = -.5;
  for(; f <= W/12; f *= 2)
    t += fabs(noise(x,y,z,f)/f);
  return t;
}
// MARBLE = stripes(x + 2*turbulence(x,y,z,1), 1.6)

The essential idea (Scratchapixel): "A marble texture can be created by modulating the phase of the sine pattern with a noise function or a fractal sum … not to use the noise function directly … but to perturb the function." Perlin, "Improving Noise," SIGGRAPH 2002 fixed gradient-selection artifacts. Ebert, Musgrave, Peachey, Perlin & Worley, Texturing & Modeling: A Procedural Approach (3rd ed., 2003) is the standard reference for marble, fBm, turbulence, and the multifractal family.

Ken Musgrave's multifractals (in the same book, and exposed in Blender's Musgrave/Noise nodes) parameterize by H (fractal dimension), lacunarity (frequency gap, default ~2), octaves, offset, and gain:

The ridged/absolute-value trick (1-|noise|) is directly useful for LAPIDEO: it converts smooth noise bands into creased ridgelines that read as fractures rather than clouds.

2.2 Domain warping (Inigo Quilez) — the workhorse

Iñigo Quílez, "domain warping" formalizes the technique Perlin used in 1984: replace f(p) with f(p + h(p)). Iterated warping is the key to the folded, laminar, metamorphic look:

// one warp:  f( p + fbm(p) )
vec2 q = vec2(fbm(p+vec2(0,0)), fbm(p+vec2(5.2,1.3)));
return fbm(p + 4.0*q);
// two warps:  f( p + fbm( p + fbm(p) ) )
vec2 r = vec2(fbm(p+4.0*q+vec2(1.7,9.2)), fbm(p+4.0*q+vec2(8.3,2.8)));
return fbm(p + 4.0*r);

Crucially, IQ exposes the intermediate warp vectors q and r and maps color from them — mixing base color by f, a second color by |q|, a third by a component of r. This is the computational form of the craft rule correlate color with structure: the color is derived from the same field that produced the shape, not layered independently. A standard fBm uses a rotation matrix per octave (mat2(0.8,0.6,-0.6,0.8)) with lacunarity ~2.0 to "reduce axial bias" (Book of Shaders / IQ). Anisotropic scaling of the input coordinates (e.g. multiplying x by 3 before noise) stretches noise into foliation/lineation — the directional fabric of metamorphic rock.

2.3 Cellular / Voronoi (Worley) noise — breccia and crystals

Steven Worley, "A Cellular Texture Basis Function," SIGGRAPH 1996 (pp. 291–294; DOI 10.1145/237170.237267) scatters feature points and returns distance to the n-th nearest (F1, F2, …). F1 gives cell-interior gradients (crystalline grain); F2−F1 gives cell edges — a natural crack/fracture network and the basis for breccia clast boundaries. Gustavson (2011) gave a GPU 2×2-cell variant; IQ's "voronoise" (2014) blends smoothly between value noise and Voronoi; IQ's 2012 article gives precise Voronoi borders. For LAPIDEO: F2−F1 Voronoi is the correct primitive for Breccia Capraia, verde antico, and any brecciated/conglomerate stone — angular clasts in a matrix — and for calcite-grain sparkle in the matrix.

2.4 Physically- and geologically-motivated models

The literature distinguishes noise-decorated rock from geologically simulated rock. Fournier, Fussell & Carpenter (1982, stochastic models) and the fBm/spectral-synthesis family (surveyed in Lagae et al., "A Survey of Procedural Noise Functions," CGF 2010, and the MDPI "Survey of Procedural Methods for 2-D Texture Generation," 2020) generate self-similar surfaces. Geological folding — the mechanism behind the laminar look of metamorphic marble — is described in structural-geology terms (ETH Zurich folding notes): cuspate-lobate folds form at interfaces between materials of contrasting viscosity, with cusps pointing into the stronger layer; disharmonic folds arise when layers of different competence fold at different wavelengths. Sedimentary-then-metamorphic pipelines (e.g. the arXiv "SubsurfaceGen" deposit-then-deform approach: lay down beds from a simplex-noise field, then warp the depth axis) are the physically-grounded way to get banding that then folds — exactly the Cipollino / onyx problem.

Crack-seal veining is the correct model for most marble veins and is not a noise contour. Ramsay's crack-seal mechanism (1980): a fracture opens incrementally and is sealed by mineral (calcite/quartz) precipitation between increments, leaving inclusion bands parallel to the vein walls and inclusion trails parallel to crystal-fibre axes. Anastomosing crack-seal networks in limestone (Jabal Shams, Oman study) produce dense "zebra"-like vein patches. Veins are classed syntaxial (inward growth), antitaxial (outward), and stretching. The takeaway for LAPIDEO: a real vein is a 1-D path with a width profile, a wall-parallel internal fabric, and a stress-controlled orientation — properties a thresholded scalar field cannot encode.

2.5 Reaction–diffusion & pattern formation

Alan Turing (1952), "The chemical basis of morphogenesis" proposed reaction–diffusion (RD) pattern formation. Greg Turk, "Generating Textures on Arbitrary Surfaces Using Reaction-Diffusion," SIGGRAPH 1991 and Andrew Witkin & Michael Kass, "Reaction-Diffusion Textures," SIGGRAPH 1991 (Computer Graphics 25(4), 299–308; DOI 10.1145/127719.122750) brought RD to graphics. The two-morphogen isotropic system:

∂u1/∂t = f(u1,u2) + α ∇²u1
∂u2/∂t = g(u1,u2) + β ∇²u2

with Turing's reaction terms f = s(16 − u1·u2), g = s(u1·u2 − u2 − γ), γ a small random term. Witkin & Kass's key contribution for marble is anisotropic, spatially non-uniform diffusion — steering the diffusion tensor produces oriented, streaked, marble-like patterns rather than uniform spots/stripes. RD is a strong candidate for LAPIDEO's matrix mottling and dendritic/mineral staining, less so for the primary veins.

Diffusion-limited aggregation (DLA) produces dendritic, branching growth — the correct model for dendritic manganese/iron oxides in moss agate, "landscape" Cotham marble, and dendritic stains. Lichtenberg-figure branching is the same visual family. These are distinct from crack-seal veins: dendrites branch fractally with no width-conserving hierarchy and no dominant direction, whereas crack-seal veins are directional fractures.

2.6 Vein-network–specific algorithms (contour-based vs curve-based)

This is the pivotal distinction for LAPIDEO. Contour-based veining thresholds a (possibly warped) noise field: fast, GLSL-native, but produces closed loops with no endpoints, no consistent width profile, no branching hierarchy, and no dominant direction — the classic "fake" signature. Curve-based veining places explicit vein paths with width profiles.

Why curve-based reads as real: real crack-seal veins are discrete 1-D fractures with a width profile, a preferred stress orientation, a branching hierarchy, and internal wall-parallel banding. Explicit curves encode all four; a single thresholded isotropic field encodes none. This is the highest-leverage architectural decision in LAPIDEO after composition.

2.7 Production practice: Substance Designer, subsurface scattering

Substance Designer marble (davescm on the Adobe forums; Norman Bishop's marble-collection breakdown on 80.lv; the 80.lv "Creating Marble in Substance Designer" tutorial) follows a consistent node recipe:

  1. Base cloud/grunge noise → directional warp (with a second noise as intensity) to bend it into veins → edge detect → first vein layer.
  2. Flood fill → flood fill mapper (grayscale) to derive a second, finer vein layer nested within the first; repeat with more directional warp for a third layer. This is the scale hierarchy rule in node form.
  3. Slope Blur Grayscale (which is internally a directional warp along a slope map, not a true blur) to give veins width variation and jaggedness, then to drive height/normal.
  4. Mask/fade the finest veins "away in places" so density is non-uniform; thicken a few selected veins with a Histogram Scan mask to create hero/event veins.
  5. Color via gradient map from the greyscale, with the crystalline vein structure explicitly colored differently from the matrix and fossils/clasts textured separately. As Bishop notes, "We now know that the veins are made of crystals. This needs to be shown through our texture if we want it to be accurate to the real marble," and "The shells being fossils, they won't be textured the same way as the veins, seeing as they don't have a crystalline structure."

Subsurface scattering is why marble reads as marble and not as a printed pattern. Henrik Wann Jensen et al.'s BSSRDF (SIGGRAPH 2001, "A Practical Model for Subsurface Light Transport") — famously demonstrated on a translucent marble bust — uses a dipole diffusion approximation; RenderMan and every production renderer ship a "marble" SSS preset (Jensen's measured values). Light enters the surface, scatters internally, and exits nearby, giving the soft, lit-from-within depth of stone. In real-time (Alan Zucconi's "Fast Subsurface Scattering," V-Ray/Chaos, Marmoset) this is approximated with a wrap-diffuse + back-translucency term driven by a thickness map. For LAPIDEO: tie specular/roughness and translucency to the vein-vs-matrix mask — calcite veins are more translucent and higher-gloss than the matrix; add a subtle parallax/inner-glow term so veins appear to sit below a polished surface. Without a translucency term the output will always look like a decal.

2.8 Real geology as constraint — distinct visual signatures

Each mechanism has a separate visual signature and deserves a separate generative primitive:

A stylolite — the toothed pressure-dissolution suture seam, dark with the insoluble residue left behind as the rock dissolved into itself. Almost never modelled in procedural marble; LAPIDEO's own stylolite pass (M.stylolite) is the exception. Photo: James St. John, CC BY 2.0

Named marbles (formation → signature):

A few of the above, as themselves rather than as parameters:

Carrara — fine grey veining on white. Photo: James St. John, CC BY 2.0

Calacatta Gold — bold iron-gold veins, generous negative space. Photo: Stones slabs, CC BY-SA 4.0

Portoro — near-black micritic limestone laced with gold. Photo: Bodroza, CC BY-SA 4.0

Nero Marquina — black bituminous limestone, sharp white calcite veins. Photo: Karanky78, CC BY-SA 4.0

Verde Antique serpentinite — the ophicalcite-breccia family verde antico belongs to: dark clasts, pale cementing veins. Photo: James St. John, CC BY 2.0

Imperial Porphyry — hematite-purple groundmass sown with pale feldspar phenocrysts, no veins. Photo: James St. John, CC BY 2.0

Cipollino — onion-skin foliation, mica bands laminating green and white. Photo: Max.kit, CC BY-SA 4.0

Onyx — banded calcite deposit, translucent where the layers run thin. Photo: John Rusk, CC BY 2.0

2.9 Aesthetic / perceptual guidance — why procedural marble looks fake

There is no single canonical essay; the diagnosis is assembled from artist breakdowns, Adobe/Substance guidance, and noise-limitation statements. The named failure modes and their fixes:

Failure mode Fix Source
No large-scale composition (plain fBm) Add a dedicated composition layer above the noise arXiv "InfiniteDiffusion": noise methods "lack the large-scale structure … requires heavy post-processing to approach realism"
Isotropic noise (no direction) Anisotropic/Gabor noise + directional warp for a dominant drift Lagae et al. survey
Over-uniform vein density Mask density; add a few thickened "hero" veins Bishop (80.lv): thicken selected veins with Histogram Scan + Slope Blur
Missing scale hierarchy 2–3 nested vein levels; fine veins "fade away in places" Bishop (80.lv)
Repeated motifs Randomize distribution to avoid visible repetition Adobe/Substance marble guidance
No color/structure correlation Derive color from the same field/mask as structure Bishop; IQ domain-warp coloring
No dominant direction Directional warp; reuse the same warp across layers for coherence Bishop; Adobe
Over-perfection reads as fake Real book-matched slabs show mirror-flow; identical repeated veins = the tell of fakes stone-industry (UMI Stone; Vardhman)

The convergence is striking: the arXiv terrain paper's "lack of large-scale structure," the Substance artists' "hero veins + nested hierarchy + directional coherence," and the 18th-century faux-marbler's "flow of movement, drift, no X-crossings, vein hierarchy" are the same rules stated in three vocabularies.

PART 3 — SYNTHESIS: RANKED ALGORITHMIC RECOMMENDATIONS FOR LAPIDEO (WebGL/GLSL)

Ranked by likely visual impact per unit implementation effort.

Tier 1 — Highest impact

  1. Add a large-scale composition layer above the noise. Before generating fine detail, lay down a low-frequency "design" field that defines: a dominant vein direction (drift), 1–3 event veins (dramatic primary veins), and large zones of negative space (clear matrix). This single change addresses the most-cited failure mode ("lack of large-scale structure"). Implement as a separate low-octave field or an authored/curve-driven guide field that modulates everything below it.

  2. Introduce a dominant direction / drift via domain warping + anisotropy, and correlate color with structure. Use IQ iterated domain warping, expose the intermediate warp vectors, and drive the color ramp from them (not from an independent field). Add anisotropic coordinate scaling for foliation. Reuse the same warp across all vein layers for coherence.

  3. Enforce a primary/secondary/tertiary vein hierarchy with non-uniform density. Generate veins in 2–3 nested scales; fade the finest veins out in patches; give one or two veins outsized width/contrast (hero veins). Never a uniform mesh.

  4. Add subsurface-scattering / translucency read. Even a cheap wrap-diffuse + back-translucency term driven by a thickness/vein mask, with calcite veins more translucent and glossier than the matrix, plus a subtle inner-glow/parallax so veins sit below a polished surface. Without this, output reads as a printed decal regardless of pattern quality.

Tier 2 — High impact, moderate effort

  1. Move primary veins from contour-based to curve-based. Implement a lightweight space-colonization (Runions 2005) or curl-noise-streamline (Bridson 2007) vein generator to produce explicit vein paths with width profiles, branching hierarchy (Murray's law), and a stress-controlled dominant orientation. Rasterize with a signed-distance width profile and wall-parallel internal banding (crack-seal). Curl-noise streamlines automatically satisfy the "veins never cross at X / right angles" rule because divergence-free streamlines don't intersect.

  2. Add stylolites. A jagged, interlocking suture seam (roughly bedding-parallel) with a thin dark insoluble-residue halo. Almost always missing from procedural marble; very high realism-per-line-of-code. Generate as a 1-D jagged path (e.g. summed high-frequency ridged noise clamped to a seam line) with a dark diffusion halo.

  3. Use distinct primitives per stone type rather than one noise function. Route each stone through the correct generator:

    • Crack-seal marbles (Carrara, statuario, arabescato, calacatta, Portoro, Nero Marquina) → curve-based vein networks + matrix noise (+ stylolites, gold/grey/black tuned by impurity).
    • Breccias/ophicalcites (verde antico, Breccia Capraia, Fior di Pesco, Giallo Siena) → Voronoi F2−F1 clast fields + matrix.
    • Porphyry → scattered phenocryst clasts over a near-uniform hematite-purple groundmass, no veins.
    • Cipollino → warped anisotropic banding + mica laminae + folding.
    • Onyx/alabaster → warped parallel/curved translucent bands + strong SSS.

Tier 3 — Refinement

  1. Ridged-multifractal creasing (offset − |noise|, octave-weighted) to convert smooth bands into hard-edged fracture ridges where sharp veins are wanted (Nero Marquina).
  2. Voronoi F1 grain sparkle in the matrix for calcite crystallinity; tie a faint specular sparkle to it.
  3. Book-match correctness: ensure the mirror is a true reflection of one continuous underlying field so veins flow across the seam (real book-match), and consider quartered 4-way mirror for the opus-sectile "expensive stone" cue. Add a faux bevel/seam shadow when tiling into multiple slabs (the First-Style / faux-marbler panelization rule).
  4. Reaction–diffusion or DLA as an optional matrix-mottling / dendritic-stain layer (moss-agate/landscape-marble effects, dendritic manganese) — anisotropic Witkin-Kass RD for oriented mottling; DLA for branching dendrites.
  5. Fossil/inclusion layer textured separately from veins (non-crystalline), per Bishop's practice, for limestones.

Key references

Computational & algorithmic

Historical & craft

Named-marble preset library

A literal recipe sheet, transcribed and paraphrased mainly from Armstrong (1907/8) with Finkelstein's later tutorial for Red Griotte, useful as a reference regardless of whether a given entry is being read for its craft history or mined for shader parameters. Format: Ground → Palette → Sequence → Vein tool → Signature trick.

Marble Ground Palette Sequence Vein tool Signature trick
Sienna White Yellow ochre, vermilion, white lead, blue black, purple lake Dab ochre-white / vermilion-white patches wet-in-wet, soften → thin blue-black veins, soften → thin purple-lake+blue-black glaze in open spaces → white veins when dry, soften → varnish Sable pencil for veins; flat camel-hair fitch for the glaze Purple-lake glaze reserved for open (unveined) spaces only
Verde Antique / Serpentine (green master recipe) Black or dark green Dark brown, green, Brunswick green, white lead, black Scumble brown+green, then Brunswick green+white (soften); paint white/black masses with a fitch Fitch Armstrong's master rule: black ground, scumble white over black (thickness = shade of green), finish by glazing green over everything
White-Veined / Statuary / Carrara Pure white, perfectly smooth White+black+Indian red for the first faint vein First vein scumbled thin, following the strata direction; subsequent veins layered progressively finer Sable pencil Veins run with the strata, not across it — direction is decided before density
Black and Gold / Portoro Black / deep ivory-black Yellow ochre, white, vermilion, burnt/raw sienna; optional gold or silver leaf Dab ochre-white spots, heighten with vermilion; while wet draw threads in all directions; add a white vein in the deepest black with crossing threads; glaze grey/white; finish with a few white veins Round-pointed bodkin (for the leaf trick) Cabinet trick: lay gold or silver leaf under the black ground, then draw veins off the leaf with a bodkin so the metal shows through the vein line
Porphyry (red) Venetian red + vermilion + white Same, spattered Spattering: roll a nearly-dry loaded brush between the palms; three successive layers of spots; opaque white vein with transparent threads added once dry Sable pencil + feather (veins); palm-rolled brush (spatter) Three separate spatter passes, not one — density is built in layers
Egyptian Porphyry Vermilion + white lead Indian red, lake, light blue, white, blue Strike the brush handle on a stick while turning the wrist to throw elliptical spots; light-blue spatter over; large white spots; fine white veins Sable pencil (large spots); camel-hair pencil (fine veins) The handle-strike technique throws elliptical rather than round spots — deliberately anisotropic spatter
Jasper Venetian red + red lead + chrome yellow White, blue, brown, yellow spots Dab white spots with a sponge or tool, soften with badger; add blue/brown/yellow spots; veins with a camel-hair pencil when nearly dry Sponge (spots); camel-hair pencil (veins) Veining is timed to "nearly dry," between wet-blend and hard-edge
Red Griotte (Finkelstein tutorial; analogue for Rouge Royal/Rosso) Dark brick basecoat Cadmium red + carmine lake + burnt umber + orange (background); black + carmine lake (dark glaze); off-white/ochre/raw-umber (fissures/veins); transparent black+Payne's grey+raw umber (overglaze) Background glaze in diagonal "beds" → dark glaze smoothed with a round badger → alcohol dispersion for reptile-skin cissing → fragments painted (two-tone "quail's-eye" clusters) → off-white fissures → veiners → transparent zig-zag overglaze → varnish Two-headed flat badger/chiqueteur (dispersion); brecher then veiners (fissures) Denatured-alcohol dispersion pass is what produces the mottled "quail's eye" fragment texture — not paint, solvent
Vert de Mer / Seagreen Black Chrome oxide green + titanium white Sponge on, badger-soften; twin-header whitish veins, broken with a sponge; toothbrush spatter of turpentine+white and black; discreet red-ochre "cobblestone" flecks Two-header veiner; toothbrush (spatter) A toothbrush-flick spatter layered under the veins, not over them
Brèche violette Off-white / pale cream Zinc white, black, ochre, chrome-orange, caput mortuum, ultramarine, red lake Dark purplish broad veins + very fine white veins, sponge-modified Sponge Broad and fine veins are two separate passes at two separate value contrasts, not one graded pass

Translation table: craft rule → algorithmic feature

Craft rule / tool behaviour Source LAPIDEO algorithmic feature
Transparent glazing for depth Van der Burg 1878 Stack of semi-transparent tinted layers with alpha/absorption compositing; SSS-style depth term
Stucco lustro/marmorino thin burnished lime glazes Venetian plaster tradition, §1.7 Multi-layer translucency accumulation; height-based specular/burnish highlight
Smooth ground with sheen, tints all glazes 19th-c. practice Base-colour parameter tinting all overlying transparent layers (light-over-dark vs dark-over-light toggle)
Wet-in-wet base mottling Armstrong; Finkelstein "chiqueteuring" Low-frequency multi-octave noise (2–3 warm/cool tints) blended; domain-warped value break-up
Badger-softening (one side of a vein) Van der Burg Anisotropic blur perpendicular to local vein direction; asymmetric one-sided blur kernel
"One hard edge, one soft edge" Van der Burg Asymmetric vein cross-section profile (offset SDF)
Diagonal drift; veins never regular Manual consensus Global orientation/flow field (dominant diagonal ± jitter) driving vein advection
Veins branch, never cross; no X/right angles Manuals L-system/space-colonization vein growth with branch bias and junction suppression
Veins feather/fade/run off edge Manuals Taper vein opacity+width toward endpoints; extend beyond bounds and clip
Vein width varies along length Manuals Width = f(arc length, noise); modulate SDF radius per segment
Primary "leaders" + secondary/tertiary network Finkelstein Hierarchical vein generation: N primary curves seed M secondary, then capillary tertiary
Fragmenting breccia in negative space Finkelstein Worley/Voronoi partition; draw cell borders as veins, fill cells as fragments; recursive sub-cells
Alcohol/turpentine dispersion ("cissing") Finkelstein; Van der Burg Worley/spot-based dissolution mask multiplied into a glaze layer
Spattering/sprinkling (porphyry, granite) Armstrong; Egyptian granite (§1.5) Poisson-disc/stochastic point splatter; elliptical option (anisotropic stamp)
Scumble vs. glaze distinction Armstrong Two blend modes: scumble = opaque drybrush overlay; glaze = transparent multiply
Book-matched mirror symmetry Scrovegni (§1.6); slab practice Mirror/quarter symmetry operator on the pattern field
Panelization, faux bevel, joint highlight/shadow Slab practice Slab grid layout; per-joint AO/bevel term; run-across-vs-stop-at-joint toggle
Three-value system, veins rarely pure B/W Colour theory Constrained 3-value palette generator; clamp vein luminance away from extremes
Quiet zones/3 points of interest Finkelstein composition rule (§1.9) Activity-density field with reserved low-variance regions
Deceptive vs. fantasy mode Ruskin (§1.10) Global mode switch: "realistic" (constrained, specimen-like) vs "fantasy" (unconstrained hue/pattern)

Griotte marble, illustrated in the Larousse Universel, 1923 — the stone behind Finkelstein's Red Griotte recipe above. Photo: Claude Augé, Public Domain

Campan green marble, Larousse Universel, 1923 — a French green marble in the same family the historical "Vert de Mer" seagreen recipes above are drawn from (not identical to it, but the closest verifiably-sourced period plate found for this pass). Photo: Claude Augé, Public Domain

Brèche violette, Larousse Universel, 1923 — an exact match for the table entry above. Photo: Claude Augé, Public Domain

Rouge antique, Larousse Universel, 1923 — a real red marble close in character to the "Porphyry (red)" table entry (not literally porphyry, but the nearest verified period plate in the same red-marble family). Photo: Claude Augé, Public Domain

Jaune de Provence, Larousse Universel, 1923 — a warm yellow marble in the same family as the "Sienna" table entry above, not Siena itself. Photo: Claude Augé, Public Domain

Implementation roadmap (staged build order)

This sequences the Tier 1–3 recommendations in Part 3 into a build order — a "what to build in what order," rather than a re-ranking of them.

Stage 1 (spine). A universal 3-pass pipeline mirroring the craft-manual build in §1.4/§1.8: (1) ground + wet-in-wet mottle, (2) veining (orientation-field-driven, hierarchical, asymmetric profile, branch-not-cross), (3) overglaze (transparent tint, optionally spot-only). Benchmark: can Sienna, Statuary, and Portoro (see preset table above) be reproduced by changing only ground colour, palette, and vein density/scale?

Stage 2 (depth engines). Translucency/glaze stack + asymmetric badger-blur (Tier 1 items 2 and 4). Benchmark: side by side against a real Carrara photo, does the vein read as under a translucent surface rather than on it?

Stage 3 (signature textures). Dissolution/cissing mask (Worley), spatter engine (Poisson-disc, elliptical option per the Egyptian-Porphyry handle-strike trick, §1.5), breccia negative-space partition (Voronoi + recursive sub-cells, per Finkelstein's "fragmenting"). Unlocks porphyry, granite, breccia, Vert de Mer, and Red Griotte from the preset table.

Stage 4 (architecture). Slab panelization — grid layout, book-match/quarter symmetry (§1.2, §1.6), joint bevel/AO, run-across-vs-stop-at-joint, feature-scale proportional to slab size, distance-based LOD contrast.

Stage 5 (preset library + modes). Ship the named-marble presets above with provenance notes citing the manual sources; add the deceptive/fantasy mode switch (§1.10).

Note: several Stage 3/4 items — curve-based veins, Voronoi F1/F2 breccia, stylolites, and book-match — are, as of this pass, already implemented in LAPIDEO's own code (marbles.html), ahead of where this roadmap assumed. Worth reconciling the roadmap against the app's actual feature state rather than treating it as still-aspirational.

Caveats

#ai
#marble
#research