Mesh Importer really needs some improvements

As a Roblox developer, it is currently too hard to efficiently use the mesh importer with the goal of having a optimized and performant game.

The current Mesh Importer is great, there has been many improvements over the years and I’m all in for them! But there are several fundamental flaws that really need to be addressed with it that are really detrimental to certain developers.

The main issues that the Mesh Importer is causing me and likely other developers are the following:

NO INSTANCING:

The mesh importer does not respect instancing in FBX files. This means that if i want to import 2 cubes from blender, that are both referencing the same mesh asset but are 2 objects, roblox will upload these as individual MeshID’s, which not only reduces upload speeds because each mesh is treated as a unique asset, but also causes severe performance problems. A lot of developers likely build their scenes or levels in blender, when these are imported trough FBX files they do not use instancing, resulting in SEVERELY inflated drawcalls, which gives you incredibly poor performance. HOWEVER, Instancing does work for SurfaceAppearances in 1 FBX file, this means if 2 objects are using the same material in a single FBX file they will not have unique asset ids and share the same ids.

NOTE FOR SURFACE APPEARANCE BATCHING: this does not work with the new FBX importer queue! Surface appearances even if both FBX files are basically using the same material will get unique asset ids = memory usage will be increased for no reason.

Importing Levels or Scenes is not viable:

As I have mentioned above, the biggest issue is the draw call problems with it not using instancing, but lets imagine the issue above was fixed. If I have 1 scene imported already and it properly used mesh instancing/batching, but I want to import another level, which also uses the same meshes as the last level, the next level will again use instancing but upload new asset ids. I really wish there was a way that is similar to UE4/UE5, where if I import a mesh again, but the importer detects that this mesh has already been previously uploaded, it would instead just ask me if I want to reuse the old mesh, basically making sure my entire imported scenes are making use of instancing efficiently. The same can be said for surface appearances, if it detects that a surface appearance with basically the exact same image data exists, we should use that one instead of making a new one.

Materials are not named on import (SurfaceAppearance):

The 3rd issue is that for the sake of organization, in the importer materials are shown with their names that were shown from Blender / Whatever the FBX file said the material was called. The issue is that when you then import it, the created surface appearance is unnamed and will just be “SurfaceAppearance”. This is tedious because I want to reuse my materials when I import things, not create a new one, so I would want to search trough my Roblox game if the material already existed, but I always have to manually rename them after importing, it would be greatly appreciated if this can be addressed and materials would be automatically given the name that was in the FBX file, for the sake of organization and reusability of assets for performance.

Conclusion:

These issues are a daily issue for me, I had to develop several tools to assist me with this which are still tedious and make this process a lot more hard and time consuming for me.

If you have any other issues or improvements you want to talk about with the mesh importer, please let me know!

If the studio team were able to resolve this issue that would be greatly appreciated!

11 Likes

You dont have to use two different IDs for a cube. just use the same id and reuse it in game, you can change the materials and add different texture

If you want to import a static map, then i would suggest you importing it as 1 mesh which is way more performant than having the map made of roblox parts or small other meshes.

You don’t seem to understand, the importer doesn’t respect this by default which other engines like UE4, UE5 and Unity do.

1 Like

Unreal engine has a static mesh class where you can resize shapes.

in unreal engine all the objects are in your own device while in roblox when you upload a mesh the mesh itself is being uploaded to their server and it has an ID you can call it.

If you want multiple cube mesh ids you can just upload it 1 time, and dumplicate the cube mesh.

I do agree that mesh parts need to be more optimized and i already wrote a lot of it.

You don’t seem to understand my use case, if I’m importing a SCENE from blender. Let’s say a full level, it uses a specific mesh 20 times, the importer would upload these as 20 individual meshids instead of 1, this results in no instancing and 20 drawcalls instead of 1. Not everyone builds their scenes in Roblox.

1 Like

Because you need to combine the mesh in blender. The key for that is CTRL + J.

Or you have to either bake or make the box as saparate mesh and then import it in roblox and duplicate the mesh id and add it into your map inside roblox

You still do not understand…

What you are describing is basically Actor Merging from unreal engine. It’s a very destructive process that isnt always the solution!

Read about Mesh/Geometry instancing here:
Geometry Instancing Wikipedia

If you merge multiple objects in blender, and combine their vertexes then it will be a single mesh imported into roblox.

Yes but what if you want to reuse that prop multiple times? If you have the same mesh 2 times in roblox it will consume the same power as if you are rendering 1 not 2.

If you havent uploaded the mesh in roblox already, you saparate the mesh you want to in blender, export the mesh only, import it to roblox and re-use it, simple right?

Use the same id and it will render all the instances of the same mesh id as 1 call

What if you built your scene in BLENDER and you want to simply just import it! The current importer doesn’t work for such a use case.

I dont understand what you want to achieve, please write in more details.

if you made an entire scene in Blender. you should export it as the least number of meshes as you can(Sadly there is a 20k tris limit for mesh in ROBLOX).

If you mean that there is a BOX or something inside the map that you want to copy multiple times and use it dynamically in your map then you should remove all the boxes inside your blender map, import the box as individual mesh in ROBLOX and then re use the Mesh id inside ROBLOX.

Everything Repetitive like trees, fences, Cars, etc should be as 1 mesh duplicated in ROBLOX

I didn’t even know blender could let you reuse source meshes in this way. Does this information get exported out in the formats that Roblox can import? Maybe that’s why Roblox isn’t taking advantage of it. Would be a major game changer if they could. I would switch a lot of my world workflow into blender. This would help me keep unique mesh count down when detailing custom characters too (e.g. spikes, horns, teeth, eyeballs, and other detail pieces).

1 Like

FBX, GLTF all already export instancing, that’s why unreal and unity both already support this on import.

2 Likes