[Client Beta] In-experience Mesh & Image APIs now available in published experiences

I’m having an issue where “DynamicGeometryManager” is taking a long time and causing lag

Heres the affected place: Untitled Game - Roblox

Can give edit access if needed

I’m noticing that something is being recalculated each time an editable mesh is updated
Even if I change just 1 color, this “TranscodeBoxMappedVerticesAndCalculateB” is run again and it takes a while
Not sure what it is but I can’t find a workaround
Screenshot 2025-01-04 053004

Setting eMesh:SetNormal() is extremely slow and causes frame freezes
It appears to be because of DynamicGeometryManager :: transcodeVerticesAndCalculateBounds


image

Why is this so slow? I have ~1000 Vertices sharing the same normal id, and all I’m doing is
myEditableMesh:SetNormal(normalID, newVector). 135ms is unacceptable.

Same problem with eMesh:SetFaceNormals()

4 Likes

Any update on if ID verification for editable mesh will ever be dropped/loosened to phone number verification or at least be lowered to unpublished experiences? I just wanna make an ocean that doesn’t immediately crash my computer thanks bye!

2 Likes

We’re aware of the lighting behaviors around EditableMeshes and are always looking for ways to improve the developer experience.

Our primary focus with EditableMeshes is to empower in-experience creation and streamline the building process for a wide range of users. While we appreciate the diverse ways developers are utilizing this feature, our current roadmap prioritizes enhancements that align with this core objective.

We’ll continue to evaluate feedback and explore potential improvements to lighting and other aspects of EditableMeshes.

For EditableImages and their drawing methods, I think it would be really cool if we had more ImageCombineType options such as Erase - or even better, the ability to write our own combine types with functions (e.g. an add blending mode formatted something like
function (a,b) return { R = a.R + b.R, G = a.G + b.G, B = a.B + b.B, A = a.A + b.A } end)

It’d also be great if there was a Transparency/Opacity parameter for :DrawImage() and :DrawImageTransformed(), as the other drawing methods have this!

That’s the wrong core objective. Centering a huge feature around a gimmick and limiting it because of said gimmick really sucks. It’s a cool gimmick, but it shouldn’t be the limiting factor.

4 Likes

image
Uhhh…

1 Like

I was trying to put a map of Kerbin onto a quad sphere (a sphere made from a subdivided cube), but there is an issue, which I think is quite apparent. Now, I did figure out that it has to do with how U is assigned to each vertex, and that U = 0 and U = 1 are not on the same vertices. I have no idea whether it is possible to fix this, or if a vertex can even have multiple UV coordinates, but any help would be greatly appreciated.

It doesn’t make sense that you need to be ID-verified for something as basic as an image or MESH.

Anyone could create their own image anyway using thousands of GUI objects. I figured out a way to display 20 different pixels per image frame, making this update pointless. Even more so because I need to give them my GOVERNMENT ID.

1 Like

For erasing things, there are a few options:
You can use Enum.ImageCombineType.Override and a transparency of 1 with EditableImage:DrawCircle or EditableImage:DrawRectangle.

For something like EditableImage:DrawProjectionImage you can use Enum.ImageCombineType.Multiply and Enum.ImageAlphaType.LockCanvasColor with pixels with no alpha where you want to erase them.

A more explicit erase option is something we could consider but I’m slightly worried about some inconsistency in how it would work for the primitive drawing methods vs the more advanced drawing methods might make it confusing.

Custom combine types would be hard to implement in way that wouldn’t have too much performance overhead for crossing the C++ to Lua bridge for every pixel.

2 Likes

How would I use Enum.ImageAlphaType? I was assuming at first that it would be included in the options dictionary for EditableImage:DrawImageTransformed, but at the moment its usage is not documented anywhere.

The fix for rendering completely flat planes is now enabled, please let me know if you’re still having issues with it

2 Likes

Cmon guys, locking such a game changing feature behind having to submit an ID is insane. Please revert this.

2 Likes

May I ask you have you managed to get 20 pixels per 1 frame? Best method I know is 10 pixels from UIGradient.

Hi everyone!

ICYMI: We announced a new API – DrawImageProjected !

This allows you to add decals and images to assets, including avatar bodies. For more information, please check out our devforum post here.

Thanks

1 Like

ColorSequences can store 20 different color values. So if you make the gui 20 pixels long then each “part” of the gradient is perfectly distanced. I assumed it would have some weird interpolation issues but no it’s looks great.

Oh, so you indeed used it like 1 point = 1 pixel.
I used similar approach but scaleable, and it allows twice as less sadly.

When it comes to the EditableImage memory limits, how does it apply to client-side only objects? Say I use up the memory on one client for UI, would another client be affected by those limits?

The limit is per client so other clients would not be affected.