Materials
The optical constants Pleochroma ships built in, and where each one comes from.
1Dispersion chart
Each line is one material's refractive index n(λ) across the visible spectrum, from violet (380 nm, left) to red (780 nm, right), drawn from the same coefficients as the table below, and colored by wavelength. The index always falls toward the red, and the steeper the line, the stronger the dispersion and the fire. The dot marks nD at 589 nm, the value usually quoted for a gem. All materials share one scale, so switching between them shows where each one sits.
- Material
- Diamond (C)
- Crystal system
- Cubic (Isotropic)
- Optical character
- Isotropic
- n_D (589 nm)
- 2.4173
- Dispersion (n_F − n_C)
- 0.0256
- Abbe number (V_d)
- 55.3
- Birefringence (Δn)
- 0.0000 (none)
- Specific gravity
- 3.52
Exceptional brilliance and adamantine luster with intense fire. The reference isotropic gemstone.
2The 38 built-in materials
All figures below are read from crates/pleochroma/src/optics/materials/ (one file per group of species).
n_D and dispersion (Δn, F−C) come from each material's own source
comment: a primary Sellmeier/Cauchy fit where one exists in the optics
literature, or a value derived from two or more corroborating
gemological references where it does not — the source file documents
which for every row. Birefringence is birefringence_delta
as stored (n_e − n_o for uniaxial materials, the signed or unsigned
total spread for biaxial ones, per the field's own doc comment).
| Material | Crystal system | Optical character | n_D | Dispersion (F−C) | Birefringence |
|---|---|---|---|---|---|
| Diamond | Cubic | Isotropic | 2.41726 | 0.0256 | 0.0000 |
| Sapphire | Trigonal | Uniaxial − | 1.76808 | 0.0106 | −0.0081 |
| Ruby | Trigonal | Uniaxial − | 1.76808 | 0.0106 | −0.0081 |
| Emerald | Hexagonal | Uniaxial − | 1.5791 | 0.0082 | −0.0060 |
| Zircon (high) | Tetragonal | Uniaxial + | 1.9250 | 0.0226 | +0.0590 |
| Alexandrite | Orthorhombic | Biaxial + | 1.74273 | 0.0101 | +0.0076 |
| Topaz | Orthorhombic | Biaxial + | 1.62718 | 0.0082 | +0.0080 |
| Spinel | Cubic | Isotropic | 1.71610 | 0.0118 | 0.0000 |
| Quartz | Trigonal | Uniaxial + | 1.54421 | 0.0078 | +0.0091 |
| Tourmaline (elbaite) | Trigonal | Uniaxial − | 1.63941 | 0.0099 | −0.0210 |
| Tanzanite (heated) | Orthorhombic | Biaxial + | 1.70086 | 0.0174 | +0.0130 |
| Synthetic moissanite | Hexagonal | Uniaxial + | 2.64743 | 0.0635 | +0.0415 |
| Cubic zirconia | Cubic | Isotropic | 2.15846 | 0.0346 | 0.0000 |
| Aquamarine | Hexagonal | Uniaxial − | 1.57700 | 0.0082 | −0.0060 |
| Morganite | Hexagonal | Uniaxial − | 1.57700 | 0.0082 | −0.0060 |
| Chrysoberyl (yellow) | Orthorhombic | Biaxial + | 1.746 | 0.0100 | +0.0076 |
| Amethyst | Trigonal | Uniaxial + | 1.54421 | 0.0078 | +0.0091 |
| Citrine | Trigonal | Uniaxial + | 1.54421 | 0.0078 | +0.0091 |
| Ametrine (color zoned) | Trigonal | Uniaxial + | 1.54421 | 0.0078 | +0.0091 |
| Pyrope garnet | Cubic | Isotropic | 1.714 | 0.0127 | 0.0000 |
| Almandine garnet | Cubic | Isotropic | 1.790 | 0.0139 | 0.0000 |
| Spessartine garnet | Cubic | Isotropic | 1.800 | 0.0156 | 0.0000 |
| Color-change garnet (pyrope-spessartine) | Cubic | Isotropic | 1.760 | 0.0145 | 0.0000 |
| Grossular garnet (tsavorite) | Cubic | Isotropic | 1.734 | 0.0162 | 0.0000 |
| Andradite garnet (demantoid) | Cubic | Isotropic | 1.887 | 0.0330 | 0.0000 |
| Peridot | Orthorhombic | Biaxial + | 1.654 | 0.0116 | +0.0360 |
| YAG | Cubic | Isotropic | 1.83265 | 0.0158 | 0.0000 |
| GGG | Cubic | Isotropic | 1.970 | 0.0450 | 0.0000 |
| Benitoite | Hexagonal | Uniaxial + | 1.757 | 0.0261 | +0.0470 |
| Andalusite | Orthorhombic | Biaxial − | 1.634 | 0.0093 | 0.0100 |
| Opal (body color) | Amorphous* | Isotropic | 1.45 | 0.0010 | 0.0000 |
| Glass (Schott N-BK7) | —† | Isotropic | 1.51672 | 0.0081 | 0.0000 |
| Glass (Schott F2) | —† | Isotropic | 1.61989 | 0.0171 | 0.0000 |
| Rutile | Tetragonal | Uniaxial + | 2.613 (o) / 2.909 (e) | 0.164 (o) / 0.207 (e) | +0.2957 |
| Precious opal (white) | Amorphous* | Isotropic | 1.45 | 0.0010 | 0.0000 |
| Precious opal (black) | Amorphous* | Isotropic | 1.45 | 0.0010 | 0.0000 |
| Labradorite | Triclinic | Biaxial + | 1.5625 | 0.0070‡ | +0.0080 |
| Moonstone | Monoclinic | Biaxial − | 1.523 | 0.0070 | 0.0080 |
*Opal is a mineraloid with no true crystal structure; the
source code stores Cubic as a placeholder for "isotropic,"
not a mineralogical claim — its own comment says so explicitly.
†The two reference optical glasses are amorphous, included as
isotropic calibration materials rather than gemstones.
‡No measured dispersion was found for labradorite; the
entry borrows the size of moonstone’s (B−G 0.012) as a
placeholder.
Stones whose look comes from the inside
The last four rows are the host optics of stones that owe their look to what is inside them: Precious opal (white), with a pale body and a milky veil, Precious opal (black), with a dark neutral body, Labradorite and Moonstone. The play-of-color of opal, the schiller of labradorite and the adularescence of moonstone are not part of the material but a choice of the design, made in the Stone tab, so the same material can be shown plain or with its effect. The older Opal row is the plain body-color opal and is unchanged. The effects, the silk presets of the other materials and the surface finish of a facet are described on the surface finish, silk and play-of-color page.
A refractive-index curve for each ray
Most birefringent materials give the ordinary ray (or the middle ray of a two-axis crystal) its own dispersion and add the birefringence as one constant. Where a published curve exists for the other rays, the renderer uses the curve:
- Sapphire and ruby: the extraordinary ray of Malitson and Dodge (1972). The index of the extraordinary ray lies 0.0085 below the ordinary one at 400 nm and 0.0080 below at 700 nm, 0.0081 at the sodium line, the figure in the table.
- Synthetic moissanite: the 6H extraordinary ray of Wang (2013).
- Alexandrite and chrysoberyl (yellow): the alpha and gamma rays of Walling (1980). Chrysoberyl takes the published fit, so its total birefringence is +0.0076 and no longer +0.0090.
- Benitoite: a separate Cauchy curve for each ray, with the ordinary ray’s dispersion set to the published 0.039 and the extraordinary ray’s 0.046.
- Quartz, amethyst, citrine, ametrine and rutile already had one.
The remaining birefringent built-ins (zircon, tourmaline, the beryls, topaz, tanzanite, peridot, andalusite, labradorite and moonstone) keep a constant offset, because no per-ray dispersion was found for them. Because the direction in which the extraordinary ray is displaced now follows the index at each wavelength, the doubled images of a stone separate a little by color.
Where each material’s color comes from
A built-in material’s color is a set of absorption bands, each with a position, a width and a strength, and a pleochroic material has one set per ray direction. The colors of nine built-ins are fitted to published measured absorption spectra, and their bands are Gaussian in energy (wavenumber). Amethyst, Citrine and Tourmaline keep their earlier data.
- Fitted to published measured spectra: Ruby and Sapphire (GIA cross-section data for the Cr3+ and Fe2+–Ti4+ bands), Emerald (Caltech spectrum GRR 3570), Peridot (Caltech olivine spectra along the three principal rays), Spessartine (Caltech GRR 43), Tsavorite (Caltech GRR 229), Demantoid (GIA 2952, from the Caltech server), Aquamarine (two polarized Caltech spectra of GRR 1488) and Tanzanite, heated (three polarized Caltech spectra of the blue zoisite GRR 2292). Each band set is a bounded least-squares fit to the measured curve.
- Earlier data, hand-set wavelength bands: Amethyst, Citrine and Tourmaline. Ametrine is Amethyst and Citrine in two zones, described below.
Tanzanite is the heated, violet-blue stone sold under that name. It has three polarized absorption sets (alpha, beta, gamma), fitted to a naturally blue zoisite crystal that lacks the band heating removes. Alpha is the darkest and most purplish ray, beta is blue and gamma is the lightest. Aquamarine has its c axis in the table plane, as Tourmaline does, so a stone seen face-up shows the blue ray and reads light blue; with the axis along the view it would show the nearly colorless ordinary ray.
Color variants and pleochroism
Each built-in material comes with named color variants: Pink and Yellow for a sapphire, Rubellite and Verdelite for a tourmaline, Cape Yellow and Blue for a diamond, and so on. A variant is a complete absorption spectrum for every direction through the crystal, not a single tint, so a pleochroic stone keeps its different colors in different directions when you pick one. Its refractive index, dispersion, birefringence and crystal axis stay as they are, and the choice belongs to that design alone: a variant never becomes the material’s default. A one-axis crystal (sapphire, tourmaline, quartz, beryl) has two colors, one along the crystal axis and one across it; a two-axis crystal (tanzanite, alexandrite, topaz, andalusite) has three, alpha, beta and gamma. That is why the color list of a pleochroic stone offers no generic one-color presets, and why the custom color editor has one row for each direction.
Many of the built-in variants are fitted to measured absorption spectra of the variety, mostly taken with polarized light (the Caltech Mineral Spectroscopy Server, the GIA studies of the causes of color in corundum, and papers on individual gems); the others are built from published band positions. A variant is marked Estimated (in the note on the entry and in the Color Variants section) when its spectrum is not a measured one of that variety or its strength was chosen for a typical face-up color, which is true of almost all of them. Each one keeps its sources. The same beryl color (Heliodor, Red Beryl, Goshenite) is offered for Aquamarine, Emerald and Morganite; it is defined relative to the crystal axis, and each material’s own default axis decides which direction you see face-up, so the same variant looks different on the three. You can save your own from the custom color editor (Save as Variant…); they are listed for that material only and are managed in the Material Editor’s Color Variants section (rename, duplicate, delete). A design keeps its own copy of the variant it uses, so it looks the same on another computer and does not change when the variant is edited later. A design saved before variants keeps its color as it was, and on a pleochroic material the program offers to convert it to a variant or a per-direction color. The same variants color the zones of a color pattern; the web app has the same list and editor, and the mobile app can pick a variant.
Ametrine, a color-zoned built-in
Ametrine is the one built-in material whose color changes across the stone. It models the bicolor quartz of the Anahí type, where amethyst and citrine grow side by side and a cut stone usually shows one straight boundary between a purple half and a yellow-orange half. The built-in material has exactly that: amethyst on one side of the plane through the stone’s centre that contains the table normal, citrine on the other, with a sharp boundary. Its optics (index, dispersion, birefringence) are those of quartz and citrine, in the table above. Pick it as the design’s Material on the Stone tab, or in the Live Render. The boundary is fixed in the design’s frame, so seen face-up the line runs through the centre along the design’s Z axis, and the facets decide what the two halves do.
In the Material Editor, the Color Pattern section shows both halves as swatches, and saving Ametrine under a new name makes a custom material that keeps both zones, which you can then edit as a color pattern. A zoned material’s color is its zones, so a design’s Body Color and the Live Render Color control are greyed out for it. The GPU renders Ametrine when the stone has no inclusions; with inclusions it is traced on the processor. A remote worker of an older version that does not know zones draws the stone on this computer instead. Not modelled are the six-sector pinwheel of a whole crystal section and the slightly diffuse boundary of natural material. Color zones in general, and how to fit them to a piece of rough from photos, are described in the rough color section of the studio page.
3Alexandrite's color change
Alexandrite's chromium chromophore creates two transmission windows — one blue-green near 500 nm, one deep red near 680 nm — separated by a strong absorption valley around 580 nm. Daylight, rich in blue-green photons, favours the 500 nm window; incandescent light, rich in red photons, favours the 680 nm window. Because this is a genuine two-window spectral effect rather than a color swap, it falls directly out of Pleochroma's per-wavelength transport rather than needing a special case. Alexandrite is also biaxial, so the effect is evaluated per direction: three independent absorption spectra along its α, β, γ axes.
Both renders: 41.029B FVS-65 (Long Octagon), 1920 × 1080, 32 768 samples per pixel, grey backdrop card. The second uses a different, warmer light (the export file does not record which); the stone and the sample count are the same.
4Sapphire and ruby dichroism
Corundum (sapphire, ruby) is trigonal, uniaxial negative. Its ordinary
and extraordinary rays carry distinct absorption bands — a real,
measured shift (roughly 580 nm vs. 700 nm for the Fe²⁺–Ti⁴⁺
charge-transfer band behind blue sapphire's color; see the source
comment on the Sapphire entry in materials/diamond_through_emerald.rs
for the citation). Cutters orient the table facet perpendicular to the
c-axis specifically to show the more saturated ordinary-ray color
face-up.
5High dispersion and extreme birefringence
Rutile and synthetic moissanite sit at the edges of what the renderer's
Fresnel and dispersion code has been verified against. Rutile's
birefringence (+0.296) is the largest of any built-in material, and its
dispersion (Δn of 0.164 for the ordinary ray and 0.207 for the
extraordinary ray, after DeVore 1951) is the largest too. Every uniaxial
material, not only rutile, goes through the exact closed-form uniaxial
Fresnel solve (optics/raytracer/uniaxial_fresnel/) at its
entry and internal interfaces, except where the wave normal lies within a
small angle of the optic axis and the general scalar Fresnel path takes
over. What sets rutile apart is how far that solve is stressed: it is the
Tier 3 image-comparison material used to catch CPU/GPU divergence in it.
Most uniaxial materials derive the extraordinary ray from the ordinary
curve plus a constant birefringence offset; quartz, amethyst, citrine,
ametrine, rutile, sapphire, ruby, synthetic moissanite and benitoite carry
a separate extraordinary-ray curve, and alexandrite and chrysoberyl carry
alpha and gamma curves. Moissanite's dispersion
(Δn ≈ 0.064) is more than double diamond's.
6Custom materials
The desktop studio's Material Editor dialog (the
pencil button next to the live viewport's Render Material dropdown)
builds a custom material at runtime via
GemMaterial::new_custom
(crates/pleochroma/src/optics/materials/custom.rs), which takes a
name, mean refractive index, an F−C dispersion delta, a birefringence
delta, and an RGB absorption tint, and fits a 2-parameter Cauchy curve
to the requested dispersion at the sodium D and Fraunhofer F/C lines.
Saved custom materials are persisted to a custom_gem_materials
table in the same facet_diagrams.sqlite database the app
already uses for designs, via pleochroma-vault's
CustomMaterialRow and Database::save_custom_material
— and, when a design uses the material, a snapshot of its numbers is
also written into that design's .psdd file, so the
design still opens with its real optics on a machine whose library has
no such material. This is a separate
feature from Retarget, which proposes new facet angles
for an existing design in a different material rather than authoring a
new material (see the studio page).
The editor offers two ways to describe the refractive-index curve. In
Simple mode two sliders set the index at the sodium D
line (1.30 to 3.20) and the F−C dispersion (0.000 to 0.210), and
the editor builds the 2-parameter Cauchy curve described above. In
Coefficients mode you type a published fit instead: a
3-term Sellmeier, a 1-term Sellmeier, or a Cauchy fit with A, B and C
(GemMaterial::new_custom_with_dispersion). A
Copy from list fills the fields of the 3-term Sellmeier
and Cauchy models from a built-in material as a starting point. The stone is then traced
with exactly that curve, on the GPU and the CPU alike, and a remote
worker receives the whole material, coefficients included.
A live readout shows nD, nF, nC, the F−C dispersion and the Abbe number, with a plot of the index against wavelength from 380 to 780 nm. The curve is validated before it can be saved: finite coefficients, no Sellmeier resonance between 300 and 800 nm, and an index above 1 across the visible band (the checks are listed in section 2 of the physics page). Amber warnings, which leave Save available, mark an index that rises with wavelength, an Abbe number outside 5–120, or no dispersion at all. The coefficients are stored with the material in the library and, when a design uses it, in the design file. An RI override on a design replaces the whole curve with a single-index curve at the typed number, for that design only. The browser app and older versions of the desktop studio do not know the coefficients: they show the material with a Cauchy curve built from nD and the F−C figure, which is close but not identical.
A material that is not isotropic also has a Per-Axis Curves row in the editor: Curves types a Sellmeier or Cauchy fit for the extraordinary ray of a one-axis material, or the alpha and gamma rays of a two-axis one, with the same fields and checks as the main curve. Up to four inclusion families (needles, plates or random needles along the crystal axis, in the basal plane, along the alpha axis or tilted) give the material its own silk, and a Play-of-Color section lets it imitate an opal or a labradorite. All of these are stored with the material and written into a design only when used.
The Material Editor is not the only way to change a stone's color. A Color control in the Live Render toolbar, next to Render Material, shows the stone in another color without making a custom material. It offers the same list as the Stone tab’s Body Color: the material’s own color, its color variants and the ones you saved, the nine ready-made colors for a material that has one color in every direction, and Custom Color…, which opens the per-direction editor described below. For the design open in the editor, with the render linked to it, a pick becomes that design’s own color (one undo step) and the control shows the variant’s own name and swatch; for anything else it changes the view only, and the app remembers it. The stone keeps its refractive index and dispersion, and a variant or a Custom Color keeps its different colors in different directions, so a pleochroic stone stays pleochroic. A pleochroic material lists no one-color presets; a stone with an old single color on such a material shows a Legacy row that leaves the picture as it was.
Any color can also be described as a Custom Color with three sliders: tone (how light or dark), saturation (how rich) and hue (the basic color, in degrees around the color wheel), the L*C*h description of a color. The same editor opens from three places: Custom… in the Body Color box of Design settings, Pick… in the Material Editor (the color is saved with the material, and a custom material keeps it), and Custom Color… in the Live Render Color list. Because the same absorption looks deeper in a larger stone, the editor shows the color as four swatches, at 3, 5 and 10 mm and This stone (the design’s own size), and the design keeps it as an absorption spectrum per millimetre, so a larger stone renders deeper and a smaller one lighter. A badge says Reachable with the color difference, or, in amber, that the color is not fully reachable at this size and how far the closest reachable color is; very rich or very light-and-rich colors are not all reachable. For a stone whose crystal shows different colors in different directions the editor has one such color for each direction (Along the Axis and Across the Axis, or Alpha, Beta and Gamma), with a face-up swatch and one swatch per direction, and Save as Variant… keeps the result. Older versions show a close single-color version of it; the web app has the same editor.
The app's material pickers are built in two places, both from
GemMaterial::all_materials(). The studio's Design Settings
Material combo and the New Design dialog's Starting Material combo start
from the MaterialCatalogue
(crates/pleochroma-cut-core/src/material/catalogue.rs):
“(none)”, then all 38 built-in materials above in
all_materials()'s own order; Design Settings then appends
the custom materials you have saved, and a “Custom RI…”
entry. The Live Render viewport's Render Material dropdown does not use
the catalogue: it is built in
apps/pleochroma-cut/src/gui/startup_settings.rs as the same
38 built-ins sorted alphabetically (case-insensitive), with your saved
custom materials appended after them. A built-in species offered by one
picker is therefore offered by the others, though the order differs.
An imported .asc file carries only a bare refractive
index, never a species name. When a design's material is otherwise
unset, the studio looks for the nearest built-in preset within 0.02 of
the design's effective RI and shows it as a labelled guess — e.g.
"Sapphire? (from RI 1.76)" — never as a recorded fact, with a
Set material button next to it that writes the name in
as an ordinary, undoable edit. If nothing built in is within tolerance,
no guess is shown at all.
Color patterns
A custom material can have zones of different colors, such as a pink core
inside a green rim (a watermelon tourmaline), two halves, bands or sectors.
The Material Editor has a Color Pattern section with
Add Pattern…, Edit Pattern… and
Remove Pattern; it opens the Color Pattern Editor,
a window of its own. There you start from a template (Uniform, Bicolor,
Tricolor, Banded, Watermelon, Reverse Watermelon, Core and Rim, Split or
Sectors) or a saved preset, pick the color of each zone in the usual color
editor, and set the pattern’s axis, whether its sizes scale with the
stone width or stay fixed in millimeters, and how sharp the boundaries are.
A pattern has a base zone and at most four more. A zone’s
Colors menu offers One Color, Along and
Across (an Along color seen looking along the crystal axis and an
Across color that is blended in looking across it) and Alpha, Beta and
Gamma, and puts first the form of the stone’s own crystal; more than
one color needs a birefringent material (a crystal system other than Cubic
and a birefringence other than 0). A zone can also take a
color variant of the stone’s material as its
color. A pattern shows in the Path-Traced views, in render
jobs and on remote workers that support zoning; the Ray-Traced view shows the
base color. A design on a custom material with a pattern carries the pattern in its
.psdd file, so it opens with the zones on another computer.