static_mesh
Read a Static Mesh's bounds, materials, LODs, collision, and Nanite state.
What it’s for
This namespace answers questions about a Static Mesh asset without opening it in the editor. It returns read-only metadata as JSON: the mesh bounds (origin, extent, sphere radius), the material slots and what material is bound to each, the LOD count with per-LOD triangle and vertex counts, the lightmap resolution, and the collision setup (simple primitive counts and the collision trace flag).
Reach for it when your assistant needs facts about a mesh before it acts: is this piece light enough to instance across a level, which material slot to swap, whether it already has simple collision, or how big it is so it can be placed and scaled correctly. Because the read is loopback-fast, it is cheap to run mid-task against a single asset.
It returns the same JSON shape as the static_mesh.json sidecar written by an
asset dump. Use this namespace for a quick live look at one
mesh; use a folder dump when you want a durable, greppable snapshot of many meshes at once to
compare before and after a change.
Examples
Check how heavy a mesh is
Ask for the triangle budget and LOD count before deciding whether a mesh is cheap to reuse.
You: How heavy is the gate mesh, and how many LODs does it have?
call("static_mesh.describe", {assetPath:"/App/Track/Gate/gate"})
→ {lods:1, trianglesByLod:[2336], verticesByLod:[1382]}
Done. One LOD, 2,336 triangles at LOD0 — light enough to instance across the track.
See the material slots
Read which material sits in which named slot so an edit targets the right one.
You: Which materials are on the gate, and what slots are they in?
call("static_mesh.describe", {assetPath:"/App/Track/Gate/gate"})
→ {materials:[{slot:"gate_01_mat", path:"/App/Track/Gate/gate_01_mat"}, ...]}
Done. Three slots: gate_01_mat, gate_02_mat, gate_03_mat.
Check collision and size before placing it
Confirm whether a piece has simple collision primitives and read its bounds in one call.
You: Does the tunnel piece have simple collision, and how big is it?
call("static_mesh.describe", {assetPath:"/App/Track/Tunnel/tunnel_01"})
→ {collisionTraceFlag:"CTF_UseDefault", collision:{elements:{box:0, convex:0, sphere:0}}, bounds:{extent:{x:150, y:3.3, z:150}}}
Done. No simple primitives — it uses complex-as-simple. Extent is 150×3.3×150.