Phaser AE

Skymax

Pro packv3.0.0-42D and 3DBackdrop

A sky with weight: a physically based atmosphere, volumetric clouds you can fly through, cloud shadows on the ground, god rays through the gaps and a moonlit night with real stars. It lights the 3D scene beneath it, and it can also stand behind a 2D game.

This is a Pro pack. Upgrade to Phaser Pro to use it in your games.See Phaser Pro →

Released October 14, 2026 · updated October 19, 2026

Skymax: a screenshot of its demo
A note about these graphics

Expansion packs don't come with graphics. This screenshot is one way of drawing what the pack does, made for its demo: none of the sprites, tiles or backgrounds in it are in the pack.

That's by design. A pack is a game's logic, mechanics and effects, and it works with whatever art you give it. Some packs draw effects, backdrops or 3D scenes of their own, but none carries a game's sprites.

So the look is yours. Make the art on phaser.io, bring your own, or let your agent draw it in code: the same pack can look like anything.

The pack

skymax

function skymax(opts: SkymaxOptions = {}): Pack<{ skymax: SkymaxApi }>

A physically based sky and volumetric clouds, with a day clock, presets and a baked env map.

Functions

applySkyPatch

function applySkyPatch(target: SkyParams, patch: SkyParamsPatch): void

Merges a patch into live params in place, group by group. Unknown keys are ignored.

bakeAmbientRadiance

function bakeAmbientRadiance(view: readonly number[], sun: readonly number[], turbidity: number, ms: number, rayleigh: number): [number, number, number]

Single-scatter sky radiance toward view for a sun at sun, isotropic phases, per unit solar irradiance.

bakeAmbientSky

function bakeAmbientSky(sun: readonly number[], sunIntensity: number, turbidity: number, ms: number, rayleigh: number, groundBounceAlbedo: Rgb): AmbientSky

Bakes the ambient terms for the cloud lighting: zenith and horizon fill, sun tint, and the ground bounce (Lambertian re-emission of direct sun plus cosine-weighted diffuse skylight, tinted by the cloud's own ground albedo).

bakeSunTransmittance

function bakeSunTransmittance(sun: readonly number[], turbidity: number, rayleigh: number): [number, number, number]

Per-channel atmospheric transmittance at ground level along the sun direction; zero once the sun is under the horizon.

bayerCells

function bayerCells(size: number): Array<{ x: number; y: number }>

The Bayer visiting order for a square lattice: index i is the cell refreshed on frame i.

cloneSkyParams

function cloneSkyParams(p: SkyParams): SkyParams

Deep-copies a preset so a live sky can be edited without touching the bundled table.

createSkyNoise

function createSkyNoise(device: GPUDevice, opts: SkyNoiseOptions = {}): SkyNoise

Create the cloud-noise textures on device. The base-shape volume and its mips are built by compute passes submitted before this returns, so the views are safe to bind straight away; the weather map and blue noise are generated on the CPU and uploaded. Throws a RangeError for a baseRes other than 16, 32 or 64, or a weatherRes that is not a positive integer.

generateBaseShapeMips

function generateBaseShapeMips(res: number, profile: BaseShapeProfile = BASE_SHAPE_PROFILE): Uint8Array[]

The full CPU mip chain of a base-shape volume, mip 0 first, each level built from the one above with downsampleVolume until the edge reaches 1 texel.

generateBlueNoise

function generateBlueNoise(size = 64, seed = 0): Uint8Array

Void-and-cluster blue noise: size squared bytes holding (rank + 0.5) / size squared quantised to 256 even levels, so every byte value appears equally often. The tile is toroidal and repeats seamlessly. Sample it with nearest filtering: interpolating between texels destroys the blue spectrum. seed = 0 reproduces the reference tile; other seeds give a different but equally well-spread tile. Serial by nature, about 30 ms at 64.

generateWeatherMap

function generateWeatherMap(size: number, params: Readonly<WeatherParams> = DEFAULT_WEATHER): Uint8Array

The weather map on the CPU: size squared coverage bytes, row-major (row 0 is v = 0), one byte per texel. Coverage = clamp((mainMass - 0.5) * amplitude + 0.5) + (detail * 2 - 1) * strength + (coverage - 0.5), clamped to [0, 1]. Tileable in both axes. Deterministic for the same size and parameters.

packLightCone

function packLightCone(dir: readonly number[], stepSize: number, coneSpread: number, taps: number, out: Float32Array, o: number): void

Packs the light-cone taps for one light: tap 0 stays at the shaded point, later taps grow geometrically along the light and spiral out across a widening cone on a golden-angle pattern. Writes taps - 1 vec4s of (offset.xyz, stepLength) into out at o.

skyArc

function skyArc(time: number, latitude: number, azimuthDeg: number): SkyArc

The equinoctial diurnal circle for an observer at latitude: the sun rises due east at time 0.25, culminates due south at (90 - latitude) degrees, and the whole sky spins about the celestial pole. The moon rides the anti-solar point and the star panorama is spun by the same rotation.

sunFromAngles

function sunFromAngles(elevationDeg: number, azimuthDeg: number): [number, number, number]

Points a direction at the given angles in degrees: 0 elevation = horizon, azimuth 0 = +Z, 90 = +X.

Constants

ATMOSPHERE

const ATMOSPHERE: { readonly EARTH_R: 6371; readonly ATMO_R: 6471; readonly HR: 8; readonly HM: 1.2; readonly BETA_R: readonly [0.005802, 0.013558, 0.0331]; readonly BETA_M: 0.021; readonly MIE_EXT: 1.1; }

Rayleigh and Mie medium constants shared by the CPU bake and the shaders. Lengths km, coefficients per km.

CLOUD_MARCH

const CLOUD_MARCH: { readonly baseStepSize: 25; readonly stepConeFactor: 1.5; readonly maxOpticalDepthPerStep: 0.5; readonly maxSteps: 256; readonly lightMarchTaps: 6; readonly lightStepSize: 25; readonly lightConeSpread: 0.05; }

The on-screen cloud march budget: not tier-scaled.

DEFAULT_WEATHER

const DEFAULT_WEATHER: Readonly<WeatherParams>

The weather-map defaults the cloud march was tuned against.

FLUFFY

const FLUFFY: SkyParams

High midday sun over soft, low-density cumulus with a broad, airy cloud field.

HAZY

const HAZY: SkyParams

Thick haze under a high sun, a muted washed-out horizon.

HIT

const HIT: { readonly MISS: 65000; readonly MISS_THRESHOLD: 64000; readonly MAX: 60000; readonly SAMPLE_MIN_ALPHA: 0.002; readonly ALPHA_FULL_DEPTH: 0.05; }

Hit-distance encoding shared by the march, the temporal resolve and the composite. Metres, finite in f16.

MOONLIT_NIGHT

const MOONLIT_NIGHT: SkyParams

Deep predawn sky with a bright moon, sparse high clouds, and a visible star field.

PARTLY_CLOUDY

const PARTLY_CLOUDY: SkyParams

Scattered fair-weather cumulus under a high midday sun. The default sky.

PIXAR

const PIXAR: SkyParams

Rounded storybook puffs against a clear blue sky: tall, dense, bright-white cumulus with soft edges.

PLANET_RADIUS

const PLANET_RADIUS: number

Planet radius in metres, the frame the cloud shell curves in.

SKY_PRESETS

const SKY_PRESETS: Readonly<Record<SkyPresetName, SkyParams>>

The bundled presets by name.

SKY_QUALITY

const SKY_QUALITY: Readonly<Record<'low' | 'medium' | 'high' | 'ultra', SkyQuality>>

The built-in quality tiers.

STORMY_EVENING

const STORMY_EVENING: SkyParams

Tall storm deck under a low warm sun, with thick horizon-banked coverage and dense grey haze.

STUNNING_SUNSET

const STUNNING_SUNSET: SkyParams

Low warm sun reddening over a tall, softly-eroded convective deck.

THUNDERSTORM

const THUNDERSTORM: SkyParams

Deep cumulonimbus under heavy haze and a high, dim overcast sun.

Types

AmbientSky

interface AmbientSky

The four ambient terms the cloud shader reads, baked on the CPU whenever the sun or the medium moves.

  • zenith: [number, number, number] — Zenith diffuse-fill radiance, linear RGB, pre-multiplied by the sun intensity.
  • horizon: [number, number, number] — Toward-sun horizon diffuse-fill radiance, pre-multiplied by the sun intensity.
  • groundBounce: [number, number, number] — Ground-bounce upwelling fill on the cloud base, pre-multiplied by the sun intensity.
  • sunTransmittance: [number, number, number] — Per-channel sun tint at ground level, 0..1, NOT pre-multiplied.

CloudShadow3dBag

interface CloudShadow3dBag

What skymax publishes under ctx.backend['cloudShadow3d']: sun transmittance through the clouds over a box around the camera.

  • view: GPUTextureView — r16float, 1 = full sun, 0 = fully shadowed.
  • sampler: GPUSampler — Clamp, linear.
  • centerX: number — World x the map is centred on.
  • centerZ: number — World z the map is centred on.
  • extent: number — Half-width of the box in metres; u = (x - centerX) / extent * 0.5 + 0.5, v likewise on z.
  • strength: number — How much of the shadow to apply, 0..1.

Env3dBag

interface Env3dBag

What skymax publishes each frame under ctx.backend['env3d']: the sky baked to a mipped equirect, for anything reflective.

  • view: GPUTextureView — The equirect texture: u = atan2(z, x) / 2pi + 0.5, v = 0.5 - asin(y) / pi. Linearised display values.
  • sampler: GPUSampler — Repeat across, clamp down, trilinear.
  • strength: number — Reflection strength multiplier.
  • mips: number — How many mips the texture carries; roughness picks a level.

Rgb

type Rgb = readonly [number, number, number]

A linear-RGB colour as three numbers in 0..1 (or above, for radiance).

SkyArc

interface SkyArc

Where the sun and moon are and how bright the day is, for one instant of the clock.

  • sun: [number, number, number] — Unit vector toward the sun.
  • moon: [number, number, number] — Unit vector toward the moon (the sun's antipode).
  • daylight: number — 0 = full night, 1 = full day, eased across the twilight band at plus or minus 6 degrees.
  • starRotation: Float32Array — World-to-panorama rotation for the stars, row-major 3x3.

SkyAtmosphereParams

interface SkyAtmosphereParams

Atmospheric scattering and distance fog. Lengths in metres where a length is asked for.

  • rayleigh: number — Rayleigh scattering multiplier. 1 = physical Earth; higher deepens the blue and reddens a low sun. Default 1.
  • turbidity: number — Aerosol haze amount. 1 = very clear, 10 = heavy haze. Default 3.3.
  • mieDirectionalG: number — Mie forward-scattering asymmetry, 0..0.99. 0 = isotropic, 0.99 = strongly forward. Default 0.7.
  • mieScatteringStrength: number — Multiplier on the sun's forward aureole. 1 = consistent with turbidity. Default 1.
  • multipleScattering: number — Multi-scatter fill for the sky light reaching the clouds. 0 = single-scatter. Default 0.2.
  • skyMultipleScattering: number — Sky-dome multi-scatter strength. 0 = single-scatter dome, 1 = nominal. Default 0.5.
  • exposure: number — Scalar multiply on linear radiance before the tone map. Default 1.
  • groundAlbedo: Rgb — Ground albedo, linear RGB, tinting the sky's multiple-scatter bounce. Default (0.18, 0.17, 0.15).
  • fogDensity: number — Distance-fog fade rate. 1 puts the half-fogged point near 23 km; 0 disables the fog. Default 1.25.
  • fogFarFadeStart: number — Distance in metres where the far-fade band starts pulling geometry toward sky. Default 1,000,000.
  • fogFarFadeEnd: number — Distance in metres where geometry is fully sky. Default 1,100,000.

SkyBackgroundView

interface SkyBackgroundView

Independent sky camera for a 2D world; angles are degrees, altitude is metres.

  • yaw: number — Compass heading, 0 toward +Z. Default 180.
  • pitch: number — Elevation above the horizon. Default 15.
  • fov: number — Vertical field of view. Default 55.
  • altitude: number — Observer altitude. Default 60.

SkyCloudCirrusParams

interface SkyCloudCirrusParams

The high cirrus deck.

  • scale: number — World metres per cirrus-texture tile. Default 30,000.
  • strength: number — Opacity multiplier on the cirrus mask. 0 = off. Default 0.

SkyCloudFadeParams

interface SkyCloudFadeParams

Aerial perspective on the clouds and the far-field melt into sky.

  • hazeDensityScale: number — Aerial-perspective density multiplier. 1 = physical, higher = hazier, 0 = off. Default 1.
  • horizonMeltStart: number — Hit distance in metres where the horizon melt begins. Default 25,000.
  • horizonMeltEnd: number — Hit distance in metres where the horizon melt completes. Default 40,000.

SkyCloudHazeParams

interface SkyCloudHazeParams

The storm-haze deck, driven by the weather map on the cirrus plane.

  • scale: number — World metres per weather-map tile sampled for the haze deck. Default 40,000.
  • density: number — Opacity multiplier on the weather coverage. 0 = off. Default 0.

SkyCloudLightingParams

interface SkyCloudLightingParams

Cloud lighting: scattering albedo, powder, ambient fill, base shadow and the moon key.

  • scatteringAlbedo: number — Single-scattering albedo 0..1: 0 = black, 1 = lossless. Default 0.9.
  • powderStrength: number — Strength of the powder dark-edge term on direct sun light. Default 1.
  • ambientIntensity: number — Multiplier on the ground-tinted ambient fill. Default 0.6.
  • groundBounceAlbedo: Rgb — Albedo of the ground under the clouds, linear RGB. Default (0.18, 0.17, 0.15).
  • baseShadowStrength: number — Cloud-base darkening 0..1: 0 = lit bases, 1 = full shading. Default 0.
  • baseShadowHeight: number — Shell height fraction over which the base shadow eases off. Default 0.6.
  • moonGain: number — Gain on the moon-key lighting term. Default 1.

SkyCloudParams

interface SkyCloudParams

Every cloud group together.

  • shape: SkyCloudShapeParams — Shell geometry.
  • lighting: SkyCloudLightingParams — Scattering and phase.
  • wind: SkyCloudWindParams — Drift and evolution.
  • cirrus: SkyCloudCirrusParams — High cirrus deck.
  • haze: SkyCloudHazeParams — Storm-haze deck.
  • fade: SkyCloudFadeParams — Aerial perspective and horizon melt.

SkyCloudShapeParams

interface SkyCloudShapeParams

Cloud shell geometry: altitude, thickness, coverage and the noise that shapes it.

  • altitude: number — Altitude of the cloud base in metres. Default 1400.
  • thickness: number — Vertical thickness of the shell in metres. Default 2800.
  • density: number — Extinction coefficient per metre; higher reads more opaque. Default 0.048.
  • coverage: number — Coverage 0..1: 0 = clear sky, 1 = the full weather map. Default 1.
  • horizonCoverageStart: number — Distance from the camera in metres where the horizon coverage lift begins. Default 10,000.
  • horizonCoverageRamp: number — Distance in metres over which the lift ramps in past the start. Default 20,000.
  • horizonCoverageAmount: number — Extra coverage added at full ramp; may exceed 1 to fill gaps. 0 = off. Default 0.
  • edgeSoftness: number — Soft-edge half-width at the cloud base, as a shell height fraction. Default 0.05.
  • edgeSoftnessFalloff: number — Per-kilometre division of edgeSoftness above the base. 1 = constant. Default 1.
  • weatherScale: number — World metres per weather-map tile. Default 40,000.
  • baseScale: number — World metres per base-shape-texture tile. Default 8000.
  • erosionScaleBaseMultiplier: number — Erosion tile as a fraction of baseScale, 0..1, lower = finer. Default 0.5.
  • baseStrength: number — Multiplier across all base-shape channels. 1 = unchanged. Default 1.
  • erosionStrengthBase: number — Erosion strength at shell height fraction 0, 0..5. Default 1.
  • erosionStrengthPeak: number — Erosion strength at shell height fraction 1, 0..5. Default 1.
  • erosionShape: number — Erosion shape. 0 = billowy, 1 = wispy. Default 0.
  • baseWeatherStrength: number — Weather-map floor-carve strength. 0 = off. Default 0.
  • baseWeatherHeightStart: number — Shell height fraction where the floor carve is strongest. Default 0.05.
  • baseWeatherHeightEnd: number — Shell height fraction above which the floor carve has fully relaxed. Default 0.1.

SkyCloudWindParams

interface SkyCloudWindParams

Cloud wind: drift and noise evolution.

  • heading: number — Drift heading in degrees the clouds move toward. 0 = +Z, 90 = +X. Default 0.
  • speed: number — Horizontal drift speed in metres per second. Default 0.
  • evolutionSpeed: number — Noise-evolution speed in metres per second, churning the shapes in place. Default 0.
  • skew: number — Downwind cloud-top lean: metres of horizontal shift from shell base to top. Default 0.

SkyGodRaysParams

interface SkyGodRaysParams

God rays: light shafts marched against the cloud shadow map.

  • enabled: boolean — Whether god rays render. Default true.
  • strength: number — Master brightness on shaft radiance. Default 2.
  • sharpness: number — Contrast on sun visibility. 1 = raw, higher = crisper shafts. Default 2.
  • extinction: number — Haze extinction in 1/metres. Higher = shorter, denser shafts. Default 0.0002.
  • maxDistance: number — Far bound of the march in metres. Default 12,500.
  • moonGodRayScale: number — Shaft brightness multiplier while the moon is the light source. Default 0.4.

SkymaxApi

interface SkymaxApi

game.skymax.

  • setBackgroundView(view: Partial<SkyBackgroundView>): void — Update the independent 2D sky camera. Ignored by a 3D world camera.
  • readonly params: SkyParams — The live parameters. Edit fields in place; the sky follows next frame.
  • apply(patch: SkyParamsPatch): void — Merge a partial set of parameters.
  • preset(name: SkyPresetName): void — Replace everything with a bundled preset.
  • readonly presets: ReadonlyArray<SkyPresetName> — The bundled preset names.
  • time: number — Time of day 0..1; 0 midnight, 0.5 noon. Setting it puts the sun on its arc.
  • hour: number — The same clock in hours 0..24.
  • daySeconds: number — Seconds one day takes; 0 holds it.
  • sunDirection(): { x: number; y: number; z: number } — Unit vector toward the sun.
  • moonDirection(): { x: number; y: number; z: number } — Unit vector toward the moon.
  • readonly daylight: number — 0 = full night, 1 = full day.
  • readonly sunIntensity: number — The current sun radiance, after the twilight fade.
  • readonly ambient: AmbientSky — The ambient terms the clouds are lit by, from the last bake.
  • readonly exposure: number — The adapted exposure multiplier in force, 1 when auto exposure is off.
  • autoExposure: boolean — Whether the exposure adapts to the sky.
  • quality(tier: SkyQualityName): void — Switch quality tier.
  • readonly qualityLevel: SkyQualityName — The active tier.
  • clouds: boolean — Whether the clouds render.
  • godRays: boolean — Whether god rays render.
  • cloudShadow: boolean — Whether the cloud shadow bakes.
  • driveLighting: boolean — Whether the sky drives render-3d's lighting.
  • refresh(): void — Ask for the env map and the cloud history to rebuild on the next frame (after a big jump).
  • readonly stats: { readonly sourceWidth: number; readonly sourceHeight: number; readonly historyWidth: number; readonly historyHeight: number; readonly envWidth: number; readonly lutBakes: number; readonly envBakes: number } — Cloud march and reconstruction sizes, for a profiler.

SkymaxOptions

interface SkymaxOptions

Manifest options for skymax. All optional.

  • backgroundView?: Partial<SkyBackgroundView> — Sky-only camera used when the world is 2D. Does not move gameplay sprites.
  • preset?: SkyPresetName — Which bundled look to start from. Default 'partlyCloudy'.
  • quality?: SkyQualityName — Quality tier: cloud resolution, shadow map size, env map size, noise size. Default 'medium'.
  • time?: number — Time of day, 0 midnight, 0.5 noon; overrides the preset's clock and puts the sun on its arc.
  • daySeconds?: number — Real seconds one simulated day takes; 0 holds the clock. Overrides the preset.
  • latitude?: number — Observer latitude in degrees. Overrides the preset.
  • driveLighting?: boolean — Write the sun, ambient and fog into render-3d's lighting record. Default true.
  • clouds?: boolean — Render the volumetric clouds at all. Default true.
  • godRays?: boolean — God rays on or off; the preset decides when omitted.
  • cloudShadow?: boolean — Bake the cloud shadow map and hand it to render-3d. Default true.
  • cloudShadowStrength?: number — How dark the cloud shadow goes on the ground, 0..1. Default 0.85.
  • cloudShadowExtent?: number — Half-width of the cloud shadow box in metres. Default 4000.
  • envMap?: number | boolean — Bake and publish the env map. Default true.
  • moonUrl?: string — Lunar surface map URL. Default 'assets/skymax/moon.jpg'.
  • starsUrl?: string — Equirect star panorama URL. Default 'assets/skymax/starmap.jpg'; '' disables the stars.
  • cirrusUrl?: string — Cirrus mask URL. Default 'assets/skymax/cirrus.jpg'; '' disables the deck.
  • lattice?: 2 | 4 — Temporal sampling lattice edge: 4 refreshes a sixteenth of the pixels a frame, 2 a quarter (for fast cameras). Default 4.
  • sunScale?: number — Scale from the sky's HDR sun to the lighting record's sun intensity. Default 0.18.
  • ambientScale?: number — Scale from the sky's ambient radiance to the lighting record's ambient. Default 1.2.
  • toneMap?: boolean — Apply the ACES tone map. Default true.
  • hitDistanceMode?: 0 | 1 | 2 | 3 — Which depth a cloud pixel stores: 0 nearest, 1 farthest, 2 linear mean, 3 reciprocal mean. Default 1.
  • autoExposure?: boolean — Adapt the exposure to the sky's brightness, so a moonlit night is not black. Default true.
  • wind?: Partial<SkyCloudWindParams> — Cloud wind that OUTLIVES the presets: whatever preset is applied, these fields replace its own wind. Several presets hold their clouds still (stunningSunset, moonlitNight have a drift speed of 0 and only churn); pass { speed: 40 } to have every sky drift on its own, clock or no clock. Metres per second, heading in degrees (0 = +z, 90 = +x).
  • godRaySteps?: number — Samples along each god-ray march; the quality tier decides when omitted (16–24). Up to 96 for crisp shadows off nearby geometry.

SkyMoonParams

interface SkyMoonParams

The moon's appearance.

  • phase: number — Moon phase. 0 = new, 0.5 = full, 1 = new again. Default 0.5.
  • intensity: number — Master brightness over disc, cloud key, and sky ambient. Default 1.
  • discBrightness: number — Disc-only brightness, stacking on intensity. Default 9.
  • angularSize: number — Moon angular radius as 1 - cos(theta). Default 0.0003.
  • color: Rgb — Tint for disc, sky ambient, and cloud key, linear RGB. Default (0.7, 0.78, 0.95).
  • ambient: number — Gain on the night-sky ambient lift, 0..1. Default 0.015.

SkyNoise

interface SkyNoise

The GPU-resident cloud-noise set.

  • readonly baseShape: GPUTextureView — Base-shape volume: texture_3d of rgba8unorm with the full mip chain, repeat-wrapped. r, g, b = 1 minus Worley fBm at low, mid, high frequency (cells 4/8/16, 8/16/32, 16/32/64); a = 1. Sample at world xyz / baseScale with an explicit mip level.
  • readonly weather: GPUTextureView — Weather map: texture_2d of rgba8unorm, repeat-wrapped, no mips. r = coverage (the cloud-top height in shell-height-fraction units), g = b = 0, a = 1. Sample at world xz / weatherScale at level 0.
  • readonly blueNoise: GPUTextureView — Blue-noise dither tile: texture_2d of r8unorm, 64 by 64, repeat-wrapped. Sample at screen pixel / 64 with nearestSampler.
  • readonly sampler: GPUSampler — Repeat on every axis, linear mag and min, linear between mips: for baseShape and weather.
  • readonly nearestSampler: GPUSampler — Repeat, nearest on every filter: for blueNoise, whose spectrum interpolation would destroy.
  • readonly baseRes: number — Edge of the base-shape volume in texels. Feed it to the cone-footprint mip selection.
  • readonly weatherRes: number — Edge of the weather map in texels.
  • readonly weatherParams: Readonly<WeatherParams> — The weather parameters currently baked into the map.
  • setWeather(p: Partial<WeatherParams>): void — Regenerate the weather map with the given overrides merged over the current parameters; deterministic for the same parameters and seed. Re-uploads into the same texture, so bind groups holding weather stay valid. No-op after destroy.
  • destroy(): void — Release the three textures. Safe to call more than once; later calls and setWeather are no-ops.

SkyNoiseOptions

interface SkyNoiseOptions

Options for createSkyNoise.

  • baseRes?: 16 | 32 | 64 — Base-shape volume edge in texels: 16, 32 or 64. Default 32.
  • weatherRes?: number — Weather-map edge in texels (square), a positive integer. Default 512.
  • seed?: number — Deterministic seed offsetting the weather layer seeds and picking the blue-noise tile. Default 0.

SkyParams

interface SkyParams

A whole sky, as a preset stores it. Every field is present; applying one is a full replacement.

  • atmosphere: SkyAtmosphereParams — Scattering and fog.
  • sun: SkySunParams — The sun.
  • time: SkyTimeParams — The clock and moon.
  • cloud: SkyCloudParams — The clouds.
  • weather: SkyWeatherParams — Weather-map generation.
  • godRays: SkyGodRaysParams — God rays.
  • nightSky: { intensity: number } — Star panorama brightness.

SkyParamsPatch

type SkyParamsPatch = { … }

A recursive partial of SkyParams, what game.skymax.apply accepts.

  • atmosphere?: Partial<SkyAtmosphereParams>
  • sun?: Partial<SkySunParams>
  • time?: Partial<Omit<SkyTimeParams, 'moon'>> & { moon?: Partial<SkyMoonParams> }
  • cloud?: { [K in keyof SkyCloudParams]?: Partial<SkyCloudParams[K]> }
  • weather?: Partial<SkyWeatherParams>
  • godRays?: Partial<SkyGodRaysParams>
  • nightSky?: { intensity?: number }

SkyPresetName

type SkyPresetName = 'partlyCloudy' | 'stunningSunset' | 'thunderstorm' | 'stormyEvening' | 'moonlitNight' | 'fluffy' | 'hazy' | 'pixar'

Names of the bundled presets.

SkyQuality

interface SkyQuality

A quality tier: what it costs and what it buys.

  • cloudHistoryDiv: 1 | 2 | 4 — Cloud reconstruction divisor against the screen; the march also divides by the lattice edge.
  • cloudFullLightingAlpha: number — Accumulated cloud alpha where the light cone switches to the cheap base-shape density.
  • cloudShadowResolution: number — Cloud shadow map edge, texels.
  • cloudShadowMipLevel: number — Mip the shadow bake samples the field at.
  • godRays: boolean — Whether god rays render.
  • godRaySteps: number — God-ray march steps.
  • envMap: boolean — Whether the env map re-bakes as the sky changes.
  • envMapClouds: boolean — Whether the env map bake includes clouds.
  • envMapWidth: number — Equirect env map width; the height is half.
  • envMapMarchSteps: number — Cloud march steps in the env bake.
  • envMapMipBase: number — Noise mip floor in the env bake.
  • weatherMapResolution: number — Weather map edge, texels.
  • baseShapeRes: 16 | 32 | 64 — Base-shape volume edge, texels.

SkyQualityName

type SkyQualityName = 'low' | 'medium' | 'high' | 'ultra'

Quality tier names.

SkySunParams

interface SkySunParams

The sun: where it is when the clock is not driving it, how bright, and its disc.

  • elevation: number — Altitude above the horizon, degrees. 0 = horizon, 90 = zenith.
  • azimuth: number — Compass angle, degrees. 0 = +Z, 90 = +X.
  • intensity: number — Peak daytime sun radiance, calibrated for exposure 1. Default 6.6.
  • color: Rgb — Sunlight tint at full daylight, linear RGB. Default (1, 0.95, 0.85).
  • discSize: number — Sun disc angular radius as 1 - cos(theta). Default 0.0003.

SkyTimeParams

interface SkyTimeParams

The day clock and where the observer stands.

  • time: number — Sun clock. 0 = midnight, 0.5 = noon. Wrapped to 0..1. Default 0.5.
  • autoAdvanceSecondsPerDay: number — Real seconds per simulated day. 0 = paused. Default 600.
  • latitude: number — Observer latitude in degrees, -90..90. Default 45.
  • azimuth: number — Compass rotation of the celestial sphere about +Y, degrees. Default 0.
  • moon: SkyMoonParams — Moon appearance.

SkyWeatherBand

interface SkyWeatherBand

One octave band of the weather-map noise.

  • frequency: number — Base frequency across the tile.
  • octaves: number — Octave count.
  • seed: number — Seed for this band.

SkyWeatherParams

interface SkyWeatherParams

The weather map that decides where cloud columns stand.

  • mainMass: SkyWeatherBand & { amplitude: number } — The main cloud mass.
  • detail: SkyWeatherBand & { strength: number } — Detail carved into the mass.
  • coverage: number — Coverage threshold, 0..1.

WeatherParams

interface WeatherParams

Weather-map generation parameters. The map is coverage only: the red channel is the cloud-top height the march compares against the shell height fraction. The two fBm layers are tileable Perlin at distinct seeds; each seed picks a decorrelated z slice of the 3D noise (slice = seed * 13.37 + 0.5).

  • coverage: number — Bake-time coverage baseline, added as (coverage - 0.5); 0.5 is a passthrough. Default 0.55.
  • mainMassFrequency: number — Main-mass Perlin frequency, lattice cells across the map (rounded to an integer). Default 5.
  • mainMassOctaves: number — Main-mass octave count; each doubles frequency and halves weight. Default 6.
  • mainMassAmplitude: number — Main-mass contrast about 0.5: 1 = raw fBm, 0 = flat, above 1 = punchier masses and gaps. Default 3.
  • mainMassSeed: number — Main-mass seed, picks the noise slice. Default 0.
  • detailFrequency: number — Detail Perlin frequency, lattice cells across the map (rounded to an integer). Default 7.
  • detailOctaves: number — Detail octave count. Default 6.
  • detailStrength: number — Signed detail strength in [-1, 1] applied to the detail field remapped to [-1, 1]; 0 = none. Default 0.5.
  • detailSeed: number — Detail seed, picks the noise slice. Default 1.