How do I get a static mesh's topmost and lowermost points (in Z) in worldspace?

This is mostly a math question. Also, I have an NDA, so I cannot reveal any more details than what is below. I cannot answer “what are you trying to do?”, sorry.

I have a static mesh in an Actor. The actor is manipulated in 3D world space (rotation, translation and size). Every frame, I need a way to get the world space location of the mesh’s topmost and lowermost points, depending on how it is rotated and translated. It’s kinda like “Get World Bounds” if any such thing existed? As opposed to Get Local Bounds, which only gives me the mesh’s top and bottom in local space, regardless of its rotation or position in the world.

Any idea how to do it? Here’s a picture to illustrate my question.

you can use the (local space + actor world location) or if you prefer just add 2 sockets or scene components

Can you please elaborate a bit more? I don’t exactly see how I would be able to derive two points in space on a mesh based upon the highest and lowest vertex in world space.

if you have the local point just add it to the GetActorLocation to make a world point.

or if you cant do that for some reason add 2 sockets to the mesh and GetSocketLocation

or add 2 scene components to the actor and use an interface to GetSceneLocation

There is no single “Get World Bounds” node, but the math is straightforward and you do not need to sample every triangle.

Get the static mesh component’s world transform (Get Component Transform), then take the local bounds from Get Local Bounds. Those local bounds are axis-aligned in the component’s local space, so they are a box of 8 corners. Transform each of the 8 corners by that world transform. The world-space minimum and maximum of those 8 points are the AABB of the mesh as it is actually placed. That handles rotation, translation, and the scale you apply on the actor, because the component transform includes scale if you are using the component’s transform rather than only the actor’s.

If you are scaling non-uniformly, use the component transform, not just the actor transform. Get Local Bounds on the static mesh component already accounts for the mesh’s local bounds; then Transform Point each corner with the component world transform.

If you need the true extreme vertices (not the AABB of the oriented box), the 8-corner method is the tight bound of the local AABB, which is what most gameplay uses. Getting the absolute highest vertex after rotation requires either sampling the mesh or using a bounds helper. For “topmost and lowermost in world Z” specifically, take the minimum and maximum Z of those 8 transformed corners.

Blueprint sketch: Get Component (Static Mesh) → Get Local Bounds, then a loop over the 8 corners, Transform Point with Get Component Transform, then Min/Max. You can also do it in C++ with FBox::TransformBy on the local box.

One caveat: Get Local Bounds is the bounds of the component’s bounds, not a per-frame physics collision hull. If the mesh is deformed or you have a different collision mesh, this will not match the visual mesh exactly. Also, if the component is hidden or the bounds are stale after a rebuild, call RecreateRenderState or just rely on the component’s current bounds after edits.

If you only care about the lowest and highest Z, you still need all 8 corners, because after a rotation the corner that is highest in Z is not always the

same corner.