Saved document schema · Terrain authoring example · Lighting and scene controls · 3D input and export reference
Aether 0.10.152: native terrain in the browser
Aether is one engine and product. This release rebuilds native Studio, Player, MCP and CAD from the recovered CP143 source baseline and combines them with the shared editor/runtime fixes through 0.10.151. The public version is 0.10.152 / CP152. Each native executable supports `--build-info`, reporting its component, version and source digest. Installer preparation rejects missing programs and mismatched native builds.
Native terrain graph
Open Terrain Generation, select the terrain, and expand **Native terrain graph** in the Inspector. Choose the grid size, world size, generators, modifiers and connections, then choose **Build native terrain graph**. Builds run in a cancellable browser worker. The graph view shows the saved connections. This does not require a paired desktop process.
This first browser port compiles Aether's production C++ `TerrainGraph`, `TerrainForm` and related kernels to WebAssembly. It exposes 41 node types: Mountain, MountainRange, Ridge, Plains, Island, Constant, Canyon, Dunes, Volcano, Perlin, Voronoi, Gradient, Shape, Cracks, Erode, Thermal, Terrace, Blur, Warp, Carve, Detail, Shaper, Clamp, Curve, Stratify, HydroFix, SlopeMask, HeightMask, WearMask, DepositMask, Curvature, Peaks, Soil, FlowMap, RockMap, Angle, Blend, Add, Max, Min and Output.
The complete native catalog contains additional entries, aliases and systems. This release does not claim that every catalog entry is a separate runnable browser algorithm. External-file nodes, imported-object nodes, macros, city generation, painted graph records and the complete desktop canvas are not exposed by this browser adapter.
The earlier ordered operation stack remains available. Building a native graph replaces the base heightfield and removes that operation stack. Existing sculpt stamps remain and apply after the bake. **Detach graph, keep heightfield** retains the generated heights while removing the native recipe and native masks; you can then use the operation stack on that heightfield.
Saved project and reproducibility
`terrain.nativeGraph` contains schema version 1, the WASM kernel SHA-256, the connected recipe and a bake signature. `terrain.heightfield` contains the authoritative float32 height samples. `terrain.nativeMaps` contains the native mask, wear and deposit arrays as base64 float32 little-endian data. Save/load, browser Play, desktop shared Play and exported games consume these same saved values. Gameplay does not need to regenerate the terrain or fetch its compiler/kernel.
Changing a recipe or its bake without rebuilding produces a validation error instead of silently playing stale terrain. The signature detects accidental mismatches; it is not a cryptographic security signature. Use the graph apply tool to rebuild, or detach the graph before editing the imported heightfield. Legacy projects without these optional fields retain their earlier behavior.
Native and WASM builds use the same algorithms, but cross-target floating-point results are not promised to be bit-identical. In the comparison fixture, procedural generator height differences were below 0.005 metres; repeated erosion on a Mountain input amplified small input differences, with a maximum observed height difference of 10.124 metres. Erosion on identical Gradient, Constant and Shape inputs matched exactly in that fixture. Repeated builds within the tested WASM backend were deterministic. Preserve the saved bake when an unchanged scene is required across targets.
Limits and units
Graphs contain 1–12 nodes and use 64, 128 or 256 cells, producing 65, 129 or 257 samples per side. Worlds are square, 32–8192 metres wide. Node inputs refer to earlier nodes, so cycles and forward references are rejected. The erosion budget is 500,000 duration-weighted droplets per graph. Individual parameter ranges come from the native catalog and are enforced by the C++ bridge.
Native height values are metres. Native wear and deposit are normalized masks from 0 to 1, not removed/deposited metres. The native mask contains flow for erosion nodes and selector values for selector nodes. Existing surface/scatter/export controls call this channel `flow`; for a native graph it means the native mask and is not always water flow. Query the graph/catalog metadata before interpreting it.
The existing operation stack still supports live simulation through 512 cells and background map rebuilds through 4096 cells. A native graph's higher-resolution map export resamples its saved bake; it does not add new native simulation detail. Export metadata records the native simulation size and whether resampling occurred. Terrain masks, surface layers, decorative instanced scatter, tiled LOD and RAW interchange from 0.10.151 remain available.
MCP tools
`aether_terrain_graph_catalog` returns supported kinds, parameter names, defaults, ranges, input requirements and kernel identity. It does not mutate a project.
`aether_terrain_graph_apply` takes `graph`, builds it through the native WASM kernel, validates the result and atomically saves the recipe and bake. The hosted tool also accepts the standard `project_id` and `expected_revision` arguments. Example graph:
{
"graph": {
"cells": 128,
"worldSize": 512,
"nodes": [
{"kind": "Mountain", "seed": 7},
{"kind": "Erode", "seed": 7, "parameters": [20, 3.4, 0.35, 0.28], "inputs": [0]},
{"kind": "Thermal", "parameters": [3, 1.4], "inputs": [1]}
],
"output": 2
}
}
`parameters` follows each node's catalog order. Omitted parameters use native defaults. `inputs` contains A, B and mask node indices; -1 disconnects an optional input. `ports` selects the source channel for those connections: 0 primary, 1 flow/mask, 2 wear, 3 deposit. Required inputs, unsupported channels and out-of-range parameters are rejected. `output` defaults to the final node.
`aether_terrain_graph_read` returns the saved recipe and build identity. `aether_terrain_graph_detach` keeps the heightfield and sculpt stamps while removing the graph and its masks. Existing `aether_terrain_channel_tile` reads the resulting saved terrain channels; `aether_document_schema` includes the new fields.
The shared catalog now contains 122 tools, including three hosted preview operations; the local shared adapter advertises the same catalog but marks those three hosted preview operations as unavailable locally. The rebuilt native MCP catalog contains 109 tools. These are different interfaces within the same Aether installation; the public release version is the same. Native-only operations still require the desktop runtime.
Validation and remaining work
Validation covers all 41 exposed native node kinds, branching arithmetic, native/WASM comparisons, deterministic WASM builds, schema and save/load round trips, invalid graph rejection, stale-bake detection, terrain sampling, seamless map edges and mask units. The browser test builds a graph through the Inspector and plays an exported game with its saved terrain using software WebGL. Prior 2D startup, EvTick, numeric equality, seeded randomness, audio authoring, widget events and export tests remain in the release checks.
Linux native programs are executed for build-identity checks. Native terrain, shared build and CAD tests run on Linux. Windows executable identity and dependency checks are static unless a separate execution result is explicitly recorded. Physical GPU rendering and Windows/Linux graphical installation are not certified by these checks.
Full native modeling tools, graph macros and external dependencies, broader physics/VFX authoring and profiler support remain future browser parity work. This release is the first native-terrain port, not a claim of complete desktop/browser parity.