Our epic Part Surface trilogy is coming to an end.
As Roblox evolves, there are older features that don’t make sense anymore, have better alternatives, and only confuse new developers. SurfaceTypes and the Joints they create are one of these features. Over the last several years they have lost functionality due to the new physics solver and other updates. We are continuing to slowly move them to the background in order to put more focus on a singular Studio building standard.
The goal is typical of Studio changes like this: prevent heavy use of part surfaces going forward, while maintaining existing game behavior.
The following is now live:
- The Surface Tool (surface selection drop-down on Studio top ribbon) no longer performs any joining operations on parts. It will only ever apply the surface texture.
- The “Surface” and “Surface Input” sections of a Part’s properties are hidden if the part is all Smooth. If the part has a Surface assigned to a SurfaceType other than Smooth, the sections will be visible as usual.
The following are now also live:
- The Studio move tool’s “Join Surfaces” option will ignore Hinge and Motor surfaces. It will create Weld instances on all SurfaceTypes.
Workspace:JoinToOutsidersAPI will ignore Hinge and Motor surfaces. It will create Weld instances on all SurfaceTypes.
After all this, SurfaceTypes will truly have no impact on building.
Why the wait?
We want to give some time for developers that may still be using Hinge and Motor surfaces to switch to HingeConstraints. Additionally, anyone currently relying on the
Workspace:JointToOutsiders API to generate Rotate joints at runtime will need to create them at edit time and save, or switch to using
MakeJoints. The delayed second phase of this change is now live.
How can I still create these old JointInstances and SurfaceTypes?
- They can all still be instantiated via scripting, and
Model:MakeJointswill still follow legacy joining rules. Using Constraints instead is encouraged however. (Also note that
ManualGlueare all functionally identical to the
Will my old toolbox models and games break?
- No, thanks to the explicit JointInstances change (the first chapter in the trilogy), all old models and places will build their respective joints based on part surfaces if they aren’t already there.
I use the Hinge and Motor SurfaceTypes to mark part directions! What do I do now?
- We are aware of this use case and the problem it solves, but I think we can all agree that slapping a hinge surface on it is not very elegant solution. There are several alternatives, and we plan to further solve this problem with the new Lua Dragger/Move tools.
- This awesome plugin by @PeZsmistic :
Extra Dragger Gizmos - Disable selection box, show selection faces, show selection origin
Attachments are easy to insert and very light weight. You can toggle multiple levels of detail, and in-game visibility can be toggled with the
You can add HandleAdornments to parts. This example shows a cone and cylinder adornment. (Thanks @Zeezy2204!)
- Using textures/decals
This is another common method that could also provide the benefit of showing a grid. You can even use the SurfaceTypes still shown on the Surface tool, which will show the Properties section again.
- Make a tiny yellow cylinder and weld it to the side of your part.
I’d like to convert the old JointInstances in my game to using Constraints. Is there an easy way to do that?
- Yes, you can use this plugin I made. It automatically converts all the legacy JointInstances to WeldConstraints/HingeConstraints from a selection of parts and models. If you have scripts interfacing with your legacy joints, you will need to update your scripts.
Part SurfaceTypes have no impact on how surface joining occurs. They only change how it looks. The studio dragger will not create Rotate joints from Hinge surfaces.