Improved performance for GeometryService CSG APIs

I get the following error when I try to use UnionAsync, SubtractAsync or IntersectAsync within the Command Bar: New API is not enabled for plugin on publishing use yet

  1. What are the limitations preventing the use of these APIs?
  2. When will these APIs be available?
2 Likes
  1. What are the limitations preventing the use of these APIs?
  2. When will these APIs be available?

Hey @AlreadyPro,
We really want to enable this as soon as possible, It’s causing us to have to unwind some historical behavior with the Studio APIs and that is taking a bit longer than expected. Honestly the best timeline I can give you for this is Soon ™.

Will the soon to release occlusion culling count as it being “destroyed” if completely culled out?

Hey @DabidarZ
Occlusion culling refers to Rendering resources. Basically: don’t render stuff that’s not visible. This will reduce load on the GPU but. It will not affect the amount of data that is actually in the game. Think about it this way: You still want an object to move and respond to physics even if it’s behind a wall

~BelgianBikeGuy

7 Likes

@PeZsmistic
Thanks for bringing that up.

It’s something we really want to enable but there are underlying issues that need to be solved first: Trust and safety (moderation), permissions and IP (who owns the published thing and who can modify it), economy and so forth. Creating things ephemerally allows us to sidestep some of these issues but as we work through them, we’re hopeful we’ll be able to enable this.

~BelgianBikeGuy

3 Likes

When I use SubtractAsync, both parts have the same position. Shouldn’t their position be at the COM? How can I detect which part is higher than the other?

1 Like

I see it the most in Project Flight, a game where you typically go 200 - 300 kts.


And the developers have an issue with it and have to render cockpits separately and it results in poor quality cockpits.

6 Likes

Are you sure this is to do with speed, and it not being due to how far away the object is from the world origin? If it’s the latter, then that’s an engine limitation due to floating point precision that gets worse the further objects travel from (0,0,0).

6 Likes

This is just the result of how floating point numbers work, every single game engine has this. The only solution would be to teleport the player back to 0 on the X and Z axis every time a high distance is reached.

6 Likes

Hey @Lil_devboy123
Is there a way you could give us a minimal reproducible example?
Is everything welded together in this case or do they use other constraints to keep everything in place?
I notice you’re not play testing anything so this is visible both in studio and in experience?
Feel free to pass on anything to help us investigate
~BelgianBikeGuy

3 Likes

It might be better to teleport players to the opposite side of the map rather than the origin.

4 Likes

Is the geometry service method parallel safe?

2 Likes

If you want, I can give you their disc. Here is the full message with the video.


I can’t give you an exact size for the map, but here’s the PF Tracker website.

4 Likes

Also, I’m not sure if it’s welded or is using constraints.

2 Likes

Making GeometryService Parallel safe is on our TODO list and is something we’re pretty excited about

2 Likes

How would GeometryService parallelism work? Very likely this isnt yet 100% planned (since it only being on the Todo list) but is there at least a general idea you could share? Would it function by allowing other threads to do union operations or would it function by allowing multiple threads to compute a singular union operation?

1 Like

Hi!

I’ve also come across issues with the new CSG (GeometryService) both in terms of rendering and physics.

Created a post about it - GeometryService CSG producing unions that become invisible from certain angles & faulty collisions - #2 by Etheroit

2 Likes

Hey @Binarix

The results use off center coordinates to allow attachments and everything to be moved more cleanly between parts and to provide continuity between results of operations. It also allows the setting the CFrame of the source directly to the result even after a time delay.
Let’s say you’re shooting a falling object:

  • You do a CSG operation to remove a chunk from a block
  • the object keeps falling while the operation is resolving
  • You get the object back with a chunk missing but at the original position where the operation was called
  • you can now either substitute the geometry or set the CFrame of the result where the falling object is to prevent it from snapping back up. Note substitute geometry should remove the flicker also (and all bug fixes are in for that to work again so it should be enabled next week)

There is the property ExtentsCFrame that you can query. the position of the CFrame is the physical center of the Part.

Hope this helps
~BelgianBikeGuy

5 Likes

I have a scenario where I have a ragdoll rig that is being sliced. I want to detect, for the torso and limbs, the parts to keep the ball joint attached to, and for the other parts to be dropped. My current solution is to make super small parts anchored to each corner of the limbs, and to detect which sliced part the small parts end up in. Because of the position weirdness, I cannot reliably use this to detect proper part logic. I am not currently using CalculateConstraintsToPreserve because I do not understand how to apply it. I wish there were examples of usage. How would you recommend doing something like this: TLDR slice a ragdoll rig made of baseparts with ragdoll constraints.
Thanks!

2 Likes

Whoops - just realized ExtentsCFrame works for my janky solution, just wondering if there is any better way to go about it?
Thanks!