Intro
As a Roblox developer, it is currently too hard to scale meshes/models in a way that suits the individual needs of a build.
Problem
Stretch scaling limits how meshes can be adapted to different proportions. Currently the options are:
- Stretch Mesh: Just stretch your original mesh. It will probably warp grotesquely.
- Unique Meshes: Modify and reupload a new version of the mesh for each new situation. Uses tons of different meshes for the same purpose. Difficult to organize, lots of extra work, and high memory usage at scale.
- Individual Components: Break model down into lowest common denominator of components. Uses many parts, which becomes difficult to organize and reduces performance at scale. This problem is further compounded if components require additional separation for functionality such as recolorability.
Proposed Solution
I believe the following scaling features would solve this problem:
Mesh Slice Scaling
Slice scaling would work much like 9-Slice scaling for UI. Developers would specify 2 points on each scalable axis that would designate the scalable region. They could then resize the mesh without the undesirable stretching of the end pieces.
Example
By setting slice points, user could stretch fence without having to upload a differently sized fence or building the fence out of 3 separate components.
Mesh Tiling
Tiling could work similarly to texture tiling or grid layouts. Players could specify the properties of the cell, and it would tile as it stretched.
Hybrid
Ideally these systems could work together. Being able to select a specific region within the mesh to tile would be allow for the greatest potential for use and performance improvement.
Example
By setting slice points and tiling, the user could create a resizable fence with repeating fence posts
Benefits
- Reduce the number of unique mesh ids required for a build, potentially lowering overall memory cost
- Reduce the number of unique instances and parts required, further reducing memory and physics processing.
- Allow developers to remove unnecessary faces from repeating patterns, aiding rendering
- Allow developers to pass usage onto players for enhanced UGC options.
- Make world development, maintenance, and organization much easier
Use cases
There are many cases that would benefit from this tech. All of the following examples come from RoCitizens. Each example shows a high part count build with a repeating pattern that could be reduced to a single mesh or handful of meshes with proper scaling options. If anyone has any others, please add them in the replies!
Floor/ground/wall/ceiling patterns
Note: while some of these could be achieved with textures, there are often similar cases where 3D is the preferred or only option
Conclusion
Roblox modelers & builders often live in fear of the ominous part/poly/mesh count destroying the performance of their builds. These features would not only help performance, but also make building & maintaining these types of models much easier. Thank you for your consideration.