Manual

Scenes & Entities

The entity-component model, every component in the engine, prefabs and how scenes live on disk.

Structure

The Entity Model

A scene is a hierarchy of entities. An entity is a lightweight identity — a name, a parent and children — that gains behaviour by holding components. Systems iterate the components each frame: the render extractor collects meshes and lights, the physics world steps rigid bodies, the animation systems pose skeletons.

You create entities in the World Outliner and attach components in the Details panel. Transforms are hierarchical — moving a parent moves its children.

Reference

Component Reference

Every component in the engine, grouped by area, with its user-facing properties as they appear in the Details panel.

Transforms & rendering

ComponentProperties
Transform Position, Rotation (Euler degrees), Scale.
Transform 2D Position (xy), Rotation, Scale (xy) — for 2D physics entities.
Mesh Mesh asset, LOD Bias, Visible, Casts Shadow, Receives Shadow. Until a mesh asset is assigned, a built-in cube renders.
Skeletal Mesh Skeletal mesh asset (drag & drop), Visible, Casts Shadow, Receives Shadow; shows joint and bone-matrix counts. Posed by the Animator components, skinned on the GPU (up to 128 joints, 4 influences per vertex).
Material Material asset slot; base colour, metallic, roughness, opacity; texture slots; per-entity parameter overrides for node-graph materials; optional custom fragment shader. Materials →
Camera FOV, Near Plane, Far Plane, Main Camera flag, Orthographic. In play mode the camera marked Main renders the game.
Light Type (Directional / Point / Spot), Color, Intensity, Range (point/spot), Spot Angle (spot), Visible, Casts Shadow.
LOD A list of levels, each with a Max Distance and a mesh — the LOD system swaps the rendered mesh by camera distance.
Foliage Density, Draw Distance, Min/Max Scale, Seed, Regenerate. See Foliage.

Physics

ComponentProperties
Rigid Body Body Type (Static / Dynamic / Kinematic), Mass, Friction, Restitution, 2D Physics toggle.
Collider Shape (Box / Sphere / Capsule) with Half Extents / Radius / Height, Is Trigger. Without a collider, a box is derived from the transform scale.
Character Controller Slope Limit, Step Height, Skin Width, Mass, Gravity; read-only grounded state and velocity. Driven from scripts via setVelocity / isGrounded.

Animation

ComponentProperties
Animator One animation clip: clip asset, Speed, Time, Looping, Playing.
Animator Blend Two clips (A/B) with a blend alpha — smooth two-clip mixing.
Animator State Machine References an Animator State Machine asset; shows the current state and crossfade progress. Live parameters drive the transitions. Animation →
Property Animator Plays a property-animation clip — keyframed transform channels (position / rotation / scale) and material channels (colour, metallic, roughness, opacity) for cutscenes and motion design.

Audio, scripts & gameplay

ComponentProperties
Audio Source Audio asset, mixer Bus, Volume, Pitch, Loop, Play on Start, Spatial (with Inner Range, Range, Rolloff Factor).
Audio Listener Master Volume; the first listener in the scene receives 3D audio.
Script Lua/Python projects: script asset, Enabled, and auto-generated editors for the script's exposed properties (Float / Int / Bool / String). Scripting →
Particle System Particle graph asset, Playing toggle, live particle count. Particles →
Nav Mesh Bake settings (Cell Size/Height, Walk Height, Climb, Radius, Max Slope), Bake button, debug overlay toggle. Navigation →
Nav Agent Target position, Speed, Stop Distance; path status; Go / Stop buttons.

In-world UI

Entities can carry canvas-based UI components — UI Canvas (screen-space or world-space), UI Element (anchored rect), UI Text, UI Image and UI Button. For menus and HUDs, prefer the standalone UI Widget system.

Special entities

Sky & Weather Entities

The sky and the weather are ordinary, deletable scene entities — Sky carries the Environment component (the entire procedural sky) and owns the Sun and Moon lights as children; Weather carries the Weather component and drives cloud cover, fog, wind and precipitation into the Environment. Add and remove them via View ▸ Environment; a scene without a Sky renders a flat background and skips the whole sky pass.

Game and Simulation project templates seed both into the startup scene. All settings are documented under Rendering ▸ Sky & Atmosphere.

World building

Terrain

A terrain is an entity with a Terrain component — a heightfield created and sculpted in the editor's Landscape mode (size, resolution, height scale, optional procedural seed noise; then Raise / Lower / Smooth / Flatten / Ramp / Roughen brushes).

Under the hood the terrain builds a grid of chunk child entities, each with its own mesh and automatic LOD chain, so the standard frustum culler and LOD system handle distant terrain cheaply. Skirt geometry hides seams between LOD levels, and sculpt strokes regenerate only the chunks they touch. The terrain uses a single material (assign your own via its Material component).

Vegetation

Foliage

The Foliage component scatters mesh instances procedurally across the terrain on the same entity — Density, Seed, Min/Max Scale and a Draw Distance, with a Regenerate button. Instances render through GPU instancing with per-instance tinting, so thousands of blades or bushes cost a handful of draw calls.

Reuse

Prefabs

Right-click any entity in the Outliner and choose Save as Prefab — the entity and all its descendants are captured into a prefab asset (internally the same compact binary format as a scene, limited to the subtree). Dragging the prefab back into a scene instantiates a fresh copy with fresh entity ids, reparented wherever you drop it.

Note: prefabs are a one-way spawn — instances don't stay linked to the asset, so editing a prefab doesn't retro-actively change already-placed copies.

On disk

Scene Files

In the editor, scenes are versioned, human-readable JSON saved as .hescene. Every entity records its hierarchy and a component map; asset references (meshes, materials, scripts …) are stored as UUIDs so they survive file moves:

scene.hescene
{
  "version": "1.1",
  "entities": [
    {
      "id": 1,
      "name": "Cube",
      "parent": 0,
      "children": [],
      "components": {
        "transform": {
          "position": [0, 1, 0],
          "rotation": [0, 0, 0],
          "scale":    [1, 1, 1]
        },
        "mesh":     { "asset": "9f2c…", "castsShadow": true },
        "material": { "asset": "b41a…" }
      }
    }
  ]
}

Exported games ship scenes in a compact binary (CBOR) form packed into the .hpak archive. The Level Script graph is stored inside the scene file, so scene and logic travel together.

Big worlds

Additive Loading & Zones

Beyond loading one scene at a time, the engine supports additive loading: merging another scene into the running world as a zone. In the editor, File ▸ Add Scene Additive… merges a scene for editing. At runtime, the scene scripting group drives seamless transitions and streaming:

  • scene.load — switches scenes, swapping the world only after the new one finished building (no half-loaded frame).
  • scene.loadAdditive — streams a zone in at a position, optionally hidden for a later instant reveal.
  • scene.showZone / hideZone / setZonePosition / unloadZone — manage streamed zones by id.

The same calls are available to Lua, Python and HorizonCode — see the node reference for the full list.