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!