Allow Access to Mesh Data of Assets We Use in Our Games

As a Roblox Developer, it is too hard to programmatically read the geometry of meshes that I did not personally upload that I use in my game.

Realistically, It is very common to work on a game with thousands of assets uploaded by various accounts/contributors because Roblox Studio’s natural workflow results in models being uploaded under the user’s account. We are very close to being able to idiomatically work with meshes in our games, the closest we’ve gotten is with EditableMesh, and the last major roadblock was introduced with the permissions update of October 2024. post

There is consistent community feedback pointing to reasons why we want this:

  • Raycasting Directly on Render Geometry A use case suggested by Roblox’s own API docs
  • Mesh Analysis Tooling post
  • Skin Texture Projection post
  • Minimap Renering post
  • Emulating Roblox’s Humanoid texture compositor post
  • Extracting and Building Collision Data which is especially important for certain features in server authoritative games.
  • Analyzing meshes used to cheese competitive games post

We can freely use unpermissioned 3D assets in the game, and access its data through multiple roundabout paths, so as a developer it makes little sense why we are not afforded this ability idiomatically. Our best options are/were:

  1. Manually: Via exporting assets as .obj files from Roblox Studio
  2. Programmatically: Via downloading the asset directly through the Roblox Web API and decoding the binary mesh file. (this is the current work around)
  3. Previously: Via the EditableMesh API, before the 2024 permissions update dramatically reduced access.

Proposed Solutions
The reason given for this restriction is vague beyond “preventing misuse” so it is hard to speculate on potential solutions, but here are some which would solve our geometry data blockers to varying degrees.

  • Restrict publishing after loading unpermissioned assets: If a session has loaded an asset it doesn’t own into an EditableMesh, disallow the ability to publish assets programmatically for the remainder of that session.
  • Heavy rate limiting: Allow download of 5 - 10 assets per minute, with a burst cap of 200 or so. Bulk scraping is impractical, but reads for game logic or tooling become feasible.
  • Add a new lightweight geometry API besides EditableMesh: It can return a pure-luau structure, or a set of buffers. Something like AssetService:GetMeshDataFromContentAsync(content) -> {minBound, maxBound, vertexList, faceList, normalList, UVList, ...}
  • Read-only EditableMesh: This is perhaps the most obvious approach, but if it solved the problem, it should have been done already.
8 Likes

yeah this makes a lot of sense right now the only way to get mesh geometry from assets we don’t own is really manual and slow and It’s annoying

Hey!
Guy from the minimap post here.
I talked to a Roblox Studio engineering manager at RDC about this specific issue. They want to prevent automated mass asset theft, or at least make it harder to do so. He proposed to me a “Raycast Eye dropper” api. This would make it computationally expensive to steal assets, and open up a lot of use cases. Unfortunately, I have not heard anything on this front since RDC 2025 in September.

If the problem is mass-reupload via evading hash checks or whatnot, perhaps there could be several APIs which directly address the individual needs of Roblox Devs.

  • Eyedropper API / Render-Geometry Raycast addressed visual querying without giving access to geometry.
  • Pure Luau Vertex and Face Data addresses physical querying without giving access to any texture or UV information.

It would be difficult to use these in conjunction to mass-steal assets.

2 Likes