Skip to content

HLOD

9 tools. Back to the index.

build_hlod

Destructive.

Triggers a world HLOD build for the current editor world. This is a HEAVY/async operation that requires a World Partition world plus the WorldPartitionHLODsBuilder commandlet / a long-running editor build job, so it cannot be driven synchronously from a single request. The tool does the headless-safe part for real (resolves the editor world, detects World Partition) and returns an honest result: build_started is false with a note explaining why (not a World Partition map, or async/commandlet-only).

No parameters.

Returns: { world: string, is_world_partition: bool, build_started: bool, note?: string }

create_hlod_layer

Additive, idempotent.

Creates and saves a new UHLODLayer (World Partition HLOD layer) asset. Idempotent on re-run. Sets default streaming-grid cell_size=25600, loading_range=51200. Layer type accepts 'Instancing', 'MeshApproximate' (also 'Custom'/'CustomHLODActor'). Defaults to 'Instancing'.

Parameter Type Required Description
name string yes Name of the new HLOD layer asset
package_path string no Content folder; defaults to /Game/HLOD
layer_type string no Optional EHLODLayerType string; defaults to "Instancing"

Returns: { name: string, package_path: string, asset_path: string, layer_type: string, cell_size: int, loading_range: number, created: bool, already_exists?: bool, success: bool, saved: bool, message: string }

get_hlod_layer_actors

Read-only.

Enumerate which LOADED actors in the current editor world are assigned to a given UHLODLayer (read-side of set_hlod_layer_actors). Two limits worth knowing before you trust an empty result: it only sees actors currently loaded, and it is WORLD PARTITION ONLY -- on a non-WP world it returns not_applicable=true with a note instead of a list, because there the assignment would not survive a Generate anyway.

Parameter Type Required Description
hlod_layer_path string no Full /Game path of the UHLODLayer asset (matches against AActor::HLODLayer::GetPathName()).

Returns: { hlod_layer_path, world, is_world_partition, not_applicable, note?, total: int, actors: [{actor_name, actor_path, actor_label}] }

get_hlod_layer_info

Read-only.

Reads layer type and streaming-grid settings of a UHLODLayer.

Parameter Type Required Description
hlod_layer_path string yes Full /Game path to the HLOD layer asset

Returns: { hlod_layer_path: string, asset_path: string, name: string, layer_type: string, cell_size: int, loading_range: number, is_spatially_loaded: bool }

get_hlod_layers

Read-only.

Lists all UHLODLayer assets under a content path via the AssetRegistry.

Parameter Type Required Description
path string no Optional content path; defaults to /Game

Returns: { path: string, hlod_layers: [{ name, path, layer_type }], count: int }

remove_hlod_layer

Destructive, idempotent.

Destroy a UHLODLayer asset at a /Game path (mirror of create_hlod_layer). Typed-delete: it loads the asset and REFUSES to delete it if it is not a UHLODLayer, so it cannot wipe the wrong asset the way the generic delete_asset can. Idempotent on missing assets.

Parameter Type Required Description
asset_path string yes Full /Game/.../LayerName asset path.

Returns: { asset_path, deleted, already_existed, layer_type?, note? }

set_hlod_layer_actors

Destructive, idempotent.

Assign a UHLODLayer to a BATCH of loaded actors in the current editor world -- or clear it from them by passing hlod_layer_path="". WORLD PARTITION ONLY: on a non-WP world it returns not_applicable=true and changes nothing. Idempotent per actor: one that already has that layer is not touched at all and comes back counted as unchanged, so the changed/unchanged/cleared split tells you exactly what really moved.

Parameter Type Required Description
actor_paths array yes JSON array of actor paths (long package paths or object paths) to assign.
hlod_layer_path string no Full /Game path of the UHLODLayer asset. Pass empty string ("") to clear.

Returns: { hlod_layer_path, world, is_world_partition, not_applicable, note?, requested: int, changed: int, unchanged: int, cleared: int, not_found: [paths], changed_actors: [{actor_path, old_hlod_layer, new_hlod_layer}] }

set_hlod_layer_parent

Destructive, idempotent.

Sets (or clears) the parent UHLODLayer of a UHLODLayer and saves it. The parent chain drives nested HLOD generation (a layer's HLOD becomes an input to its parent's HLOD). Send parent_layer_path="" to clear the parent to null; omit parent_layer_path to leave it untouched. Idempotent: if the parent is already the requested value, nothing is modified/saved (changed_parent=false). Validates against self-parent and circular parent chains (the engine's guard is editor-only and does not run headless).

Parameter Type Required Description
hlod_layer_path string yes Full /Game path to the child HLOD layer asset
parent_layer_path string no Optional full /Game path to the parent HLOD layer; "" clears to null; absent leaves it untouched

Returns: { hlod_layer_path: string, asset_path: string, parent_layer_path: string, has_parent: bool, changed_parent: bool, settings_set: bool, saved: bool }

set_hlod_layer_settings

Destructive, idempotent.

Sets streaming-grid settings / layer type on a UHLODLayer and saves it. Partial update: only the fields you send are touched. Sending cell_size or loading_range also enables the layer spatially loaded. Layer type accepts 'Instancing'|'MeshApproximate'|'Custom'|'CustomHLODActor'.

Parameter Type Required Description
hlod_layer_path string yes Full /Game path to the HLOD layer asset
cell_size number no Optional streaming-grid cell size
loading_range number no Optional streaming-grid loading range
layer_type string no Optional EHLODLayerType string

Returns: { hlod_layer_path: string, asset_path: string, layer_type: string, cell_size: int, loading_range: number, changed_cell_size: bool, changed_loading_range: bool, changed_layer_type: bool, settings_set: bool, saved: bool }