Plugin:
https://create.roblox.com/store/asset/77892245690267/CSG-Part-Bevel
Code (Lite Version):
BevelConversionLite.lua (8.6 KB)
(To install the code file, move it into the local plugins folder. Top studio bar, Plugins > Plugins Folder, then re-open studio. Select parts or models and click the Bevel Selected Parts button)
Hello.
I have created a plugin for a very straightforward part bevel converter. I created this to replicate the bevels of pre-2013, while adding support for more primitives such as wedges and cylinders. I mostly use this because it’s extremely satisfying to use, though it would probably be more useful to others.
Method
Blocks: Creates 6 parts for intersecting, using orientated bounding boxes to calculate their dimensions, and then reducing the size of a specific axis.
Wedges: Similar to blocks, but with a bounding box calculation for the slope. I aimed to not alter the size of the resulting part, so the top and bottom edges of the slope aren’t bevelled.
Cylinders: Intersects against another cylinder of reduced length with squashed spheres unioned to each end.
Performance
(Please refer to future posts for updated information)
Strengths:
(Mostly about blocks and wedges. Comparisons are to a NegateOperation method I used which only worked on blocks. Only from what I’ve tested)
- Requires far fewer operation parts.
- Greatly reduces the number of triangles of the final IntersectOperation object (for blocks, NegateOperation method averaged 92-96 triangles, compared to this new method which averaged 44-48 triangles (unpredictable error cases exceeding this can occur).
- Correctly displays surface normals via SmoothingAngle (most of the time).
Weaknesses:
- The current cylinder method is very inefficient. SmoothingAngle isn’t set here to prevent ugly surface artifacts. Cone primitives (
) would be a definite solution, but alas. Also, the simplicity of the method results in small differences in bevel appearance across cylinder sizes. - There is a 1-3% case of unwanted surface artifacts. What’s more confusing is that it is incredibly random.
- Converting high-part-count selections can take time. The Classic Happy Home model, containing 565 parts, took ~57 seconds.
- Despite supporting undo, it is best utilised where you can quickly turn the union back into its original part shape.
Potential Updates
- Support for stud/inlet surfaces by using texture normal maps, etc, once they’re released.
- Cylinder bevels to use cones if they are ever added or meshparts once they are compatible with CSG. Consequently, include a toggle for alternative methods.
- A bevel size slider. The default scale is based on the R6 torso mesh.
- Implement a dummy/overlay part type for blocks with functionality, such as SpawnLocations and Seats.
That’s all. Uhh, here’s a crab?








