Skip to main content

mesh kit

155 tools. Generated from the plugin source; do not edit by hand.

Guide​

Static and skeletal mesh assets: LOD chains, build and reduction settings, materials and sections, sockets, simple and complex collision, UV channels and lightmap UVs, Nanite and distance fields, procedural authoring with Geometry Script, skeletal mesh basics (bones, morph targets, physics assets, skeleton binding) and folder-wide audits.

Works on UE 4.27 through 5.8 (123 tools on 4.27, 155 on 5.8). The extra 5.x tools are Nanite and the whole mesh.gs_* Geometry Script family; they are hidden from tools/list on older engines and refused with E_NOT_SUPPORTED if called anyway.

The kit is split over six classes that all expose the mesh. namespace:

ClassPrefixWhat
UUeaKit_Meshmesh.info, LODs, build settings, materials, sections, sockets, lightmap, distance field, Nanite, bounds, import settings, duplicate/rename/delete/export/merge/validate
UUeaKit_MeshCollisionmesh.simple collision primitives, convex decomposition, complexity, physical material, per-section collision, collision audits
UUeaKit_MeshUVmesh.UV channels, projections, lightmap UVs, UV bounds, tiling, auto-UV
UUeaKit_MeshGeometrymesh.gs_Geometry Script primitives and operations (UE 5 + the GeometryScripting plugin)
UUeaKit_SkeletalMeshmesh.sk_skeletal mesh LODs, materials, sockets, bones, morph targets, physics assets, skeleton
UUeaKit_MeshBatchmesh.folder audits and bulk edits

Not here: placing meshes in a level (actor kit), mesh component settings (component kit), importing FBX (asset kit asset.import_*), materials themselves (material kit).

Start here​

  1. mesh.get_info {"mesh":"/Game/Meshes/SM_Rock"} — LODs with triangle/vertex/section counts, materials, sockets, bounds, lightmap, collision summary, Nanite, LOD group, source files.
  2. mesh.audit {"folder":"/Game/Meshes"} — the whole folder with triangle budgets, LOD coverage, missing collision and lightmap resolution, plus the offenders.
  3. mesh.validate {"mesh":"..."} — one mesh checked for a broken LOD chain, missing collision, unusable lightmap UVs and empty material slots.
  4. mesh.report {"folder":"/Game/Meshes"} — the same audit as markdown text for a human.

Everything that changes an asset is transactional (edit.undo works) but nothing is saved until you call mesh.save or asset.save_all.

Recipes​

A production-ready prop in three calls​

mesh.generate_lods {"mesh":"/Game/Meshes/SM_Crate","count":3}
mesh.auto_convex_collision {"mesh":"/Game/Meshes/SM_Crate","hullCount":4,"maxHullVerts":16}
mesh.generate_lightmap_uv {"mesh":"/Game/Meshes/SM_Crate","srcChannel":0,"dstChannel":1,
"minResolution":64}

mesh.generate_lods rebuilds the whole LOD chain from LOD0 by reduction (default percentages 0.5, 0.25, 0.125…), mesh.auto_convex_collision replaces the simple collision with a convex decomposition, and mesh.generate_lightmap_uv turns on the engine's lightmap UV generator and points the lightmap coordinate index at the new channel.

Collision from scratch​

mesh.fit_collision_to_bounds {"mesh":"...","kind":"box"} // one box on the bounds
mesh.add_capsule_collision {"mesh":"...","radius":30,"length":80}
mesh.set_collision_complexity{"mesh":"...","complexity":"use_simple_as_complex"}
mesh.get_collision {"mesh":"..."} // check the result

Shapes: box, sphere, capsule, kdop10x/10y/10z/18/26 (mesh.add_kdop_collision or the generic mesh.add_simple_collision), convex hulls (mesh.auto_convex_collision). mesh.set_collision_primitive edits one primitive numerically; convex hulls cannot be edited that way. mesh.copy_collision clones a whole setup onto another mesh, and mesh.get_collision_json / mesh.set_collision_json round-trip the aggregate geometry as text.

A prop built from nothing (UE 5, GeometryScripting)​

mesh.gs_info {} // confirm the plugin is enabled
mesh.gs_pipeline {
"primitive":"box", "dimensions":{"x":200,"y":200,"z":40},
"ops":[ {"op":"translate","vector":{"x":0,"y":0,"z":20}},
{"op":"recompute_normals","amount":45},
{"op":"simplify_percent","amount":0.8} ],
"folder":"/Game/Props", "name":"SM_Platform", "collision":true }

mesh.gs_pipeline is the one-call version. The individual steps also exist: mesh.gs_create_box/sphere/cylinder/capsule/cone/torus/plane/stairs/ramp create a new asset, and mesh.gs_boolean, mesh.gs_simplify, mesh.gs_transform, mesh.gs_mirror, mesh.gs_recenter_pivot, mesh.gs_weld, mesh.gs_fill_holes, mesh.gs_remove_small_components, mesh.gs_voxel_solidify, mesh.gs_voxel_morphology, mesh.gs_flip_normals, mesh.gs_recompute_normals, mesh.gs_set_material_ids and mesh.gs_combine edit an existing one. Every modify tool takes inPlace (default true) or a folder + name pair to write a copy instead. mesh.gs_measure returns triangle/vertex counts, surface area, volume and bounds; mesh.gs_generate_collision_from_mesh produces simple collision from the geometry itself (box, sphere, capsule, convex, swept_hull, min_volume, level_set).

Project-wide clean-up​

mesh.audit {"folder":"/Game","maxTriangles":50000,"minLods":2,"onlyOffenders":true}
mesh.find_without_collision {"folder":"/Game/Props"}
mesh.batch_auto_collision {"folder":"/Game/Props","kind":"box","onlyMissing":true,"dryRun":true}
mesh.batch_auto_collision {"folder":"/Game/Props","kind":"box","onlyMissing":true,"dryRun":false}

Every batch tool defaults to dryRun: true: run it once to see what would change, then repeat with dryRun: false. The family is mesh.batch_set_lod_group, mesh.batch_generate_lods, mesh.batch_set_lightmap, mesh.batch_set_nanite (5.0+), mesh.batch_set_build_settings, mesh.batch_rebuild and mesh.batch_auto_collision. The read-only finders are mesh.find_high_poly, mesh.find_without_lods, mesh.find_without_collision and mesh.find_duplicate_geometry.

Skeletal meshes​

mesh.sk_get_info first, then mesh.sk_list_bones, mesh.sk_list_morph_targets, mesh.sk_list_sockets. To give a character physics:

mesh.sk_create_physics_asset {"mesh":"/Game/Chars/SK_Hero","folder":"/Game/Chars",
"name":"PHYS_Hero","geomType":"sphyl","assign":true}

mesh.sk_regenerate_lods and mesh.sk_remove_lods need UE 5 (4.27 has no scripting entry point for them and returns E_NOT_SUPPORTED with a hint); the reduction settings themselves (mesh.sk_set_reduction) can be written on both engines.

Gotchas​

  • Rebuild cost. Tools that change build/reduction/UV settings call PostEditChange(), which rebuilds the render data. Several of them take rebuild: false so you can batch the changes and finish with one mesh.rebuild. Triangle counts in a reply come from the built data, so they only move after a rebuild.
  • Engine content is read-only in spirit. Duplicate first: mesh.duplicate {"mesh":"/Engine/BasicShapes/Cube","folder":"/Game/Temp","name":"SM_Copy"}, then edit the copy.
  • Nanite vs LODs. A Nanite mesh ignores the LOD chain at render time but still uses it for the fallback mesh and for collision. Do not delete the LODs of a Nanite mesh that also uses use_complex_as_simple collision — mesh.validate flags that combination.
  • Lightmap UVs. coordinateIndex must point at a channel that exists, or the lighting build reuses channel 0 (overlapping UVs). Either turn on the generator with mesh.generate_lightmap_uv or create the channel yourself with mesh.add_uv_channel + a projection.
  • UV editing needs source geometry. mesh.copy_uv_channel, mesh.set_uv_tiling and mesh.flip_uv_v work on the mesh description, so they refuse meshes that only have render data (E_NOT_SUPPORTED). The projection tools (mesh.generate_planar_uv and friends) work anywhere.
  • 4.27 differences. On 4.27 the kit goes through UEditorStaticMeshLibrary (EditorScriptingUtilities, already enabled by the plugin); on 5.x through UStaticMeshEditorSubsystem / USkeletalMeshEditorSubsystem. Nanite, Geometry Script and the skeletal LOD regeneration tools simply do not exist on 4.27.
  • Geometry Script must be enabled. The mesh.gs_* tools carry RequiresPlugin="GeometryScripting": if the plugin is off they are not listed and calls are refused with the plugin name. mesh.gs_info always answers and tells you whether it is enabled.
  • mesh.merge needs an editor world. It merges through temporary actors, so it is refused with E_EDITOR_STATE when no map is open. lodSelection: -1 merges all LODs; a value of 0-7 merges that specific LOD and is required if you also want mergeMaterials. The engine's merge utility picks its own asset name (/Game/F/SM_Merged would become /Game/F/SM_SM_Merged), so the tool moves the result to the exact folder/name you asked for and always returns the final object path in mesh; anything it could not do lands in notes.
  • Material slots. mesh.remove_material_slot refuses while a render section still points at the slot; move the section with mesh.set_section first.

Tools​

Legend. risk 0 = read-only, 1 = harmless editor op, 2 = modifies asset, 3 = deletes/replaces asset, 4 = project/config/build op, 5 = potentially destructive (calls above MaxAutoRisk need "_confirm": true). mutates = runs in a transaction (edit.undo reverts). requires PIE / requires world = refused without a PIE session / an open level. requires plugin = unavailable while the plugin is disabled. dryRun = honours the dryRun argument. smoke = covered by edit.self_test.

mesh.add_box_collision (risk 2, mutates, smoke)​

Adds a box collision primitive. An empty extent uses the mesh bounds.

ArgumentTypeDescription
meshstringrequired.
extent{x,y,z}Full size on X/Y/Z. (0,0,0) uses the mesh bounds.
center{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.add_capsule_collision (risk 2, mutates, smoke)​

Adds a capsule (sphyl) collision primitive. Radius/length of 0 are derived from the bounds.

ArgumentTypeDescription
meshstringrequired.
radiusnumberRadius in centimetres; <= 0 derives it from the bounds. Default 0.0.
lengthnumberLength of the cylindrical part; <= 0 derives it from the bounds. Default 0.0.
center{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.add_kdop_collision (risk 2, mutates, smoke)​

Adds a kDOP hull (kdop10x, kdop10y, kdop10z, kdop18, kdop26) fitted to the mesh.

ArgumentTypeDescription
meshstringrequired.
kindstringrequired. kdop10x / kdop10y / kdop10z / kdop18 / kdop26.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.add_material_slot (risk 2, mutates, smoke)​

Appends a material slot to the mesh.

ArgumentTypeDescription
meshstringrequired.
materialstringMaterial assigned to the new slot (optional).
slotNamestringName of the new slot (defaults to the material name).

Returns: mesh, materials, count, message.

mesh.add_simple_collision (risk 2, mutates, smoke)​

Adds a simple collision shape by name (box, sphere, capsule or any kDOP) fitted to the mesh.

ArgumentTypeDescription
meshstringrequired.
shapestringrequired. box / sphere / capsule / kdop10x / kdop10y / kdop10z / kdop18 / kdop26.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.add_socket (risk 2, mutates, smoke)​

Adds a socket with a relative location, rotation, scale and tag.

ArgumentTypeDescription
meshstringrequired.
namestringrequired. Socket name.
location{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means "leave alone" on set and (1,1,1) on add.
tagstringFree-form tag stored on the socket.
previewMeshstringStatic mesh shown at the socket in the editor preview.
newNamestringNew socket name (mesh.set_socket only).

Returns: mesh, sockets, count, message.

mesh.add_sphere_collision (risk 2, mutates, smoke)​

Adds a sphere collision primitive. A radius of 0 uses the bounding sphere.

ArgumentTypeDescription
meshstringrequired.
radiusnumberRadius in centimetres; <= 0 uses the bounding sphere. Default 0.0.
center{x,y,z}

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.add_uv_channel (risk 2, mutates, smoke)​

Appends an empty UV channel to a LOD.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel index. Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.audit (risk 0, smoke)​

Audits every static mesh of a folder: triangles, LODs, collision, lightmap, Nanite, materials, plus the meshes that break the given budgets.

ArgumentTypeDescription
folderstringrequired.
recursivebooleanDefault true.
limitintegerDefault 200.
maxTrianglesintegerFlag meshes with more LOD0 triangles than this (<= 0 disables the check). Default 100000.
minLodsintegerFlag meshes with fewer LODs than this (<= 0 disables the check). Default 2.
onlyOffendersbooleanOnly return the flagged meshes. Default false.

Returns: meshes, count, offenders, totalTriangles, withoutCollision, singleLod, naniteEnabled, message.

mesh.auto_convex_collision (risk 3, mutates, smoke)​

Replaces the simple collision with a convex decomposition of the mesh (hull count, vertices per hull, voxel precision).

ArgumentTypeDescription
meshstringrequired.
hullCountintegerMaximum number of convex hulls to generate. Default 4.
maxHullVertsintegerMaximum vertices per hull (6-32). Default 16.
precisionintegerVoxel resolution of the decomposition (higher = slower and more accurate). Default 100000.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.batch_auto_collision (risk 3, mutates, dryRun, smoke)​

Generates simple collision for every mesh of a folder (box, sphere, capsule or convex), optionally only where it is missing. Supports dryRun.

ArgumentTypeDescription
folderstringrequired. Content folder to process.
kindstringbox / sphere / capsule / convex.
onlyMissingbooleanOnly touch meshes that have no simple collision yet. Default true.
hullCountintegerConvex hull count when kind is convex. Default 4.
limitintegerMaximum number of meshes processed. Default 50.
dryRunbooleanReport what would happen without changing anything. Default true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_generate_lods (risk 3, mutates, dryRun, smoke)​

Generates a LOD chain for every static mesh of a folder, optionally only for the meshes that have a single LOD.

ArgumentTypeDescription
countintegerTotal number of LODs, including LOD0. Default 3.
percentsarray of numberTriangle fraction per generated LOD.
onlyIfSingleLodbooleanOnly touch meshes that currently have a single LOD. Default true.
dryRunbooleanDefault true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_rebuild (risk 3, mutates, dryRun, smoke)​

Rebuilds the render data of every static mesh of a folder (slow: use dryRun first to see the count).

ArgumentTypeDescription
dryRunbooleanDefault true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_set_build_settings (risk 2, mutates, dryRun, smoke)​

Applies build settings (normals, tangents, lightmap UV generation, degenerates, precision) to every LOD of every mesh of a folder.

ArgumentTypeDescription
recomputeNormalsstring"true"/"false" to change, empty to leave alone.
recomputeTangentsstring
generateLightmapUVsstring
removeDegeneratesstring
fullPrecisionUVsstring
minLightmapResolutionintegerMinimum lightmap resolution used by the lightmap UV generator (-1 = leave). Default -1.
dstLightmapIndexintegerDestination UV channel of the generated lightmap UVs (-1 = leave). Default -1.
dryRunbooleanDefault true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_set_lightmap (risk 2, mutates, dryRun, smoke)​

Sets the lightmap resolution of every static mesh of a folder, optionally only where it is below a threshold.

ArgumentTypeDescription
resolutionintegerLightmap resolution applied to the meshes. Default 64.
onlyBelowintegerOnly touch meshes whose current resolution is below this value (<= 0 = touch all). Default 0.
dryRunbooleanDefault true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_set_lod_group (risk 2, mutates, dryRun, smoke)​

Assigns a LOD group to every static mesh of a folder.

ArgumentTypeDescription
groupstringrequired. LOD group applied to every mesh of the folder.
dryRunbooleanReport what would happen without changing anything. Default true.

Returns: meshes, count, changed, dryRun, message.

mesh.batch_set_nanite (risk 2, mutates, UE 5.0+, dryRun, smoke)​

Turns Nanite on or off for every static mesh of a folder above a triangle threshold.

ArgumentTypeDescription
enabledbooleanTurn Nanite on or off. Default true.
minTrianglesintegerOnly touch meshes with at least this many LOD0 triangles. Default 0.
dryRunbooleanDefault true.

Returns: meshes, count, changed, dryRun, message.

mesh.collision_stats (risk 0, smoke)​

Collision audit of a folder: meshes without simple collision, meshes using complex-as-simple and hull counts.

ArgumentTypeDescription
folderstringrequired. Content folder to process.
kindstringbox / sphere / capsule / convex.
onlyMissingbooleanOnly touch meshes that have no simple collision yet. Default true.
hullCountintegerConvex hull count when kind is convex. Default 4.
limitintegerMaximum number of meshes processed. Default 50.
dryRunbooleanReport what would happen without changing anything. Default true.

Returns: meshes, withoutSimpleCollision, usingComplexAsSimple, totalPrimitives, totalConvexHulls, offenders, message.

mesh.copy_collision (risk 2, mutates, smoke)​

Copies the simple collision of one mesh onto another.

ArgumentTypeDescription
fromstringrequired. Mesh the collision is read from.
tostringrequired. Mesh the collision is written to.
replacebooleanReplace the destination's collision instead of appending to it. Default true.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.copy_uv_channel (risk 2, mutates, smoke)​

Copies the UV coordinates of one channel into another (the destination is created when missing).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
fromintegerrequired. Channel to read from.
tointegerrequired. Channel to write to (created when missing).

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.delete (risk 3, mutates, destructive, smoke)​

Deletes a static mesh asset. Refused while other assets still reference it.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, name, folder, message, notes.

mesh.duplicate (risk 2, mutates, smoke)​

Duplicates a static mesh into folder/name. Use this to create the working copy before editing engine content.

ArgumentTypeDescription
meshstringrequired. Source static mesh asset path or unique name.
folderstringDestination folder (defaults to the source folder).
namestringrequired. Name of the new asset.

Returns: mesh, name, folder, message, notes.

mesh.export (risk 1)​

Exports a static mesh to an FBX or OBJ file. Not smoke-tested: it writes outside the content folder.

ArgumentTypeDescription
meshstringrequired.
filestringrequired. Absolute path of the file to write.
formatstringfbx (default) or obj.

Returns: mesh, name, folder, message, notes.

mesh.find_duplicate_geometry (risk 0, smoke)​

Groups static meshes of a folder that share the same triangle count, vertex count and bounds (likely duplicates).

ArgumentTypeDescription
folderstringrequired. Content folder to scan.
recursivebooleanInclude subfolders. Default true.
limitintegerMaximum number of meshes inspected. Default 200.

Returns: groups, count, scanned, message.

mesh.find_high_poly (risk 0, smoke)​

Static meshes of a folder whose LOD0 exceeds a triangle threshold, sorted by triangle count.

ArgumentTypeDescription
thresholdintegerLOD0 triangle count above which a mesh is reported. Default 50000.

Returns: meshes, count, offenders, totalTriangles, withoutCollision, singleLod, naniteEnabled, message.

mesh.find_without_collision (risk 0, smoke)​

Static meshes of a folder without simple collision.

ArgumentTypeDescription
folderstringrequired. Content folder to scan.
recursivebooleanInclude subfolders. Default true.
limitintegerMaximum number of meshes inspected. Default 200.

Returns: meshes, count, offenders, totalTriangles, withoutCollision, singleLod, naniteEnabled, message.

mesh.find_without_lods (risk 0, smoke)​

Static meshes of a folder that have a single LOD.

ArgumentTypeDescription
folderstringrequired. Content folder to scan.
recursivebooleanInclude subfolders. Default true.
limitintegerMaximum number of meshes inspected. Default 200.

Returns: meshes, count, offenders, totalTriangles, withoutCollision, singleLod, naniteEnabled, message.

mesh.fit_collision_to_bounds (risk 2, mutates, smoke)​

Fits a single box, sphere or capsule to the mesh bounds, replacing the existing simple collision by default.

ArgumentTypeDescription
meshstringrequired.
kindstringbox / sphere / capsule.
replacebooleanReplace the existing simple collision instead of adding to it. Default true.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.flip_uv_v (risk 2, mutates, smoke)​

Flips one UV channel vertically (v = 1 - v), the usual fix for meshes authored in a V-up tool.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel index. Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.generate_box_uv (risk 2, mutates, smoke)​

Generates box-projected UVs into a channel (an empty size uses the mesh bounds).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerrequired. UV channel the projection is written to.
position{x,y,z}Centre of the projection gizmo in local space.
orientation{x,y,z}Orientation of the projection gizmo as pitch/yaw/roll.
tiling{x,y,z}Tiling on U and V (planar and cylindrical); defaults to 1,1.
size{x,y,z}Size of the projection box (box projection only); defaults to the mesh bounds.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.generate_cylindrical_uv (risk 2, mutates, smoke)​

Generates cylindrical-projected UVs into a channel.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerrequired. UV channel the projection is written to.
position{x,y,z}Centre of the projection gizmo in local space.
orientation{x,y,z}Orientation of the projection gizmo as pitch/yaw/roll.
tiling{x,y,z}Tiling on U and V (planar and cylindrical); defaults to 1,1.
size{x,y,z}Size of the projection box (box projection only); defaults to the mesh bounds.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.generate_lightmap_uv (risk 2, mutates, smoke)​

Turns on the engine's lightmap UV generator for a LOD and rebuilds it (source channel, destination channel and minimum resolution).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
minResolutionintegerMinimum lightmap texture resolution used for the packing. Default 64.
srcChannelintegerUV channel the generator reads from. Default 0.
dstChannelintegerUV channel the generated lightmap UVs are written to. Default 1.
setLightmapIndexbooleanAlso point the mesh's lightmap coordinate index at dstChannel. Default true.
rebuildbooleanDefault true.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.generate_lods (risk 2, mutates, smoke)​

Builds a whole LOD chain from LOD0 by automatic reduction (default 0.5, 0.25, 0.125...). One call replaces the existing LODs.

ArgumentTypeDescription
meshstringrequired.
countintegerrequired. Total number of LODs to produce, including LOD0 (2-8).
percentsarray of numberTriangle fraction per generated LOD (default 0.5, 0.25, 0.125...).
screenSizesarray of numberScreen size per LOD; empty means auto-compute.
rebuildbooleanDefault true.

Returns: mesh, message, lods, notes.

mesh.generate_planar_uv (risk 2, mutates, smoke)​

Generates planar-projected UVs into a channel (position, orientation and tiling of the projection gizmo).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerrequired. UV channel the projection is written to.
position{x,y,z}Centre of the projection gizmo in local space.
orientation{x,y,z}Orientation of the projection gizmo as pitch/yaw/roll.
tiling{x,y,z}Tiling on U and V (planar and cylindrical); defaults to 1,1.
size{x,y,z}Size of the projection box (box projection only); defaults to the mesh bounds.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.get_bounds (risk 0, smoke)​

Local-space bounds of the mesh: origin, box extent, sphere radius, min/max and the bounds extensions.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, origin, boxExtent, sphereRadius, min, max, positiveBoundsExtension, negativeBoundsExtension, message.

mesh.get_build_settings (risk 0, smoke)​

Build settings of one LOD as key/value text.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.
lodintegerLOD index (0 = highest detail). Default 0.

Returns: mesh, values, message.

mesh.get_collision (risk 0, smoke)​

Full collision setup of a mesh: every primitive with its geometry, the complexity flag, the physical material, mirroring and the complex collision mesh.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.get_collision_json (risk 0, smoke)​

Serialises the aggregate collision geometry of a mesh as engine property text, for a later mesh.set_collision_json.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, collision, primitives, message.

mesh.get_info (risk 0, smoke)​

Everything about a static mesh in one call: LODs with triangle/vertex/section counts, materials, sockets, bounds, lightmap, collision summary, Nanite, distance field, LOD group, min LOD and source files.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, name, folder, lodCount, lods, materials, sockets, boundsOrigin, boundsExtent, boundsSphereRadius, lightmapResolution, lightmapCoordinateIndex, collision, naniteEnabled, generateDistanceField, distanceFieldResolutionScale, lodGroup, minLod, supportRayTracing, allowCpuAccess, hasVertexColors, sourceFiles, totalTriangles, totalVertices.

mesh.get_lod (risk 0, smoke)​

Build settings, reduction settings, screen size and statistics of one LOD.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.
lodintegerLOD index (0 = highest detail). Default 0.

Returns: mesh, stats, buildSettings, reductionSettings, autoComputeScreenSize.

mesh.get_nanite (risk 0, UE 5.0+, smoke)​

Current Nanite settings of a mesh as key/value text.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, values, message.

mesh.get_source_info (risk 0, smoke)​

Files the mesh was imported from plus the import settings that will be reused on the next reimport.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, sourceFiles, canReimport, importDataClass, settings, message.

mesh.get_stats (risk 0, smoke)​

Per-LOD triangle/vertex/section counts, total counts, UV channels, vertex colours, lightmap resolution, collision primitive count and a rough memory estimate.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, lods, totalTriangles, totalVertices, uvChannels, hasVertexColors, lightmapResolution, collisionPrimitives, materialSlots, estimatedMemoryKb.

mesh.get_uv_bounds (risk 0, smoke)​

Min/max UV coordinates of one channel and whether it leaves the 0-1 range.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel index. Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.gs_auto_uv (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Automatic UV unwrap with Geometry Script (XAtlas or PatchBuilder) written back into a LOD.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel the generated layout is written to. Default 0.
methodstringxatlas (default) or patchbuilder.
initialPatchCountintegerInitial patch count for the patchbuilder method. Default 100.
iterationsintegerXAtlas iteration count. Default 2.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.gs_boolean (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Boolean union, subtraction or intersection of two static meshes, written in place or into a new asset.

ArgumentTypeDescription
otherstringrequired. Second operand.
opstringunion / subtract / intersect.
otherLocation{x,y,z}Translation applied to the second operand before the operation.
otherRotation{x,y,z}Rotation of the second operand as pitch/yaw/roll.
otherScale{x,y,z}Scale of the second operand; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_combine (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Appends several static meshes into a single new asset.

ArgumentTypeDescription
meshesarray of stringrequired. Static meshes to append, in order.
folderstringrequired. Destination folder.
namestringrequired. Destination asset name.
collisionbooleanAlso generate simple collision for the result. Default false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_box (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a box (dimensions, subdivision steps, optional collision).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_capsule (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a capsule (radius, height of the cylindrical part).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_cone (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a cone (base radius, top radius, height).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_cylinder (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a cylinder (radius, height, radial steps, capped).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_plane (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a flat rectangle in XY (dimensions, subdivisions).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_ramp (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a wedge-shaped ramp (width, and dimensions as run/rise).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_sphere (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a UV sphere (radius, steps).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_stairs (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a straight staircase from stacked boxes (stepCount, width, and dimensions as step run/rise).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_create_torus (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Creates a static mesh asset containing a torus (major radius, minor radius, steps).

ArgumentTypeDescription
folderstringrequired. Destination content folder.
namestringrequired. Name of the new static mesh asset.
dimensions{x,y,z}Box and plane size on X/Y/Z in centimetres; zero falls back to 100.
radiusnumberRadius of a sphere, cylinder, capsule or cone base; <= 0 falls back to 50. Default 0.0.
heightnumberHeight of a cylinder, cone or the cylindrical part of a capsule; <= 0 falls back to 100. Default 0.0.
majorRadiusnumberMajor radius of a torus. Default 0.0.
minorRadiusnumberMinor (tube) radius of a torus. Default 0.0.
topRadiusnumberTop radius of a cone (0 = a sharp tip). Default 0.0.
stepsintegerGeneric subdivision count (sphere latitude, torus major steps, plane subdivisions). Default 0.
radialStepsintegerRadial subdivisions of a cylinder, capsule or cone. Default 0.
heightStepsintegerVertical subdivisions of a cylinder or cone. Default 0.
cappedbooleanClose the ends of a cylinder or cone. Default true.
stepCountintegerNumber of steps of a staircase. Default 8.
widthnumberWidth of a staircase or ramp. Default 100.0.
collisionbooleanAlso generate simple collision fitted to the result. Default true.
materialstringMaterial assigned to slot 0 of the new asset.
location{x,y,z}Location of the primitive inside the asset.
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_fill_holes (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Fills every open boundary loop of a mesh.

ArgumentTypeDescription
meshstringrequired. Static mesh to read.
lodintegerLOD read and written (default 0). Default 0.
inPlacebooleanWrite the result back into the source mesh instead of creating a new asset. Default true.
folderstringDestination folder when inPlace is false.
namestringDestination asset name when inPlace is false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_flip_normals (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Flips every triangle and normal of a mesh (fixes inside-out geometry).

ArgumentTypeDescription
meshstringrequired. Static mesh to read.
lodintegerLOD read and written (default 0). Default 0.
inPlacebooleanWrite the result back into the source mesh instead of creating a new asset. Default true.
folderstringDestination folder when inPlace is false.
namestringDestination asset name when inPlace is false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_generate_collision_from_mesh (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Generates simple collision for a static mesh from its own geometry (boxes, spheres, capsules, convex hulls or minimum-volume shapes).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
methodstringbox / sphere / capsule / convex / min_volume / swept_hull / level_set.
maxHullsintegerMaximum number of convex hulls. Default 4.
hullTargetFaceCountintegerTarget face count per simplified hull. Default 25.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_info (risk 0, UE 5.0+, smoke)​

Whether Geometry Script is available here, plus the operation and primitive names accepted by mesh.gs_pipeline.

No arguments.

Returns: available, ops, primitives, engine, message.

mesh.gs_measure (risk 0, UE 5.1+, requires plugin GeometryScripting, smoke)​

Triangle/vertex counts, surface area, volume and bounds of a mesh as seen by Geometry Script.

ArgumentTypeDescription
meshstringrequired. Static mesh to read.
lodintegerLOD read and written (default 0). Default 0.
inPlacebooleanWrite the result back into the source mesh instead of creating a new asset. Default true.
folderstringDestination folder when inPlace is false.
namestringDestination asset name when inPlace is false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_mirror (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Mirrors the geometry across the X, Y or Z plane through the origin.

ArgumentTypeDescription
axisstringx, y or z: the axis the geometry is mirrored across.
weldbooleanWeld the geometry along the mirror plane. Default true.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_pipeline (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Builds a whole prop in one call: a primitive or an existing mesh, an ordered list of operations, and one output asset.

ArgumentTypeDescription
meshstringExisting static mesh used as the source; leave empty to start from a primitive.
primitivestringPrimitive to start from when 'mesh' is empty: box / sphere / cylinder / capsule / cone / torus / plane.
dimensions{x,y,z}Size of the starting primitive (box/plane dimensions).
radiusnumberRadius of the starting primitive. Default 0.0.
heightnumberHeight of the starting primitive. Default 0.0.
opsarray of UeaGsOpOrdered list of operations applied to the working mesh.
folderstringDestination folder (required unless inPlace is true).
namestringDestination asset name (required unless inPlace is true).
inPlacebooleanWrite the result back into 'mesh' instead of creating a new asset. Default false.
collisionbooleanAlso generate simple collision for the result. Default false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_recenter_pivot (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Moves the geometry so the pivot ends up at the bounds centre, the bottom centre, the top centre or the origin.

ArgumentTypeDescription
modestringbounds_center / bottom_center / origin / top_center.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_recompute_normals (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Recomputes the normals, optionally splitting them along edges sharper than an angle.

ArgumentTypeDescription
angleThresholdnumberSplit the normals along edges sharper than this angle (degrees). Default 60.0.
splitNormalsbooleanCompute split (hard-edge) normals instead of smooth per-vertex normals. Default true.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_remove_small_components (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Removes small disconnected islands below a triangle count, area or volume.

ArgumentTypeDescription
minTrianglesintegerRemove connected islands with fewer triangles than this. Default 4.
minAreanumberRemove connected islands with a smaller surface area than this. Default 1.0.
minVolumenumberRemove connected islands with a smaller volume than this. Default 1.0.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_set_material_ids (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Assigns one material ID to every triangle of a mesh.

ArgumentTypeDescription
materialIdintegerMaterial ID (material slot index) assigned to every triangle. Default 0.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_simplify (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Simplifies a mesh to a triangle count, a vertex count or a fraction of its triangles.

ArgumentTypeDescription
targetTrianglesintegerTarget triangle count; used when > 0. Default 0.
targetVerticesintegerTarget vertex count; used when > 0 and targetTriangles is 0. Default 0.
percentnumberFraction of the current triangles to keep (0-1); used when the counts above are 0. Default 0.5.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_transform (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Translates, rotates and scales the geometry of a mesh (optionally recentring it first).

ArgumentTypeDescription
translate{x,y,z}
rotate{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.
recenterbooleanMove the geometry so its bounds are centred on the origin before the transform. Default false.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_uv_planar_projection (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Planar UV projection computed with Geometry Script (works on the dynamic mesh, unlike mesh.generate_planar_uv).

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerrequired. UV channel the projection is written to.
position{x,y,z}Centre of the projection gizmo in local space.
orientation{x,y,z}Orientation of the projection gizmo as pitch/yaw/roll.
tiling{x,y,z}Tiling on U and V (planar and cylindrical); defaults to 1,1.
size{x,y,z}Size of the projection box (box projection only); defaults to the mesh bounds.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.gs_voxel_morphology (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Voxel morphology: dilate, contract, close or open the mesh by a distance.

ArgumentTypeDescription
gridResolutionintegerVoxel grid resolution along the longest axis. Default 64.
windingThresholdnumberWinding threshold used to decide what is inside (solidify only). Default 0.5.
operationstringdilate / contract / close / open (morphology only).
distancenumberOffset distance in centimetres (morphology only). Default 1.0.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_voxel_solidify (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Voxelises a mesh and rebuilds a watertight surface from it (the usual fix for messy CAD geometry).

ArgumentTypeDescription
gridResolutionintegerVoxel grid resolution along the longest axis. Default 64.
windingThresholdnumberWinding threshold used to decide what is inside (solidify only). Default 0.5.
operationstringdilate / contract / close / open (morphology only).
distancenumberOffset distance in centimetres (morphology only). Default 1.0.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.gs_weld (risk 2, mutates, UE 5.1+, requires plugin GeometryScripting, smoke)​

Welds coincident mesh edges within a tolerance (closes cracks left by an import).

ArgumentTypeDescription
tolerancenumberDistance tolerance in centimetres. Default 0.01.

Returns: mesh, name, triangles, vertices, surfaceArea, volume, boundsMin, boundsMax, message, notes.

mesh.has_vertex_colors (risk 0, smoke)​

Whether a LOD of the mesh stores per-vertex colours.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.
lodintegerLOD index (0 = highest detail). Default 0.

Returns: mesh, values, message.

mesh.insert_uv_channel (risk 2, mutates, smoke)​

Inserts an empty UV channel at a given index, shifting the later channels up.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel index. Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.list (risk 0, smoke)​

Lists static meshes under a folder with optional triangle-count, LOD-count and collision filters. Empty folder lists /Game.

ArgumentTypeDescription
folderstringContent folder to search ("/Game" when empty).
nameContainsstringKeep only meshes whose name contains this text.
minTrianglesintegerKeep only meshes with at least this many LOD0 triangles (-1 = no filter). Default -1.
maxTrianglesintegerKeep only meshes with at most this many LOD0 triangles (-1 = no filter). Default -1.
withoutCollisionbooleanKeep only meshes without simple collision. Default false.
lodCountintegerKeep only meshes with exactly this many LODs (-1 = no filter). Default -1.
limitintegerMaximum number of meshes returned. Default 100.

Returns: meshes, count, scanned, message.

mesh.list_collision_primitives (risk 0, smoke)​

Simple collision primitives of a mesh (same data as mesh.get_collision without the summary fields).

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.list_lod_groups (risk 0, smoke)​

LOD group names configured for this project (Engine LOD group settings).

No arguments.

Returns: names, count.

mesh.list_materials (risk 0, smoke)​

Material slots of the mesh: index, slot name, imported name, material path and UV density.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, materials, count, message.

mesh.list_sections (risk 0, smoke)​

Render sections of a LOD: material index, triangle count, collision, shadow casting and ray tracing flags.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.
lodintegerLOD index (0 = highest detail). Default 0.

Returns: mesh, sections, count, message.

mesh.list_sockets (risk 0, smoke)​

Sockets of the mesh with their relative transforms and tags.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, sockets, count, message.

mesh.list_uv_channels (risk 0, smoke)​

UV channels of a LOD with their bounds, whether they leave the 0-1 range and which one is the lightmap channel.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.
lodintegerLOD index (0 = highest detail). Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.merge (risk 3, mutates, requires world, smoke)​

Merges several static meshes into a single new asset (mesh merge utilities, optional material baking). Needs an editor world because the sources are merged through temporary components.

ArgumentTypeDescription
meshesarray of stringrequired. Static meshes to merge, in order.
folderstringrequired. Destination content folder.
namestringrequired. Name of the merged asset.
mergeMaterialsbooleanBake the source materials into a single merged material. Default false.
pivotAtOriginbooleanPlace the pivot at the world origin instead of the first mesh's pivot. Default true.
lodSelectionintegerLOD of each source mesh to merge (-1 = use all LODs). Default 0.

Returns: mesh, name, folder, message, notes.

mesh.rebuild (risk 2, mutates, smoke)​

Rebuilds the render data of the mesh and reports any build errors.

ArgumentTypeDescription
meshstringrequired.
silentbooleanSuppress the engine's build progress dialog. Default true.

Returns: mesh, message, lods, notes.

mesh.remove_all_sockets (risk 3, mutates, destructive, smoke)​

Removes every socket of the mesh.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, sockets, count, message.

mesh.remove_collision (risk 3, mutates, destructive, smoke)​

Removes every simple collision primitive of the mesh.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.remove_collision_primitive (risk 3, mutates, smoke)​

Removes one collision primitive by type and index.

ArgumentTypeDescription
meshstringrequired.
typestringrequired. box / sphere / capsule / convex.
indexintegerrequired.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.remove_lods (risk 3, mutates, smoke)​

Removes every LOD except LOD0.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, message, lods, notes.

mesh.remove_material_slot (risk 3, mutates, smoke)​

Removes a material slot. Refused while a section still uses it.

ArgumentTypeDescription
meshstringrequired.
slotstringrequired. Slot index or slot name. Refused when a section still uses the slot.

Returns: mesh, materials, count, message.

mesh.remove_socket (risk 3, mutates, smoke)​

Removes one socket by name.

ArgumentTypeDescription
meshstringrequired.
namestringrequired.

Returns: mesh, sockets, count, message.

mesh.remove_uv_channel (risk 3, mutates, smoke)​

Removes one UV channel from a LOD.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerUV channel index. Default 0.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.rename (risk 3, mutates, smoke)​

Renames or moves a static mesh asset.

ArgumentTypeDescription
meshstringrequired. Source static mesh asset path or unique name.
folderstringDestination folder (defaults to the source folder).
namestringrequired. Name of the new asset.

Returns: mesh, name, folder, message, notes.

mesh.rename_material_slot (risk 2, mutates, smoke)​

Renames a material slot (the name components use to override the material).

ArgumentTypeDescription
meshstringrequired.
slotstringrequired. Slot index or current slot name.
newNamestringrequired.

Returns: mesh, materials, count, message.

mesh.report (risk 0, smoke)​

Markdown-style summary of a folder's static meshes: totals, budgets and the worst offenders, for a human to read.

ArgumentTypeDescription
folderstringrequired.
recursivebooleanDefault true.
limitintegerDefault 200.
maxTrianglesintegerFlag meshes with more LOD0 triangles than this (<= 0 disables the check). Default 100000.
minLodsintegerFlag meshes with fewer LODs than this (<= 0 disables the check). Default 2.
onlyOffendersbooleanOnly return the flagged meshes. Default false.

Returns: report, meshes, totalTriangles, message.

mesh.save (risk 2, mutates)​

Saves the mesh package to disk. Not smoke-tested: the self-test must not write assets to disk.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, message, lods, notes.

mesh.set_build_settings (risk 2, mutates, smoke)​

Build settings of one LOD (or of every LOD with lod=-1): normals, tangents, lightmap UV generation, degenerates, precision, build scale and distance field.

ArgumentTypeDescription
meshstringrequired.
lodintegerLOD to change, or -1 for every LOD. Default 0.
recomputeNormalsstring"true"/"false" to change, empty to leave alone.
recomputeTangentsstring
useMikkTSpacestring
generateLightmapUVsstring
minLightmapResolutionintegerMinimum lightmap resolution used when generating lightmap UVs (-1 = leave). Default -1.
srcLightmapIndexintegerSource UV channel for the generated lightmap UVs (-1 = leave). Default -1.
dstLightmapIndexintegerDestination UV channel for the generated lightmap UVs (-1 = leave). Default -1.
removeDegeneratesstring
buildReversedIndexBufferstring
highPrecisionTangentBasisstring
fullPrecisionUVsstring
buildScalenumberUniform build scale applied to the source geometry (<=0 = leave). Default -1.0.
distanceFieldResolutionScalenumberDistance field resolution scale (<0 = leave). Default -1.0.
distanceFieldTwoSidedstring
rebuildbooleanDefault true.

Returns: mesh, message, lods, notes.

mesh.set_collision_complexity (risk 2, mutates, smoke)​

Collision complexity of the mesh (default, simple_and_complex, use_simple_as_complex, use_complex_as_simple).

ArgumentTypeDescription
meshstringrequired.
complexitystringrequired. default / simple_and_complex / use_simple_as_complex / use_complex_as_simple.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.set_collision_json (risk 3, mutates)​

Replaces the aggregate collision geometry from the text produced by mesh.get_collision_json. Not smoke-tested: it needs the exact text of a previous mesh.get_collision_json call.

ArgumentTypeDescription
meshstringrequired.
collisionstringrequired. Aggregate geometry text as returned by mesh.get_collision_json.

Returns: mesh, collision, primitives, message.

mesh.set_collision_mirrored (risk 2, mutates, smoke)​

Whether mirrored collision data is generated for negatively scaled instances.

ArgumentTypeDescription
meshstringrequired.
mirroredbooleanGenerate mirrored collision data for negatively scaled instances. Default true.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.set_collision_primitive (risk 2, mutates, smoke)​

Changes the geometry of one box, sphere or capsule collision primitive.

ArgumentTypeDescription
meshstringrequired.
typestringrequired. box / sphere / capsule. Convex hulls cannot be edited numerically.
indexintegerrequired.
center{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.
extent{x,y,z}Full size on X/Y/Z of a box; (0,0,0) leaves it.
radiusnumberRadius of a sphere or capsule; <= 0 leaves it. Default 0.0.
lengthnumberLength of a capsule; <= 0 leaves it. Default 0.0.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.set_complex_collision_mesh (risk 2, mutates, smoke)​

Uses another static mesh as the complex (per-triangle) collision geometry.

ArgumentTypeDescription
meshstringrequired.
complexCollisionMeshstringStatic mesh whose geometry is used as the complex collision; empty clears it.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.set_cpu_access (risk 2, mutates, smoke)​

CPU access to the vertex data and the uniform-sampling data used by Niagara and physics queries.

ArgumentTypeDescription
meshstringrequired.
allowCpuAccessbooleanKeep the vertex data accessible to the CPU at runtime. Default true.
uniformSamplingbooleanBuild the data needed to sample the mesh surface uniformly. Default false.
gpuUniformSamplingbooleanBuild the GPU-side uniform sampling data (requires uniformSampling). Default false.

Returns: mesh, message, lods, notes.

mesh.set_distance_field (risk 2, mutates, smoke)​

Mesh distance field generation, resolution scale and self-shadow bias.

ArgumentTypeDescription
meshstringrequired.
generatebooleanGenerate a mesh distance field. Default true.
resolutionScalenumberDistance field resolution scale (<0 = leave). Default -1.0.
selfShadowBiasnumberSelf-shadow bias (<0 = leave). Default -1.0.
rebuildbooleanDefault false.

Returns: mesh, message, lods, notes.

mesh.set_extended_bounds (risk 2, mutates, smoke)​

Extra padding added to the rendered bounds of the mesh.

ArgumentTypeDescription
meshstringrequired.
positiveBoundsExtension{x,y,z}Extra size added on the +X/+Y/+Z side of the bounds.
negativeBoundsExtension{x,y,z}Extra size added on the -X/-Y/-Z side of the bounds.

Returns: mesh, origin, boxExtent, sphereRadius, min, max, positiveBoundsExtension, negativeBoundsExtension, message.

mesh.set_import_settings (risk 2, mutates, smoke)​

FBX import settings stored on the mesh, used by the next reimport.

ArgumentTypeDescription
meshstringrequired.
combineMeshesstring"true"/"false" to change, empty to leave alone.
generateLightmapUVsstring
autoGenerateCollisionstring
oneConvexHullPerUcxstring
normalImportMethodstringComputeNormals / ImportNormals / ImportNormalsAndTangents.
normalGenerationMethodstringBuiltIn / MikkTSpace.
vertexColorImportOptionstringIgnore / Override / Replace.
removeDegeneratesstring
buildReversedIndexBufferstring

Returns: mesh, sourceFiles, canReimport, importDataClass, settings, message.

mesh.set_lightmap (risk 2, mutates, smoke)​

Lightmap texture resolution and the UV channel that carries the lightmap UVs.

ArgumentTypeDescription
meshstringrequired.
resolutionintegerLightmap texture resolution in pixels (-1 = leave). Default -1.
coordinateIndexintegerUV channel that carries the lightmap UVs (-1 = leave). Default -1.

Returns: mesh, message, lods, notes.

mesh.set_lightmap_uv_channel (risk 2, mutates, smoke)​

UV channel that the lighting build reads the lightmap UVs from.

ArgumentTypeDescription
meshstringrequired.
channelintegerrequired. UV channel that carries the lightmap UVs.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.set_lod_count (risk 2, mutates, smoke)​

Sets how many LODs the mesh has. New LODs copy LOD0's build settings; extra LODs are dropped.

ArgumentTypeDescription
meshstringrequired.
countintegerrequired. Number of LODs to keep (1-8). Extra LODs copy LOD0's settings.
rebuildbooleanRebuild the render data afterwards (slow but returns accurate statistics). Default true.

Returns: mesh, message, lods, notes.

mesh.set_lod_group (risk 2, mutates, smoke)​

Assigns a project LOD group (drives LOD count, screen sizes and reduction). "None" clears it.

ArgumentTypeDescription
meshstringrequired.
groupstringrequired. LOD group name from the project settings (see mesh.list_lod_groups); "None" clears it.

Returns: mesh, message, lods, notes.

mesh.set_lod_screen_size (risk 2, mutates, smoke)​

Screen size (0-1) at which one LOD becomes active.

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
screenSizenumberrequired. Screen size (0-1) at which this LOD becomes active.
autoComputebooleanLet the engine compute the LOD screen sizes automatically instead. Default false.

Returns: mesh, message, lods, notes.

mesh.set_lod_screen_sizes (risk 2, mutates, smoke)​

Screen sizes of every LOD at once, starting at LOD0.

ArgumentTypeDescription
meshstringrequired.
screenSizesarray of numberrequired. One screen size per LOD, starting at LOD0.
autoComputebooleanLet the engine compute the LOD screen sizes automatically instead. Default false.

Returns: mesh, message, lods, notes.

mesh.set_material (risk 2, mutates, smoke)​

Assigns a material to one slot (slot index or slot name).

ArgumentTypeDescription
meshstringrequired.
slotstringrequired. Slot index ("2") or slot name.
materialstringMaterial or material instance asset path; empty clears the slot.

Returns: mesh, materials, count, message.

mesh.set_materials (risk 2, mutates, smoke)​

Assigns materials to every slot at once, in slot order.

ArgumentTypeDescription
meshstringrequired.
materialsarray of stringrequired. One material asset path per slot, in slot order.

Returns: mesh, materials, count, message.

mesh.set_min_lod (risk 2, mutates, smoke)​

Lowest LOD the renderer may use, optionally per platform.

ArgumentTypeDescription
meshstringrequired.
minLodintegerrequired. Lowest LOD index the renderer may use.
platformstringPlatform name for a per-platform override ("Mobile", "Switch"...); empty = default.

Returns: mesh, message, lods, notes.

mesh.set_nanite (risk 2, mutates, UE 5.0+, smoke)​

Turns Nanite on or off and sets its precision/fallback settings (UE 5.0+; every listed field exists on all 5.x releases).

ArgumentTypeDescription
meshstringrequired.
enabledbooleanrequired. Turn Nanite on or off for this mesh.
positionPrecisionintegerPosition precision exponent; -1000 (the default) leaves the current value. Default -1000.
fallbackPercentTrianglesnumberFallback mesh triangle fraction (0-1, <0 = leave). Default -1.0.
fallbackRelativeErrornumberFallback mesh relative error (<0 = leave). Default -1.0.
keepPercentTrianglesnumberTriangle fraction kept by the Nanite build (0-1, <0 = leave). Default -1.0.
rebuildbooleanDefault true.

Returns: mesh, values, message.

mesh.set_phys_material (risk 2, mutates, smoke)​

Physical material of the mesh's body setup.

ArgumentTypeDescription
meshstringrequired.
physMaterialstringPhysical material asset path; empty clears it.

Returns: mesh, summary, primitives, generateMirrored, complexCollisionMesh, message, notes.

mesh.set_ray_tracing (risk 2, mutates, smoke)​

Whether the mesh takes part in ray tracing.

ArgumentTypeDescription
meshstringrequired.
supportbooleanrequired. Whether the mesh takes part in ray tracing.

Returns: mesh, message, lods, notes.

mesh.set_reduction (risk 2, mutates, smoke)​

Reduction settings of one LOD (triangle/vertex percentage, max deviation, welding, hard angle, base LOD).

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
percentTrianglesnumberFraction of triangles to keep (0-1). Negative leaves the current value. Default -1.0.
percentVerticesnumberFraction of vertices to keep (0-1). Negative leaves the current value. Default -1.0.
maxDeviationnumberMaximum allowed deviation from the source mesh. Negative leaves the current value. Default -1.0.
weldingThresholdnumberWelding threshold in centimetres. Negative leaves the current value. Default -1.0.
hardAnglenumberHard-edge angle threshold in degrees. Negative leaves the current value. Default -1.0.
recalculateNormalsbooleanRecalculate normals after the reduction. Default false.
baseLodintegerLOD used as the source of the reduction (-1 leaves the current value). Default -1.
rebuildbooleanDefault true.

Returns: mesh, message, lods, notes.

mesh.set_section (risk 2, mutates, smoke)​

Changes one render section: material slot, collision, shadow casting and ray tracing visibility.

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
sectionintegerrequired.
materialIndexintegerMaterial slot index used by the section (-1 = leave). Default -1.
collisionstring"true"/"false" to change, empty to leave alone.
castShadowstring
visibleInRayTracingstring

Returns: mesh, sections, count, message.

mesh.set_section_collision_many (risk 2, mutates, smoke)​

Turns collision on or off for every render section of a LOD at once.

ArgumentTypeDescription
meshstringrequired.
lodintegerLOD whose sections are changed. Default 0.
enabledbooleanCollision flag applied to every section of that LOD. Default true.

Returns: mesh, sections, count, message.

mesh.set_socket (risk 2, mutates, smoke)​

Changes an existing socket (transform, tag, preview mesh and optionally its name).

ArgumentTypeDescription
meshstringrequired.
namestringrequired. Socket name.
location{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means "leave alone" on set and (1,1,1) on add.
tagstringFree-form tag stored on the socket.
previewMeshstringStatic mesh shown at the socket in the editor preview.
newNamestringNew socket name (mesh.set_socket only).

Returns: mesh, sockets, count, message.

mesh.set_uv_tiling (risk 2, mutates, smoke)​

Scales and offsets the UV coordinates of one channel.

ArgumentTypeDescription
meshstringrequired.
lodintegerDefault 0.
channelintegerDefault 0.
scale{x,y,z}Multiplier applied to U (x) and V (y).
offset{x,y,z}Offset added to U (x) and V (y) after scaling.

Returns: mesh, lod, count, lightmapCoordinateIndex, channels, message, notes.

mesh.sk_add_socket (risk 2, mutates)​

Adds a socket attached to a bone. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
namestringrequired.
bonestringBone the socket is attached to.
location{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.
newNamestringNew socket name (mesh.sk_set_socket only).

Returns: mesh, sockets, count, message.

mesh.sk_check_skeleton_compatible (risk 0)​

Whether a skeleton is compatible with the mesh's bone hierarchy. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
skeletonstringrequired. Skeleton asset path.
checkCompatibilitybooleanRefuse the change when the skeleton is not compatible with the mesh. Default true.

Returns: mesh, message, lods, notes.

mesh.sk_create_physics_asset (risk 3, mutates)​

Creates a physics asset from the mesh's bones (geometry type, minimum bone size, constraints). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
folderstringrequired. Destination content folder.
namestringrequired. Name of the new physics asset.
minBoneSizenumberBones smaller than this are skipped. Default 20.0.
geomTypestringsphere / box / sphyl / capsule / single_convex / multi_convex.
bodyForAllbooleanCreate a body for every bone, even the small ones. Default false.
createConstraintsbooleanCreate constraints between the bodies. Default true.
walkPastSmallbooleanKeep walking past bones that are too small instead of stopping. Default true.
assignbooleanAlso assign the new asset to the mesh. Default true.

Returns: mesh, message, lods, notes.

mesh.sk_get_bone_transform (risk 0)​

Reference transform of one bone, in component space or relative to its parent. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
bonestringrequired.
spacestringref (component space, default) or local (relative to the parent bone).

Returns: mesh, bone, space, location, rotation, scale, message.

mesh.sk_get_bounds (risk 0)​

Imported bounds of a skeletal mesh plus its bounds extensions. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, origin, boxExtent, sphereRadius, positiveBoundsExtension, negativeBoundsExtension, message.

mesh.sk_get_info (risk 0)​

Everything about a skeletal mesh: skeleton, LODs, materials, sockets, bone and morph target counts, physics assets, bounds and cloth. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, name, skeleton, lodCount, lods, materials, sockets, boneCount, morphTargetCount, physicsAsset, shadowPhysicsAsset, lodSettings, perPolyCollision, minLod, boundsOrigin, boundsExtent, clothingAssets, message.

mesh.sk_get_stats (risk 0, smoke)​

Skeletal mesh audit of a folder: meshes without a physics asset, with a single LOD, bone and morph target totals.

ArgumentTypeDescription
folderstringContent folder to search ("/Game" when empty).
skeletonstringKeep only meshes bound to this skeleton.
limitintegerMaximum number of meshes returned. Default 100.

Returns: meshes, withoutPhysicsAsset, singleLod, totalBones, totalMorphTargets, offenders, message.

mesh.sk_list (risk 0, smoke)​

Lists skeletal meshes under a folder, optionally filtered by skeleton.

ArgumentTypeDescription
folderstringContent folder to search ("/Game" when empty).
skeletonstringKeep only meshes bound to this skeleton.
limitintegerMaximum number of meshes returned. Default 100.

Returns: meshes, count, message.

mesh.sk_list_bones (risk 0)​

Bones of the reference skeleton with their parent, depth and child count. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
nameContainsstringKeep only bones whose name contains this text.
depthintegerMaximum hierarchy depth returned (-1 = no limit). Default -1.
limitintegerMaximum number of bones returned. Default 200.

Returns: mesh, bones, count, total, message.

mesh.sk_list_lods (risk 0)​

LODs of a skeletal mesh with triangle/vertex counts, screen size, hysteresis and reduction. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, message, lods, notes.

mesh.sk_list_materials (risk 0)​

Material slots of a skeletal mesh. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, materials, count, message.

mesh.sk_list_morph_targets (risk 0)​

Morph target names of a skeletal mesh. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, morphTargets, count, message.

mesh.sk_list_sockets (risk 0)​

Sockets stored on the mesh (not the ones inherited from the skeleton). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, sockets, count, message.

mesh.sk_regenerate_lods (risk 3, mutates)​

Regenerates the LOD chain by reduction (UE 5 uses the skeletal mesh editor subsystem). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
countintegerrequired. Total number of LODs, including LOD0.
percentsarray of numberTriangle fraction per generated LOD (default 0.5, 0.25, 0.125...).
regenerateEvenIfImportedbooleanRegenerate LODs even when they were imported rather than generated. Default false.

Returns: mesh, message, lods, notes.

mesh.sk_remove_lods (risk 3, mutates, destructive)​

Removes LODs (by index, or every LOD except LOD0). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
lodsarray of integerLOD indices to remove; empty removes every LOD except LOD0.

Returns: mesh, message, lods, notes.

mesh.sk_remove_socket (risk 3, mutates)​

Removes a socket by name. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
namestringrequired.

Returns: mesh, sockets, count, message.

mesh.sk_rename_material_slot (risk 2, mutates)​

Renames a material slot. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
slotstringrequired.
newNamestringrequired.

Returns: mesh, materials, count, message.

mesh.sk_set_bounds_extension (risk 2, mutates)​

Extra padding added to the rendered bounds of a skeletal mesh. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
positiveBoundsExtension{x,y,z}
negativeBoundsExtension{x,y,z}

Returns: mesh, origin, boxExtent, sphereRadius, positiveBoundsExtension, negativeBoundsExtension, message.

mesh.sk_set_lod_hysteresis (risk 2, mutates)​

LOD hysteresis (the delay that stops a LOD from flickering). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
valuenumberrequired. Screen size (0-1) or LOD hysteresis, depending on the tool.

Returns: mesh, message, lods, notes.

mesh.sk_set_lod_screen_size (risk 2, mutates)​

Screen size at which a LOD becomes active. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
valuenumberrequired. Screen size (0-1) or LOD hysteresis, depending on the tool.

Returns: mesh, message, lods, notes.

mesh.sk_set_lod_settings_asset (risk 2, mutates)​

Assigns a SkeletalMeshLODSettings asset that drives the LOD chain. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
assetstringAsset path; empty clears the reference.

Returns: mesh, message, lods, notes.

mesh.sk_set_material (risk 2, mutates)​

Assigns a material to one slot. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
slotstringrequired. Slot index or slot name.
materialstringMaterial asset path; empty clears the slot.

Returns: mesh, materials, count, message.

mesh.sk_set_materials (risk 2, mutates)​

Assigns materials to every slot at once. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
materialsarray of stringrequired. One material asset path per slot, in slot order.

Returns: mesh, materials, count, message.

mesh.sk_set_min_lod (risk 2, mutates)​

Lowest LOD the renderer may use, optionally per platform. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
minLodintegerrequired.
platformstringPlatform name for a per-platform override; empty = default.

Returns: mesh, message, lods, notes.

mesh.sk_set_per_poly_collision (risk 2, mutates)​

Turns per-polygon collision on or off (expensive; only for meshes that need exact traces). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
enabledbooleanValue of the flag. Default true.

Returns: mesh, message, lods, notes.

mesh.sk_set_physics_asset (risk 2, mutates)​

Assigns (or clears) the physics asset of a skeletal mesh. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
physicsAssetstringPhysics asset path; empty clears it.

Returns: mesh, message, lods, notes.

mesh.sk_set_reduction (risk 2, mutates)​

Reduction settings of one LOD (triangle/vertex percentage, deviation, bones to remove). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
lodintegerrequired.
percentTrianglesnumberFraction of triangles to keep (0-1); negative leaves the current value. Default -1.0.
percentVerticesnumberFraction of vertices to keep (0-1); negative leaves the current value. Default -1.0.
maxDeviationnumberMaximum deviation percentage; negative leaves the current value. Default -1.0.
bonesToRemovearray of stringBones removed at this LOD.
baseLodintegerBase LOD the reduction reads from; negative leaves the current value. Default -1.

Returns: mesh, message, lods, notes.

mesh.sk_set_shadow_physics_asset (risk 2, mutates)​

Assigns (or clears) the cheaper physics asset used for shadow computations. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
physicsAssetstringPhysics asset path; empty clears it.

Returns: mesh, message, lods, notes.

mesh.sk_set_skeleton (risk 3, mutates)​

Binds the mesh to a skeleton, optionally refusing an incompatible one. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
skeletonstringrequired. Skeleton asset path.
checkCompatibilitybooleanRefuse the change when the skeleton is not compatible with the mesh. Default true.

Returns: mesh, message, lods, notes.

mesh.sk_set_socket (risk 2, mutates)​

Changes an existing socket (bone, transform, name). Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired.
namestringrequired.
bonestringBone the socket is attached to.
location{x,y,z}
rotation{x,y,z}Rotation as pitch/yaw/roll.
scale{x,y,z}Scale; (0,0,0) means 1,1,1.
newNamestringNew socket name (mesh.sk_set_socket only).

Returns: mesh, sockets, count, message.

mesh.sk_validate (risk 0)​

Sanity check of a skeletal mesh: missing skeleton or physics asset, LOD chain, empty material slots. Not smoke-tested: no skeletal mesh ships in engine content.

ArgumentTypeDescription
meshstringrequired. Skeletal mesh asset path or unique name.

Returns: mesh, errors, warnings, valid, message.

mesh.uv_stats (risk 0, smoke)​

UV audit of a folder: meshes with a single UV channel, without generated lightmap UVs or using channel 0 as the lightmap.

ArgumentTypeDescription
folderstringrequired. Content folder to scan.
limitintegerMaximum number of meshes inspected. Default 200.

Returns: meshes, withoutLightmapUvs, lightmapOnChannelZero, singleUvChannel, offenders, message.

mesh.validate (risk 0, smoke)​

Sanity check of a mesh: degenerate LOD chain, missing collision, missing lightmap UVs, empty material slots and Nanite/collision mismatches.

ArgumentTypeDescription
meshstringrequired. Static mesh asset path or unique asset name.

Returns: mesh, errors, warnings, valid, message.