import type { BodyConfig } from '../../types/body.types'; import { type RingVariation } from '../shells/ringVariation'; /** * Complete visual variation for a planet — covers every shader parameter * exposed by the procedural materials. Generated once from a deterministic * seed (`config.name`) so appearance is identical across sessions and * across server / client. * * Physics (BodyConfig) sets whether features exist and their maximum values. * Variation sets the exact visual expression within those constraints. */ export interface BodyVariation { noiseSeed: [number, number, number]; noiseFreq: number; /** Multiplier on physics roughness — makes surface smoother or rougher. */ roughnessMod: number; /** Multiplier on physics heightScale — flatter or more dramatic relief. */ heightMod: number; /** Multiplier on physics craterDensity. */ craterDensityMod: number; /** Multiplier on physics craterCount. */ craterCountMod: number; /** Direct randomized wave layer amount — independent from physics. */ waveAmount: number; /** Direct randomized wave scale — independent from physics. */ waveScale: number; /** Color temperature shift: 0=cooler, 0.5=neutral, 1=warmer. Applied to colorA/colorB. */ colorMix: number; /** Overall brightness for rocky/metallic palette. */ luminance: number; /** * 0–1 lerp factor between the shader's `crackAmount` min / max. `0` disables * the effect entirely — the caller (game logic) pushes a value \> 0 when it * wants the planet to display crust fractures. Default `0`. */ crackIntensity: number; crackWidth: number; crackScale: number; crackDepth: number; crackColor: string; crackBlend: number; /** Direct metalness value — oxidisation / surface purity variation. */ metalness: number; /** * Lava intensity in `[0, 1]`. `0` disables the lava layer; the caller pushes * a value \> 0 when it wants the planet to display molten flows. Default `0`. */ lavaIntensity: number; lavaEmissive: number; lavaScale: number; lavaWidth: number; /** Lava tint (#hex). Defaults to a neutral dark red; caller overrides for hotter / cooler looks. */ lavaColor: string; gasBandSharpness: number; gasBandWarp: number; gasJetStream: number; gasTurbulence: number; gasCloudDetail: number; gasColorMix: number; gasLuminance: number; gasCloudAmount: number; gasCloudColor: string; /** Ring system when `config.hasRings` is true; null otherwise. */ rings: RingVariation | null; } /** * Generate complete deterministic visual variation for a planet. * Every shader parameter consumed by the procedural materials is covered. * * The variation is seeded purely from `config.name` — a body's visual identity * (rings, cracks, band offsets, noise domain) is intrinsic to the same seed * that drives its terrain and simulation, so two bodies with the same name * always render identically. * * @param config - Planet physics config (informs palette ranges + feature gates). */ export declare function generateBodyVariation(config: BodyConfig): BodyVariation; //# sourceMappingURL=bodyVariation.d.ts.map