ConstComposable casing stylization effects for CasingMaterial. Every field is
optional and independent; the procedural surface-detail layers (granular,
brushed, scratches) simply sum. Strengths default to 0 (off) unless noted.
Optionalbrushed?: {Directional fine grain (many thin parallel ridges).
Optionalangle?: numberGrain direction in radians (0 = along the trajectory axis; non-zero angles reintroduce a faint seam on a full shell). Default 0.
Optionalfrequency?: numberCells per world (object-distance) unit. Default 2.
Optionaloctaves?: number1-5 fbm octaves. Default 3.
Optionalsharpness?: number0-1 line thinness. Default 0.5.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
Optionaluniformity?: number0-1 blend from an irregular grain (0) to regular, evenly-spaced flutes (1). Default 0.
OptionaldetailQuality?: number0-1 performance vs. quality of the procedural surface detail (a fill-rate knob; off-effects always cost nothing regardless). Lower = cheaper: fewer weathering fbm octaves (2 at 0 .. 4 at 1) and the coarse/long scratch family only runs at >= 0.66. 1 = full-detail reference. Default 0.6.
OptionaledgeShading?: { strength?: number; width?: number }Darkening at each section's own top/bottom edges.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
Optionalwidth?: numberDistance in metres the darkening reaches from each edge, independent of section length. Default 0.2.
Optionalgranular?: { anisotropy?: number; frequency?: number; octaves?: number; strength?: number }Isotropic value-noise bumps.
Optionalanisotropy?: number0-1 stretch of the cells along the trajectory axis. Default 0.
Optionalfrequency?: numberCells per world (object-distance) unit. Default 2.
Optionaloctaves?: number1-5 fbm octaves. Default 3.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
Optionalscratches?: {Sparse, hair-thin surface scuffs that glint under changing light (their relief is kept very shallow - visibility comes from a localized polish, not depth).
Optionalangle?: numberScratch direction in radians (0 = along the trajectory axis). Default 0.
Optionaldensity?: number0-1 how many scratches survive. Default 0.4.
Optionalfrequency?: numberCells per world (object-distance) unit. Default 10.
Optionallength?: numberAverage scratch length multiplier (>0). Default 0.6.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
Optionalwander?: number0-1 how much the scratch direction drifts. Default 1.
Optionalwidth?: number0-1 groove width, frequency-independent (world-scaled, hair/needle-thin: ~0.02..0.12mm half-width). Default 0.15.
OptionalsectionVariation?: number0-1 per-section wear variation so adjacent telescoping strings read apart by looking differently worn rather than by a colour/value ramp. Default 0.
Optionalsilhouette?: { power?: number; strength?: number }View-space silhouette darkening that outlines each shell, helping nested strings read apart (especially under slicing / auto-slice).
Optionalpower?: numberExponent tightening the rim toward the edge (higher = tighter). Default 3.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
Optionalweathering?: { resistance?: number; scale?: number; strength?: number }Procedural wear/tear/spill (no textures), pinned in world space.
Optionalresistance?: number0-1 per-material multiplier (1 = full wear, 0 = none) so a preset such as the matte shoe can resist the weathering. Default 1.
Optionalscale?: numberNoise frequency in cells per real-world metre (lower = larger, sparser smears). Default 1.5.
Optionalstrength?: number0-1 strength (0 = off). Default 0.
The component-level default CasingEffects applied globally to every section (a section's per-face
materialOptions.*.effectscan override individual sub-effects on top of this). Tuned to help adjacent/nested strings read apart.