EditableMesh and EditableImage Improvements

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!

:desktop_computer: 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.


:magic_wand: 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

:hammer_and_wrench: Bug Fixes & Performance Optimizations

We’ve also been hard at work squashing bugs and improving performance.

  • Occlusion Culling: An issue causing EditableMesh driven MeshPart instances to be incorrectly culled has been resolved.
  • Collision Geometry Visualization: You can now properly visualize the collision geometry for EditableMesh objects in Studio, making debugging physics much easier. You can learn more about the collision fidelity visualization mode here.

:rocket: 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 EditableImage support for SurfaceAppearance as well as a host of WrapDeformer fixes. 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.

140 Likes

This topic was automatically opened after 10 minutes.

A lot of amazing new features, however kind of disappointing there is no bulk API to update vertex/vertice positions, that tends to be the main bottleneck for me. Any chance this is coming soon?

38 Likes

My only issue with the new Content properties is that they don’t seem to accept IDs. If you paste in a number, it will show an error popup saying that the content location is not valid. All the old properties would add rbxassetid:// automatically, while Content does not.

26 Likes

This is a huge ask, but any chance we could get functionality to batch different editable meshes together? For a specific use-case, I want to create voxel terrain using editable meshes in chunks but it ends up being better to just use blocks instead for draw calls.

7 Likes

Can we please just have the Memory Limit removed entirely? It worked perfectly fine before with several hundreds of EditableMeshes…

32 Likes

Happy to see these are being looked at. These two things are holding me back allot right now. For permissions, can we expect to have permissions to use all clothing and accessories assets from the marketplace? This is something thats holding me back right now and there isnt really a workaround for it

2 Likes

Removing the ID Verification requirement would be insane for Roblox as a whole. It is unnecessary.

11 Likes

Are you guys still planning to revert owning image permission requirement for making Editable Images in studio?

I can’t wait for that, would make my plugin a looot more useful

Especially since you can just use an asset delivery API link to reupload the image so I think studio plugins being allowed to skip that step would be nice

8 Likes

I am just wondering when this will no longer be locked behind ID verification

20 Likes

Great improvements, I wish I could take advantage of them, but EditableMesh is still unusable for me since the ownership check was added, and I am not the only one affected:

7 Likes

With these easier ways to get specific vertices, any possibility for a GetVertexSkinnedPosition() or having the Getter functions on skinned Editables return with the skinned influence (Maybe it could be a bool upon creating an editable, similar to FixedSize?)

Looking forward to the bulk APIs in the future! :happy1:

2 Likes

Any plans to lift the 1 EditableImage update per frame limit?

I’d really like to use editable images to do on-screen effects, but it’s not very viable until this limit is lifted, or at the very least dynamic.

8 Likes

Can I use EditableImages in a local studio file despite not being id verified? A Plugin I’m trying to use uses EditableImages but it throws an error because I’m not verified.

7 Likes

there is no limit if you use static editable mesh

3 Likes

I am aware, i sadly have no use for static EditableMeshes since i need to be able to add Verticies 1 by 1.

2 Likes

Can we get support to move bones of an editable mesh? Rather then just initial state but runtime state aswell? Also is there any way roblox can preserve blender vertex order on import. Im aware roblox reorders them due to a unique upload pattern of some sort but its annoying to have to create a static memory to organize the order when it could be preserved.

5 Likes

A suggestion: Would it be possible to create meshes without scripting? Like a Blender integrated into Roblox Studio?

This would certainly make it much easier to add unique models to the game without having to import them from the device.

2 Likes

Bumping this, I’m about 10% as interested in studio now than I was prior the permissions enforcement. Those few months were the closest studio has felt to a triple A engine for me. And seeing them make promises to tweak the restrictions was what signaled the end of my hope, seeing as roblox loves neglecting entirely the paramount aspects of cool new features.

This sounds really dramatic, I know they’re just asking for a picture of my face with a card. But do remember lots of your developers still utilize the engine’s offline compatibility, and would like to remain distanced from the obnoxious PR side of this tool.

4 Likes

I wouldn’t count on this happening. 3d modelling software is a heap to make (blender’s still considered a hobbyist software by some to this day), and it’s definitely not worth the investment. And regardless of roblox’s interest in developing their own editor, installing blender and picking up on a few tutorials is personally advantageous to using what only roblox offers (csg is awesome no shade to it)

2 Likes