In-experience Constructive Solid Geometry (CSG) APIs now available in published experiences [Beta]

Update [5/1/2024]:

Hello Creators,

Thanks to the previous Studio beta and all your feedback and questions, we are ready to announce that the CSG APIs and capabilities are now available in published experiences!

We’ve also made the following changes and fixes since releasing the Studio beta:

  1. Fixed box decomposition which was not matching the visual output of the operation (it was offset to the origin of the CFrame as opposed to the physical center of part). This was causing incorrect culling of certain parts of the scene.
  2. Fixed issue where fully disconnected surfaces were being considered as different bodies. This meant subtracting a sphere from the inside of another sphere would actually create 2 bodies when split apart was enabled.
  3. Fixed interaction causing sporadic crashes during fast substitution updates (related to flicker removal with substituteGeometry).
  4. Miscellaneous small bug fixes

We are still actively fixing a few recent bugs and will push out fixes as soon as they are available but we wanted to get this out to you as soon as possible.

As a reminder, the following CSG APIs are available. Learn more about them here.


Performance improvements:

  • New “warm start” engine that speeds up in-experience CSG operations through caching
  • Incremental re-meshing through localization techniques to greatly improve performance


Our main goal with this release is to get real-world, in-production usage of these APIs so we can further tweak performance and fix any new bugs. At this point, we do not expect any breaking API changes so it should be safe to publish experiences with this new feature set, even though performance will continue to improve and bugs will continue to be fixed.

We look forward to all the amazing experiences you will make with these new capabilities. Please keep the feedback coming!


@BelgianBikeGuy, @TravelerUniverse, @syntezoid and @FGmm_r2
on behalf of the Roblox Geometry team


This topic was automatically opened after 9 minutes.

Time for some awesome releases :eyes:


Amazing, can’t wait to try this out and see what creations others come up with! :smiley:


This is the coolest thing I have seen in studio in a while! Cant wait to use it!


New hot Roblox update, thats cold


:happy3: This is a good way to step in creation of the physics game of Roblox.

One thing we all want is an easy documentation:
All we have right now is just the API documentation with a pretty fast exemple.

We should have a documentation based on this API explaining what does what, how to use it & with various exemples.

This will drastically help a lot of developers whose games are based on physics.

Keep the updates coming Roblox. :happy1:


Awesome! CSG is becoming more and more viable for real-time usage in many different situations. Thank you Roblox! :happy4:


“Thats one small step for physics, one giant step for developers alike!” — Me

Physics is really fun to play around in so having more physics building blocks to play with will keep me occupied for months to come! I can’t wait to use this to get home :wink:

I’m interested, how did you guys think about making this in the first place?


This is awesome!
I have one huuuge question though.

Having lots of unique geometry often causes a drastic increase in draw calls and whatnot.
Are there any ways or methods for optimizing this?

I could imagine in a destruction game where you want debris to lay around for a long time it’s eventually just gonna lag because of the draw calls.
High poly count might be unlikely since modern hardware can handle it pretty well nowadays but it’s still a very minor concern.


Will the lighting bug when using the SubtractAsync function ever be fixed? I’ve reported it many times since 2022 and haven’t received much information. In fact, I’m not the only one, as shown in this post. It’s amazing to see improvements being made to CSG while ignoring existing bugs with the old and even the new API.
bug_report.rbxl (47.9 KB)


In all honesty, I’ve been waiting for BasePart:GetClosestPointOnSurface for a while now as well as plenty of other folks, and I’m glad it’s been released to the public. This’ll accelerate my workflow even more! :smiley:


We have more upcoming fixes and performance improvements. As a proof we actually have a working internal fix :slight_smile:

Ceiling Material changed to plastic for better visibility

Current Issue:



To add onto this actually, may we ever get to see accurate points inside a MeshPart and union operations with CollisionFidelity.PreciseConvexDecomposition?


You guys are giving us good updates. I am skeptical that someone replaced the O.Gs now.



Major upgrade from the CSG V1 code!


If only the RopeConstraint had Physics like the old Demo from a long time ago had and wouldnt go through Parts


Oh come on, don’t tease me! There’s a laser gun in your inventory and you didn’t even use it for this demo?!

Jokes aside, being able to protect Constraints inside of affected parts is a huge step forward. Will this also apply to other Instance types, like decals, lights, and audio?


It’s Time to burn computer! LET’S GO


Does the CSG engine have any sort of parallelization support? Or are we forced to run each operation in serial?
I think these are 100% great improvements though i still don’t exactly feel confident in using the CSG engine past simple infrequent operations. I still fear that frequent complex operations will lag out to even freeze the server or even crash the server outright due to some sort of internal CSG errors. While i do understand that these issue’s aren’t exactly easy to fix for this kind of system i do also dislike the fact that there aren’t any specific ways we could properly optimize these things ourselves (like running the CSG operations in parallel) nor could we change some sort of precision/accuracy value in order to save time and resources for simpler operations that don’t require maximum precision. Right now sadly the CSG system is the only real option most developer’s have when it comes to real-time geometry manipulation within their experiences. While DynamicMeshes for example are a thing, theire still in beta and even then their use is mostly delegated to small niche things (plus the fact DynamicMeshes use their own specific instance rather than letting you throw this system any BasePart instance).