/** * `soil` studio: a crack/moss ground-variation patch authored as a box volume — its XZ footprint is * the patch area, its top the ground height (same footprint convention as `grass_field`). Pure config * here (crack scale/intensity/color, moss coverage/color, seed + a footprint resolver); the Worley * (cellular) crack mask and FBM moss mask, injected via `onBeforeCompile` into a soil-patch material * built from the same noise machinery as the terrain detail material, live in the `shell` renderer. An * engine environment kind (like water/grass_field) so cracked, mossy ground is slider-authorable in * the editor and persisted in `editor.scene.json` — the #815 soil studio. */ import { type ParamSchema, type SceneKindObject } from "../scene/sceneKinds.js"; /** * The editor volume kind marking a box as a soil crack/moss patch. * @capability soil-patch editor-authorable terrain crack/moss material variation */ export declare const SOIL_KIND = "soil"; /** Fully-defaulted soil params parsed from a volume's `meta`. */ export interface SoilRules { /** Underlying dirt/soil base tint, hex. */ baseColor: string; /** Worley cell size in meters — larger cells read as bigger cracked-earth plates. */ crackScale: number; /** Crack-line color blended into the cell boundaries, hex. */ crackColor: string; /** Crack blend strength, 0..1. */ crackIntensity: number; /** Moss patch color, hex. */ mossColor: string; /** Fraction of the patch covered by moss, 0..1. */ mossCoverage: number; /** Seed string; same seed reproduces the same crack/moss layout. */ seed: string; } /** Soil defaults: sun-cracked dirt with light moss creep. */ export declare const SOIL_DEFAULTS: SoilRules; /** The soil parameter schema — drives the inspector and `meta` parse via the studio seam. */ export declare const SOIL_SCHEMA: ParamSchema; /** Parse a volume's `meta` into fully-defaulted soil rules. @internal */ export declare function readSoilRules(meta: Record | undefined): SoilRules; /** A resolved soil patch: world-space area center at ground height, footprint size (XZ), and rules. */ export interface ResolvedSoil { center: readonly [number, number, number]; size: readonly [number, number]; rules: SoilRules; } /** Resolve a soil volume into an area footprint (from box half-extents / radius) at the box base. @internal */ export declare function resolveSoilObject(object: SceneKindObject): ResolvedSoil | null; /** Registers the `soil` scene kind (schema + resolver). Called by {@link registerBuiltinSceneKinds}. @internal */ export declare function registerSoilKind(): void;