Skip to content

Assets

Assets are the files a project is built from: scenes, meshes, materials, textures, robot models, learned policies, and scripts. Lucky Engine keeps every asset inside the project's Assets folder and tracks it in a registry. Scenes and components reference an asset by a stable handle, so a reference keeps working after the asset is renamed or moved within the editor.

In short

The Content Browser is the home for project assets. Import copies a source file into the project, the New menu creates engine-native assets, and Ctrl+S saves the current scene and the project. Ready-made robot packs arrive through the Content Vault, covered in Robots.

The Content Browser

The Content Browser (View → Content Browser, open by default) is the panel for browsing, importing, creating, and organizing project assets. It has two parts: a folder tree on the left and a thumbnail grid on the right. The grid shows live previews for textures, materials, meshes, environment maps, and prefabs, and a type icon for everything else.

A few related panels sit alongside it:

  • Content Browser

    The project file browser. Import, create, rename, move, and delete the assets that live under the project's Assets folder.

  • Content Vault

    Installs ready-made robot and environment packs from the Lucky Robots library. See Robots for the pack workflow.

  • Material Editor

    Opens when a material is double-clicked. Edits the PBR channels and their textures. Motion graphs, animation graphs, and sound graphs each open their own node editor.

How assets are stored

A project is a folder on disk. The editor writes a project file and an Assets directory next to it:

MyProject/
  MyProject.hproj          project file (YAML)
  Assets/
    AssetRegistry.hzr      asset registry (handle, path, type)
    Scenes/
    Meshes/
    Materials/
    ...
  Cache/                   generated data, safe to delete

Every asset has a 64-bit handle. The registry, Assets/AssetRegistry.hzr, maps each handle to a file path and an asset type. Scenes, prefabs, and components store the handle rather than the path, which is why an asset can move between folders without breaking the things that point at it.

Organize inside the Content Browser

Renaming and moving assets from the Content Browser keeps the registry in sync. Moving the same files from outside the editor can leave the registry pointing at the old location, so prefer the in-editor actions.

Asset types

Lucky Engine recognizes an asset by its file extension. Two groups exist: source files imported from outside, and engine-native files created and saved in the editor.

Imported from source files:

Content Source files Becomes
3D models .fbx .gltf .glb .obj .dae .vrm .stl Mesh source
Images, textures .png .jpg .jpeg Texture
Environment maps .hdr Environment map
Robot and world models .xml MuJoCo scene (MJCF)
Policy models .onnx ONNX model, or a policy via Import ONNX Policy
Motion clips .json Motion
Datasets .parquet .parq .pq Parquet data
Audio .wav .ogg Audio
Fonts .ttf .otf .ttc Font

Created and saved in the editor (native formats):

Asset File Made with
Scene .hscene New → Scene
Material .hmaterial New → Material, edited in the Material Editor
Prefab .hprefab Drag a scene entity into the Content Browser
Static mesh .hsmesh Convert to Static Mesh, from a mesh source
Skinned mesh .hmesh Convert to Dynamic Mesh, from a mesh source
Motion graph .hmograph New → Motion Graph
Animation graph .hanimgraph New → Animation Graph
Script .cs New → Script
Sound config .hsoundc New → Audio → Sound Config
Spatialization config .hspatconfig New → Audio → Spatialization Config
SoundGraph sound .sound_graph New → Audio → SoundGraph Sound

Every .json imports as a Motion asset

The .json extension always maps to a Motion asset. Policy configuration files such as model_config.json and policy_descriptor.*.json are read by path where they are needed, not used as standalone assets, so their classification in the browser can be ignored.

Importing assets

Importing brings an outside file into the project. Right-click an empty area of the Content Browser grid and pick one of:

Menu item What it does
Import Opens a file picker and copies the chosen file into the current folder.
Import ONNX Policy (.honnx) Bundles an .onnx model with its model_config.json into a .honnx policy.
Bulk Import Copies an entire folder tree into the project at once.

The copied file is registered as an asset on the next refresh, using the type from its extension. A file whose extension is not recognized is copied but not tracked.

Importing a 3D model opens the Create Assets From Mesh Source wizard. It offers to build a static mesh, a dynamic (skinned) mesh, animations, and an animation graph from the imported model, with options for generating colliders.

For learned policies, Import ONNX Policy writes a .honnx manifest that points at the copied .onnx model and its model_config.json. The robot-side workflow for registering that policy on a RobotControllerComponent is in Robots → Adding a policy.

Creating assets

Right-click an empty area of the grid and open the New submenu:

New → Creates
Folder A new folder for organizing assets.
Scene An empty scene.
Material A PBR material, opened in the Material Editor.
Motion Graph A robot motion graph, opened in the node editor.
Animation Graph A skeletal animation graph.
Script A C# script from the starter template, after choosing a namespace and class name.
Audio A sound config, spatialization config, or SoundGraph sound.

A mesh source has two more options in its right-click menu: Convert to Static Mesh and Convert to Dynamic Mesh, which write a .hsmesh or .hmesh asset that scenes can reference directly.

Saving

Ctrl+S saves the current scene and the project together, and reports Project Saved. Ctrl+Shift+S saves the current scene under a new name.

Native assets are files in the Assets folder. Their editors, such as the Material Editor and the motion graph editor, write the asset when changes are applied. Imported source files are never rewritten by the engine: the file on disk stays authoritative, and the engine only reads from it.

The File menu holds the scene and project actions: New Scene, Open Scene, Save Scene As, Set Scene as Startup, and Revert to Saved, along with Import Project and Export Project.

Organizing assets

Right-click an asset for its actions:

Action Notes
Rename Inline rename. Keeps every handle reference intact.
Duplicate Ctrl+D.
Copy / Paste Ctrl+C / Ctrl+V.
Delete Del, with a confirmation prompt.
Reload Re-reads the asset from disk.
Open in Text Editor / Open Externally Opens the file for editing outside the grid.
Show in Explorer Reveals the file in the OS file manager.
Export (scenes) Writes the scene and its asset dependencies to a folder with their own registry.

Move an asset by dragging it onto a folder in the grid, the folder tree, or a breadcrumb entry. The top bar adds back and forward navigation (Alt+Left and Alt+Right), a filter that limits the grid to one asset type, and a search box (Ctrl+F) that matches file names. Ctrl+Shift+N creates a new folder. A settings popup adjusts the thumbnail size and toggles the asset-type labels.

Using assets in a scene

Most assets are placed by dragging them out of the Content Browser:

Drag this Onto Result
Mesh or static mesh The viewport A new entity at the drop point
Prefab The viewport A prefab instance
MJCF model The viewport A robot or world with MuJoCo physics
Material A surface in the viewport Assigns the material to that submesh
Texture A channel in the Material Editor Assigns the texture to that channel
Scene The viewport Opens the scene
Mesh source The viewport Opens the Create Assets From Mesh Source wizard
A scene entity The Content Browser Saves the entity as a prefab

Double-clicking an asset opens it. Materials open the Material Editor; motion graphs, animation graphs, and sound graphs each open their own node editor. Scenes open in the viewport.

The lifecycle of an imported asset is short and linear:

graph LR
    A([Source file]):::s -->|Import| B([Copied under Assets/]):::s
    B --> C([Registered with a handle]):::s
    C -->|loaded on first use| D([Placed in a scene]):::s
    D -->|referenced by handle| E([Scenes and components]):::s
    classDef s fill:#2d3a4f,stroke:#4a5e7e,color:#ffffff;

Robotics assets

The robot-specific asset types fit into the same system:

  • MJCF models (.xml) are MuJoCo scenes. A robot is an MJCF model with its meshes and textures. Dragging one into the viewport builds the robot with its physics.
  • Policies (.honnx) bundle an ONNX model with its configuration. They are imported through Import ONNX Policy and registered on a robot from the robot's context menu.
  • Motion graphs (.hmograph) drive IK and motion planning. They are authored in the motion graph node editor.

Most robots arrive prebuilt as Content Vault packs, so these files are already wired up on placement. The pack contents and the robot setup are covered in Robots. Policy configuration files (model_config.json, policy_descriptor.*.json) and the project's PolicyRegistry.yaml are plain configuration read by path, not catalog assets.

Where to go next

  • Robots covers robot packs, the Content Vault, and registering policies and motion graphs on a robot.
  • Working with components shows how scripts reference meshes, materials, and MuJoCo bodies at runtime.
  • Recording with the Observer produces the Parquet datasets that show up as data assets.