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
| Component | Properties |
|---|---|
| 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
| Component | Properties |
|---|---|
| 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
| Component | Properties |
|---|---|
| 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
| Component | Properties |
|---|---|
| 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:
{
"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.