The GridSliceResizerComponent is a versatile tool designed to maintain the proportions of specific areas of 3D meshes while allowing others to stretch during scaling. This component should replace the static mesh component, rather than being used in conjunction with it.
The concept of the GridSliceResizerComponent is similar to the popular 9-Slice-Scaling technique used in 2D graphics, which keeps the borders of sprites unstretched while the inner rectangle is stretched. In essence, the GridSliceResizerComponent is a 27-Slice-Scaler for 3D meshes.
The component operates by dividing the bounding box of a 3D mesh into 27 cuboids, as illustrated below. Not all cuboids are visible in this picture. Only the once that are front facing:
+-----+-----------+-----+
/_____/___________/_____/|
/_____/___________/_____/||
/ / / /|||
+----+-----------+-----+ |||
| A | B | C |/|||
+----+-----------+-----+ |||
| | | | |||
| D | E | F | |||
| | | |/||/
+----+-----------+-----+ |/
| G | H | I | /
+----+-----------+-----+
The scaling behaviour is as follows (assuming all other faces of the bounding box are divided as the front facing one):
Center Cuboid (E): Vertices within this cuboid stretch on two axes (Y, Z). Corner Cuboids (A, C, G, I): These cuboids do not stretch on any axis. Middle Cuboids (B, H): These cuboids stretch horizontally but not vertically. Middle Cuboids (D, F): These cuboids stretch vertically but not horizontally.
The slicing areas are defined by the SlicerPivotOffset and BorderXNegative, BorderXPositive, etc. These border values range from 0 to 1 and extend from the mesh's pivot (which may be offset by SlicerPivotOffset) to the maximum or minimum of the bounding box's axis. If all borders are set to 1, the mesh will stretch like a regular mesh during scaling. If set to 0, no stretching will occur. Typically, you'll want the pivot in the middle of the mesh and the borders set to around 0.8.
You can visualize the borders and pivot in the Actor editor preview using bDebugDrawPivot, bDebugDrawBorderX, etc.
This component is only compatible with static meshes that have CPU access enabled. Ensure you enable CPU access in the static mesh editor.