1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//! A stone together with the finish of each of its facets.
//!
//! [`StoneGeometry`] is the geometry every tracer shares (planes and tools); the render tracer
//! takes the facet finishes beside it, as a separate list. The tilt sweeps take the same pair,
//! bundled as a [`FinishedStone`], so that a frosted facet changes the light the sweep sees the
//! way it changes the render. The metrics that ignore finishes (the live HUD numbers, the
//! optimiser's scoring, the Compare deltas) keep taking a plain [`StoneGeometry`].
use crate::;
/// A stone's planes and tools plus its per-facet finishes.
///
/// `finishes[i]` is the finish of plane `i`, and of tool `k` at index `planes.len() + k`, like
/// the finish slice of `trace_spectral_ray_with_finish_soa_geom`; a missing entry is polished.
/// An empty list, and a list with no frosted facet, both mean the polished stone and give
/// bit-identical results to the plain-geometry entry points.