--- title: LAPIDEO-Research created: 2026-07-25 08:45 updated: 2026-07-25 09:33 revision: 9 author: Auriea summary: added reference images and links --- [[tag:ai]] # 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 - **The single biggest realism lever is not the noise function but the *composition layer above it*.** Real marble reads as marble because of large-scale structure (a dominant vein direction/drift, a few "event" veins, negative space, and value hierarchy) plus translucency/subsurface scattering — all of which plain isotropic fBm noise lacks. Every hand-craft tradition and every good procedural artist independently converges on the same rules. - **Switch veins from contour-based to curve-based where possible.** Thresholding a noise field gives closed, endpoint-free, directionless "blobs"; real crack-seal veins are 1-D fracture paths with width profiles, a stress-controlled dominant orientation, and a branching hierarchy. Space-colonization (Runions et al. 2005) and Voronoi-crack networks reproduce this; noise iso-contours cannot. - **Model each geological mechanism with a distinct primitive rather than one noise function:** crack-seal veining (curve networks), brecciation (Voronoi/fragment fields), depositional banding (warped 1-D stratification), stylolites (jagged suture seams — almost always missing in procedural marble), and porphyritic phenocrysts (scattered clasts in a fine groundmass). ## 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. https://commons.wikimedia.org/wiki/Special:FilePath/1ststylepompeii.jpg *First Style wall, Pompeii — painted stucco imitating panels of marble veneer. Photo: [Ianz, CC BY-SA 2.0](https://commons.wikimedia.org/wiki/File:1ststylepompeii.jpg)* ### 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. https://commons.wikimedia.org/wiki/Special:FilePath/Marble_Floor,_Pantheon,_Rome._(6065456872).jpg *The Pantheon's opus sectile floor, Rome — cut-stone slab-and-panel logic, still walked on since antiquity. Photo: [Larry, CC BY 2.0](https://commons.wikimedia.org/wiki/File:Marble_Floor,_Pantheon,_Rome._(6065456872).jpg)* ### 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 is precise: 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 and is turned into calcium sulphate dihydrate" (i.e., plaster of Paris) — 128°C exactly, not approximately. 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. https://commons.wikimedia.org/wiki/Special:FilePath/Annibale_grifoni,_piano_per_tavolino_con_orfeo,_1660-79_ca._(carpi)_scagliola.JPG *Scagliola tabletop by Annibale Grifoni, c. 1660–79, Carpi — Guido Fassi's own town. Photo: [Sailko, CC BY-SA 3.0](https://commons.wikimedia.org/wiki/File:Annibale_grifoni,_piano_per_tavolino_con_orfeo,_1660-79_ca._(carpi)_scagliola.JPG)* https://commons.wikimedia.org/wiki/Special:FilePath/Cappella_dei_principi,_incrostazioni_delle_pareti,_specchiatura_01.jpg *Pietra dura wall inlay, Cappella dei Principi, Florence — colour chosen to correlate with structure. Photo: [Sailko, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Cappella_dei_principi,_incrostazioni_delle_pareti,_specchiatura_01.jpg)* ### 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"](https://en.wikipedia.org/wiki/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"](https://www.buildingconservation.com/articles/marbling/marbling.htm); Traditional Painter; Matisse; and the DIY marbling corpus): - **Three-value build.** (1) A *ground* — off-white for light marbles, or a dark ground for vert-de-mer / black-and-gold (Portoro). (2) A *mid-tone float* — the ground is "clouded" with diluted translucent or opaque pigment into "irregular and varied patches of colour," softened with a badger-hair brush. (3) *Veining* — broad veins with a flat "French" or glazing brush, fine veins with a sable pencil. - **Drift / direction of the vein system.** "Veins in marble usually run on a diagonal." The whole panel has a *flow of movement* / dominant direction; veins are never all parallel and evenly spaced, and never radiate from a central hub like a spider's web. - **The no-X / no-right-angle rule.** "Two veins of the same tone should never cross." Veins "branch off from each other and usually don't ever cross paths or create an X." This is the single most-repeated faux-marbling rule. - **Wandering vs. fracture line.** Veins should be "less curvy and more jagged," and the brush is pulled *and twisted* to get controlled randomness; a vein has "one hard and one soft edge" (softened to one side with the badger brush). - **Vein hierarchy.** Primary (broad), secondary, tertiary (fine) veins, with the fine veins "faded away in places" — never a uniform mesh. - **Translucency through glazes.** Depth is built through successive translucent glazes ("light over dark or dark over light"); veins are blurred as if "under water — slightly blurry," often by misting. - **Slab logic on large surfaces.** Break a large wall into taped-off "slabs," add a faux bevel shadow along the seam, and carry veins *over the edges* — the same panelized grammar as the First Style. - **Continue veins over edges/corners** to sell the illusion that the pattern is volumetric solid stone, not a surface print. https://commons.wikimedia.org/wiki/Special:FilePath/Altar_plinth_marbleized_Baroque_church_St_Peter_San_Pietro_Modica_Sicily_Sicilia_Italy.jpg *Marbleized altar plinth, San Pietro, Modica, Sicily — painted stone imitating stone. Photo: [Acabashi, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Altar_plinth_marbleized_Baroque_church_St_Peter_San_Pietro_Modica_Sicily_Sicilia_Italy.jpg)* **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. ## 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](https://doi.org/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*: - **fBm** — additive cascade; homogeneous and isotropic (the "flat/boring" default). - **Multifractal** — multiplicative cascade; heterogeneous (variation depends on location). - **Ridged multifractal** — takes `1 - |noise|` (or `offset - |noise|`) per octave, weighting the next octave by the current — produces *sharp ridged creases* ideal for hard-edged fracture veins. - **Hybrid multifractal** — mixes additive and multiplicative for mixed smooth/rough regions. 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"](https://iquilezles.org/articles/warp/)** 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](https://doi.org/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](https://doi.org/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. - **Space colonization — Runions, Fuhrer, Lane, Federl, Rolland-Lagan & Prusinkiewicz, ["Modeling and Visualization of Leaf Venation Patterns,"](https://algorithmicbotany.org/papers/venation.sig2005.html) SIGGRAPH 2005** ([PDF](https://algorithmicbotany.org/papers/venation.sig2005.pdf)), and **Runions, Lane & Prusinkiewicz, "Modeling Trees with a Space Colonization Algorithm," Eurographics Workshop on Natural Phenomena 2007** ([algorithmicbotany.org](https://algorithmicbotany.org/papers/)). The algorithm iteratively grows a vein network toward scattered attractor ("auxin") points: each vein node grows toward the average direction of nearby attractors; attractors within a kill-distance are consumed. It naturally produces *open* (tree-like) or *closed* (looping/anastomosing) networks, a **hierarchical order (thick first-order → fine higher-order veins)**, and branch widths via **Murray's law**. Runions' 2008 thesis explicitly covers "calculation of vein width" and "placement of new vein nodes." Jason Webb's open-source 2-D JS implementations and Entagma's Houdini/VEX version are practical ports. - **L-systems** for recursive branching veins; **anisotropic diffusion** and **flow-field / streamline tracing** for laminar veining. - **Curl noise — Bridson, Hourihan & Nordenstam, ["Curl-Noise for Procedural Fluid Flow,"](https://www.cs.ubc.ca/~rbridson/docs/bridson-siggraph2007-curlnoise.pdf) SIGGRAPH 2007**. Taking the curl of a Perlin potential field yields a **divergence-free (incompressible) flow field**; tracing streamlines through it gives smooth, laminar, non-crossing flow lines — an excellent way to generate a *dominant-direction vein drift* that automatically avoids the forbidden X-crossings, because streamlines of a divergence-free field do not cross. - **Voronoi-crack networks** (Fabrice Neyret's "Vorocracks" on Shadertoy) build authentic crack networks from Voronoi edges, letting the vein network be inspected as a graph — a middle path between pure contour and full space-colonization. *(Note: verify the Vorocracks quotes verbatim; the Shadertoy page blocked direct fetch.)* **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](https://80.lv/articles/001agt-creating-textures-based-on-scientific-and-end-user-research); the [80.lv "Creating Marble in Substance Designer" tutorial](https://80.lv/articles/creating-marble-in-substance-designer)) 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"](https://graphics.stanford.edu/papers/bssrdf/)) — 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: - **Recrystallization** of calcite/dolomite → the white sugary matrix (grain sparkle: Voronoi F1). - **Crack-seal veining** → directional fracture paths with wall-parallel banding (curve networks). - **Stylolites** → jagged, interlocking *suture seams* (Greek *stylos* = pillar), formed by pressure-dissolution; they are toothed/columnar zigzag lines concentrating insoluble residue (clay, iron oxide, graphite) — dark, sharp, roughly bedding-parallel. **These are almost always missing from procedural marble and are a high-value, low-cost addition** (a 1-D jagged line with a dark residue halo). Amplitudes range from sub-mm to ~15 cm. - **Brecciation & re-cementation** → angular clasts in matrix (Voronoi F2−F1). - **Boudinage, folding, transposition** → stretched/folded banding (domain warp + anisotropy). **Named marbles (formation → signature):** - **Carrara / statuario / arabescato / calacatta** — all metamorphosed limestone from the Apuan Alps; veins are impurity concentrations (clay, graphite, iron oxides) recrystallized during metamorphism. Statuario: fine grey veins on bright white. Calacatta: iron-based (limonite/goethite) → **gold/amber bold veins** on bright white, generous negative space. Arabescato: clay+graphite → **grey/grey-green netlike flowing veins**. (Emperor Marble: Calacatta veining is iron-based; Arabescato is clay+graphite-dominated.) - **Portoro (black-and-gold)** — a Triassic/Rhaetian black *micritic limestone* (La Spezia Fm.), not a true marble: black from organic matter deposited in a low-oxygen marine setting, extensively fractured and filled with white calcite + gold veins from partial dolomitization/iron oxidation, plus stylolites. Signature: sepia-black matrix, fine catenary gold veins. → curve veins + dark ground + stylolites. - **Nero Marquina** — a Cretaceous black *bituminous limestone* (Markina, Basque Country); black from bitumen, sharp narrow white calcite veins in fractures. Signature (Pietra): veins "read almost as drawn rather than geological … closer to architectural drawing than to landscape painting" — sharp, narrow, high-contrast. → thin high-contrast curve veins. - **Verde antico / Verde Alpi (serpentinite)** — an *ophicalcite breccia*, not marble: dark-green serpentinite clasts (hydrated ultramafic mantle rock) cemented by white calcite veins along fault/carbonation zones. Signature: "a chaotic … mosaic of dark shapes against a bright background." → Voronoi clast field, not flowing veins. - **Imperial Porphyry** — an *igneous* rock; per Abu El-Rus et al., "A new look on Imperial Porphyry" (Int. J. Earth Sci. 2018, Springer, [DOI 10.1007/s00531-018-1604-z](https://doi.org/10.1007/s00531-018-1604-z)), it is "a porphyritic rock of trachyandesitic to dacitic composition," whose "purple color is mainly due to dispersed flakes of hematite, resulting from hydrothermal alteration of a dark green Common Porphyry," with "abundant, weakly aligned white to pink feldspar phenocrysts" (phenocrysts typically 0.3–5 mm, formed by slow deep cooling). Signature: uniform deep-purple matrix speckled with small angular pale phenocrysts. → **scattered clast/phenocryst field over a near-uniform matrix — NOT veins.** (This is a common error: porphyry has no veins.) - **Cipollino** — Karystian silicate marble (Euboea); **onion-skin banding** from alternating mica and calcite layers, "white-green base, with thick wavy green bands, constrained by thin bands of mica." → warped anisotropic banding + folding, mica bands as thin dark laminae. - **Onyx / alabaster** — banded *calcite* (± aragonite), a chemical spring/cave deposit (like travertine but non-porous), NOT metamorphic marble; the banding is "a geological record of how the stone formed, layer by layer," translucent because the thin pure calcite layers transmit light. → parallel/curved translucent bands (warped 1-D gradient) + strong SSS. - Giallo Siena (warm yellow, reddish brecciated veining), Fior di Pesco (peach-flower breccia), Rosso Verona (red nodular limestone) — breccia/nodular signatures → Voronoi + warped banding. **A few of the above, as themselves rather than as parameters:** https://commons.wikimedia.org/wiki/Special:FilePath/White_Carrara_Marble_(Apuan_Marble_Formation,_Tertiary_metamorphism_of_Jurassic_limestones;_Carbonera_Quarry,_Tuscany,_Italy)_(14618707748).jpg *Carrara — fine grey veining on white. Photo: [James St. John, CC BY 2.0](https://commons.wikimedia.org/wiki/File:White_Carrara_Marble_(Apuan_Marble_Formation,_Tertiary_metamorphism_of_Jurassic_limestones;_Carbonera_Quarry,_Tuscany,_Italy)_(14618707748).jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/Calacata_Gold_2cm_117x71_copy.jpg *Calacatta Gold — bold iron-gold veins, generous negative space. Photo: [Stones slabs, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Calacata_Gold_2cm_117x71_copy.jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/Portor_marble.jpg *Portoro — near-black micritic limestone laced with gold. Photo: [Bodroza, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Portor_marble.jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/Olaspe_1.jpg *Nero Marquina — black bituminous limestone, sharp white calcite veins. Photo: [Karanky78, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Olaspe_1.jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/Serpentinite_(Paleozoic;_J.A._Vermont_Verde_Antique_International_Quarry,_northeast_of_Rochester,_Vermont,_USA)_13.jpg *Verde Antique serpentinite — the ophicalcite-breccia family verde antico belongs to: dark clasts, pale cementing veins. Photo: [James St. John, CC BY 2.0](https://commons.wikimedia.org/wiki/File:Serpentinite_(Paleozoic;_J.A._Vermont_Verde_Antique_International_Quarry,_northeast_of_Rochester,_Vermont,_USA)_13.jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/%22Imperial_Porphyry%22_-_porphyritic_metadacite_to_porphyritic_meta-andesite_(Dokhan_Volcanics,_Neoproterozoic,_~593-602_Ma;_Mons_Porphyrites,_Red_Sea_Mountains,_Egypt)_1_(25869817093).jpg *Imperial Porphyry — hematite-purple groundmass sown with pale feldspar phenocrysts, no veins. Photo: [James St. John, CC BY 2.0](https://commons.wikimedia.org/wiki/File:%22Imperial_Porphyry%22_-_porphyritic_metadacite_to_porphyritic_meta-andesite_(Dokhan_Volcanics,_Neoproterozoic,_~593-602_Ma;_Mons_Porphyrites,_Red_Sea_Mountains,_Egypt)_1_(25869817093).jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/Marbre_cipolin_Italie.jpg *Cipollino — onion-skin foliation, mica bands laminating green and white. Photo: [Max.kit, CC BY-SA 4.0](https://commons.wikimedia.org/wiki/File:Marbre_cipolin_Italie.jpg)* https://commons.wikimedia.org/wiki/Special:FilePath/2014-08-16-15.30.33_ZS_PMax_Mexican_Onyx-1_(14917406766).jpg *Onyx — banded calcite deposit, translucent where the layers run thin. Photo: [John Rusk, CC BY 2.0](https://commons.wikimedia.org/wiki/File:2014-08-16-15.30.33_ZS_PMax_Mexican_Onyx-1_(14917406766).jpg)* ### 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** 5. **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. 6. **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. 7. **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** 8. **Ridged-multifractal creasing** (`offset − |noise|`, octave-weighted) to convert smooth bands into hard-edged fracture ridges where sharp veins are wanted (Nero Marquina). 9. **Voronoi F1 grain sparkle** in the matrix for calcite crystallinity; tie a faint specular sparkle to it. 10. **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). 11. **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. 12. **Fossil/inclusion layer** textured separately from veins (non-crystalline), per Bishop's practice, for limestones. ### Key references (authors, years, links) - Perlin, "An Image Synthesizer," SIGGRAPH 1985 — history.siggraph.org / [DOI 10.1145/325334.325247](https://doi.org/10.1145/325334.325247); GPU Gems Ch. 5 (developer.nvidia.com). - Perlin, "Improving Noise," SIGGRAPH 2002. - Ebert, Musgrave, Peachey, Perlin, Worley, *Texturing & Modeling*, 3rd ed., 2003. - Quílez, "domain warping" & "voronoise" — iquilezles.org/articles/warp. - Worley, "A Cellular Texture Basis Function," SIGGRAPH 1996 — [DOI 10.1145/237170.237267](https://doi.org/10.1145/237170.237267). - Turk 1991; Witkin & Kass, "Reaction-Diffusion Textures," SIGGRAPH 1991 — [DOI 10.1145/127719.122750](https://doi.org/10.1145/127719.122750); Turing 1952. - Runions et al., "Modeling and Visualization of Leaf Venation Patterns," SIGGRAPH 2005; Runions, Lane, Prusinkiewicz 2007 — algorithmicbotany.org. - Bridson, Hourihan & Nordenstam, "Curl-Noise for Procedural Fluid Flow," SIGGRAPH 2007 — cs.ubc.ca. - Jensen et al., "A Practical Model for Subsurface Light Transport," SIGGRAPH 2001; RenderMan subsurface docs; Zucconi "Fast Subsurface Scattering." - Lagae et al., "A Survey of Procedural Noise Functions," CGF 2010; MDPI "Survey of Procedural Methods for 2-D Texture Generation," 2020. - Substance Designer marble breakdowns — 80.lv (Norman Bishop; "Creating Marble"); Adobe Substance forums. - Ramsay 1980 crack-seal; stylolite geology (Britannica; Park & Schot 1968). - Abu El-Rus et al., "A new look on Imperial Porphyry," Int. J. Earth Sci. 2018 ([DOI 10.1007/s00531-018-1604-z](https://doi.org/10.1007/s00531-018-1604-z)). - Building Conservation "Trompe L'oeil Marble"; Mau 1882 Pompeian styles; Opificio delle Pietre Dure (Wikipedia); scagliola (Camera di Commercio di Firenze / Google Arts & Culture; Carpi/Fassi). ## Caveats - **Source quality varies.** Foundational algorithms (Perlin, Worley, Witkin-Kass, Runions, Bridson, Jensen) are peer-reviewed SIGGRAPH/ACM papers. Faux-marbling rules and Substance recipes come from practitioner sources (blogs, forums, tutorials) — reliable as craft knowledge but not academic. Stone-vendor geology is commercially motivated; used for descriptive/visual language, corroborated against geology sources (Sandatlas, Wikipedia, peer-reviewed Portoro/Imperial Porphyry papers) where possible. - **A resolved terminology point:** Imperial Porphyry is igneous (phenocrysts in groundmass, no veins); Portoro, Nero Marquina, and verde antico are *not* true metamorphic marbles (bituminous/micritic limestones and serpentinite breccia respectively); onyx/alabaster is a chemical calcite deposit. Treating them all as "marble veins" is the classic modeling error. - **Unresolved discrepancy:** the geological age of Nero Marquina is given as Cretaceous by some sources and Jurassic by others. - **Unverified quote:** the "Vorocracks marble" Shadertoy quotes were drawn from search-index snippets (the page blocked direct fetch); verify verbatim before relying on them. - No canonical single "why procedural marble looks fake" essay exists; that section is synthesized across multiple partial sources.