Performant Builder || Use meshes instead of parts!

Performant Builder is a plugin designed to keep builds in your game as optimized as possible. Parts, spheres, wedges, etc. are replaced with Mesh Parts, which allow for more optimized potential, such as render fidelity, collision fidelity, etc. Mesh Parts also do not re-calculate geometry when CFrame properties are changed, making them better to program.

When the button is clicked, you are prompted with a menu like this:
image

Build Options

Basic

Basic allows for your basic geometry to be added without any further thought.
image

These basic shapes are:

  • Plane
  • Brick (Cube)
  • Cylinder
  • Wedge
  • Sphere
  • Cone

Over time I may add more to this, such as torus, ring, etc.

Smooth Shade

image

The smooth shade section allows you to import any of the shapes with smooth-shaded normals:

  • Cone
  • Cylinder
  • Sphere

Smooth shading does not add triangles to your part (the wireframe is the exact same), but rather, modifies the shaded normals!

An example of a smooth-shaded cone, versus normal cone:

Yet, the wireframe is the exact same:

Poly Mod

image

Poly Mod options allow you to make a shape more or less composed with triangles. This modifies the detail for performance or visual reasons.

Below are some spheres with different poly mods:

Missing Sides

image

The missing sides options are exactly that: meshes with missing sides.
This directly reduces the number of triangles. For example, a default cone with a missing bottom will be 30 triangles less (32, versus 62).

Conversion Options

Converting to meshes

You can use this plugin without effort! If you have existing maps, models, etc. that you would like to be mesh-only, you can convert it all with a single click!

Convert all to mesh

This converts everything in workspace to meshes.

Convert selection to mesh

This converts anything selected into meshes.

Installation

You can find this plugin on the Roblox marketplace. This is a free plugin.
https://www.roblox.com/library/6509315591/Performant-Builder

Connect with Others

Want to showcase the performance differences, report bugs, contribute edits, etc.? Feel free to join the iG-Plugins Discord server!


Thanks for reading! :heart:
If you comments, questions, concerns, or feedback, let me know in the replies below.

Be aware I am looking for genuine feedback. I will ignore non-constructive criticism.

124 Likes

Hmmm, this looks interesting, indeed, I tried to do something similar in the past. I thought about using a plane with only 1 side rendering instead of a whole part to make a floor, I ran a test and, welp, the results were awful, the plane mesh was much worse than the parts.

Did you perform any tests to check if this really improves performance?

1 Like

GPU usage is lower with mesh parts than with parts.
In addition, less triangles = less GPU usage, and this goes for any game engine.

It’s the biggest difference when done large-scale.

3 Likes

When I turned on DoubleSided on the plane, I found this:

2 Likes

Just don’t turn on Double Sided.

19 Likes

This is very cool, although, how come the cylinders and spheres do not have any smooth shading / auto smoothing?

4 Likes

Yeah, this would be a great additive because roblox cylinders become more low poly as u scale it.

1 Like

I think spheres are a great example here, thanks for bringing that up.

At the moment, the default sphere part is extremely unoptimized. It’s extremely smooth at the cost of a very high triangle count.

The plugin offers three variants of the sphere: low-poly, default, and high-poly. Even the highest-poly sphere has less triangles than the Roblox-default.

However, if this becomes an issue of detail, I could be willing to make a smooth-shade cylinder and sphere. Could you tell me what use case to you personally this would have?

2 Likes

Update

You can now bulk-convert parts to meshes

image

Do you already have maps made that use parts? Click Convert to Mesh to quickly convert them all to performant meshes! This dropdown box also supports parts designed with SpecialMesh.

Hopefully this helps!

9 Likes

This is pretty cool. Really like the idea. Quick question tho, would there be a chance that we could get a new window prompt that we could use to spawn bricks from (pic below if you’re confused)? As cool as this is, inserting parts from it does work against most people’s workflow.

1 Like

I don’t believe it. Are you telling me we can turn any part into a mesh? This is too good to be true.

@iGottic I was about to make a post asking if it was technically possible to convert a part into a mesh without any exporting and importing.

4 Likes

Very interesting concept! This seems really useful. Bookmarked!

1 Like

I replied with this before but it wasn’t worded correctly so I deleted it, sorry if you’re seeing it twice, lol.

I get the part of this plugin for low poly cylinders/spheres, but I’m not sure why you added the advanced objects like PartNoBottom or PartOnlySides.

A normal Instance.new("Part") isn’t considered ‘DoubleSided’ by the engine. So it already doesn’t render the sides unless you look at them.

For reference, using WireFrame:

While you are right, I’m (somewhat) certain parts don’t recalculate geometry either when changing their CFrame. I could be wrong but I couldn’t find any documentation on whether or not your statement or mine was correct.

If you found documentation I’d really like to read it. Other than that, I really do enjoy your plugins, great work!

3 Likes

Without having the faces there, the engine does not have to check those areas during rendering. It’s miniscule, and only does something if used large-scale, such as a map.

Parts do actually recalculate geometry. There isn’t documentation on this, so you are required to experiment with it.

One way to indirectly see this is to create two projectiles, one is a part, one is a mesh. Make them anchored, and move them using the CFrame property. You will notice that when the part moves, especially in mass quantity, you will see a huge performance dip. It’s not nearly as severe for meshparts. The only explanation for this, assuming the code is the exact same, and you test in the same environment, is that your geometry calculations are taking memory.

5 Likes

One of my developers mentioned having a dockable window as well. I do plan on doing this when I have time, it shouldn’t be hard anyways :stuck_out_tongue:

Until then, you could try building normally with parts, and use the Convert to Mesh option in the plugin.

3 Likes

Yes and no, but yes. Just basically copy the properties of the part to a cube mesh.

3 Likes

Meshes will always be less performant in the engine as they are not directly baked into the engine directly, unlike parts. Yes, it is still performant due to instancing, but it is nowhere near performant enough to actual parts. I’ve had an argument numerating over the same basis, which was whether I should convert models into unions for better instancing, and the answer was that keeping the models as parts would be more performant in the end.
Cool concept, but it is not based off of any benchmarked or elaborated foundation, and thus is illegible for production-use in my view.

9 Likes

After being used in my projects, low-end users reported frames 20-30 higher, making it drastically improved for lower-end devices.


Meshes are actually more performant.

  • Their geometry is calculated a single time, not multiple times.
  • The render fidelity calculations are more performant and fresh.
  • Works much better with StreamingEnabled

Basic tests can back me up on all three of these points. In addition, after applying it to countless projects of mine with hundreds of players, and receiving positive results, I believe I prove my plugin practical to use.

Parts aren’t awful, but they don’t do as well large-scale. Yes, they are baked in-engine, but with how Roblox handles it, it isn’t enough.

5 Likes

Yet again you are utilizing anecdotes, which are the lowest form of evidence. What I am explicitly looking for would be a benchmarked and elaborated foundation, not criticism from an unknown amount of users that don’t provide any actual form of data other than “my FPS is higher!”.

That is the exact opposite, I’ve no idea what you are on about.

This is a Roblox blog post from 2012, saying Roblox worlds could easily scale up to 1 million+ parts without experiencing deficiency in speed. Today is 2021, so I’d imagine it would be easy to assume that it’s much more performant now.
My own game used 300,000+ parts at it’s peak, with the map size being 20,000 x 20,000 studs. None of my users reported any low frame counts, so yet again I’d like to see elaborated and benchmarked results showcasing otherwise.

Also, mesh LoD don’t work with parts that have less than 20 triangles or so - I tried turning it on for my game’s lanterns, without being able to due to a minimum triangle limit being required.

Only noticed this just now… You must be kidding, right?

This is something extremely stupid… Just because you experienced lag (which I’d like a test place of), doesn’t mean this automatically becomes the only option. What??

8 Likes

With this plug-in, we are a step closer to being able to model in Roblox Studio! I can’t wait to convert my game to meshes using this plug-in, but it’ll take a while.

2 Likes