Hey Creators,
We’re excited to announce a wave of improvements to the EditableMesh, EditableImage and related workflows! These updates are designed to streamline your workflows, and improve performance when working with these APIs. These new improvements can be used in your published experiences today.
Many of these changes are a direct result of your feedback, so thank you for continuing to share your thoughts and push the boundaries of what’s possible on Roblox.
Let’s dive into what’s new!
Studio Inspector Support for Content, EditableMesh and EditableImage
The Studio property inspector has been updated to better support the Content property. It now displays a more intuitive UI for all content types and shows specific icons when a property is being driven by an EditableMesh or EditableImage object. This makes it much easier to see what’s going on at a glance.
The legacy ...Id properties like MeshId and TextureID will eventually be hidden in the property inspector after we finish migrating all of the other existing asset URI properties to Content. We’ll make another announcement in advance of that later change.
Screenshot of the Studio properties window showing the new icons and UI for an EditableMesh and EditableImage assigned to a MeshPart’s MeshContent and TextureContent properties respectively.
New EditableMesh APIs for Simpler Workflows
We’ve added several new functions to EditableMesh so you can clone meshes with less boilerplate and implement common mesh operations in straightforward ways.
Create an EditableMesh from Another EditableMesh
You can now easily clone or create a new EditableMesh from an existing one. This is perfect for creating variations of a mesh without starting from scratch.
-- Create a new EditableMesh based on an existing one
local newMesh = EditableMesh.CreateEditableMeshAsync(Content.fromObject(existingEditableMesh))
New Vertex-Face Getters and Setters
We’ve introduced a set of APIs for directly getting and setting attributes on face “corners” as specified by a vertex/face pair. This is useful when you want to perform operations on specific vertex/face pairs.
GetVertexFaceColor/Normal/UV(vertexId, faceId)SetVertexFaceColor(vertexId, faceId, color)SetVertexFaceNormal(vertexId, faceId, normal)SetVertexFaceUV(vertexId, faceId, uv, uvChannel)
Direct Attribute Lookup APIs
Finding all the vertices or faces with a specific attribute is now clearer and more efficient. These new functions allow you to directly query for geometry based on its properties which is great for complex mesh analysis and manipulation.
Instead of using GetVerticesWithAttribute or GetFacesWithAttribute you can now directly use one of these new APIs:
GetFacesWithColor(color), GetFacesWithNormal(normal) or GetFacesWithUV(uv)GetVerticesWithColor(color), GetVerticesWithNormal(normal) or GetVerticesWithUV(uv)
New Vertex Getter APIs
To bring vertex manipulation more in line with face manipulation, we’ve added a corresponding set of getter APIs for vertices.
GetVertexColors(), GetVertexNormals(), GetVertexUVs()and GetVertexFaces()
Here’s a quick before / after example of how these new APIs can speed up your workflows. In this example, EditableMesh is used to set the corner of all faces that touch a particular vertex to the same color id.
Before
local v_fid = mesh:GetFacesWithAttribute(vid)
for i, fid in v_fid do
local v_vid = mesh:GetFaceVertices(fid)
local v_color = mesh:GetFaceColors(fid)
for j, vid_j in v_vid do
if vid_j == vid then
v_color[j] = color_id_to_paint
end
end
mesh:SetFaceColors(fid, v_color)
end
After
for i, fid in mesh:GetVertexFaces(vid) do
mesh:SetVertexFaceColor(vid, fid, color_id_to_paint)
end
Bug Fixes & Performance Optimizations
We’ve also been hard at work squashing bugs and improving performance.
- Occlusion Culling: An issue causing
EditableMeshdrivenMeshPartinstances to be incorrectly culled has been resolved. - Collision Geometry Visualization: You can now properly visualize the collision geometry for
EditableMeshobjects in Studio, making debugging physics much easier. You can learn more about the collision fidelity visualization mode here.
What’s Next?
Our team is dedicated to continuously improving the feature set and the broader tools for mesh manipulation on Roblox.
- We are actively investigating solutions for key EditableMesh usability impediments, including Replication support, Permissions, Memory budget limits, and ID Verification requirements. While we don’t have a firm timeline to share at the moment, keep an eye out over the next few months for updates.
- We are working on performance improvements and bugfixes for the EditableMesh Raycast APIs
- We are actively working on
EditableImagesupport forSurfaceAppearanceas well as a host ofWrapDeformerfixes. Keep an eye out for updates on those over the coming months as well.
Happy editing,
@lweoalawelu, @iridiumegg, @L3Norm, @monsterjunjun, @ContextLost, @Penpen0u0, @cyrian_sun, @c0de517e, @syntezoid, @portenio, @FGmm_r2, @maxvee and @gelkros on behalf of the Geometry, Rendering and Content Interop teams.


