Welcome to the May-Jul recap for all things related to 3D asset import! It’s been a little longer since our last update, but we’ve been busy behind the scenes with some major projects that we’re eager to unveil soon. In the meantime, here’s a quick recap of the latest importer improvements. Let’s take a look!
New Features
Performance Improvements for Settings and Presets
We have recently enabled some performance improvements with how the importer settings are applied to your incoming scenes. This most drastically affects settings such as Name and Anchored for large, detailed scenes, and also affects performance of settings presets.
In our benchmarks, we’ve seen as much as a 2x speedup for editing the name of a complicated scene, and as much as a 30x speedup for applying a complex preset to a complex scene, or resetting the importer back to Studio default settings.
We hope this makes these features much easier to use!
Added Support for Zero Influence Bones
You can now import bones even if they have zero or near-zero influences. Previously, the importer would remove all bones with these minimal influences, but you can now toggle off that feature through the “Keep Zero Influence Bones” checkbox under File General settings.
Fixed issue where attachments were rotated incorrectly for skinned meshes
Fixed issue where animation preview didn’t update if there were multiple animations in a file
Fixed issue where skinned meshes’ size didn’t update correctly after multiple scale changes
Fixed an issue where error messages were cut off in the upload results window
Fixed an issue where the Anchored setting was not applied correctly to some meshes and models
Fixed an issue where the file selection dialog did not mention that glTF/glb files are supported by the importer.
Fixed an issue where attempting to import a scene as a package resulted in an error
Various tweaks and improvements
Other News
While this post is a bit belated and definitely shorter than previous versions, rest assured we’re still working hard on bringing you some exciting features in the future! Some examples include allowing you to select multiple files to import at once, importing other media types through the same import button (replacing the bulk importer), and bringing you various improvements to your content workflows (perhaps you’ll hear more at RDC ). Soon, we’ll be adding small updates to other features under the umbrella of this post, so stay tuned!
If you made it this far, congrats! The question of the day is: if you could manifest something to be announced at RDC (relating to managing 3D assets for Roblox), what would it be and why?
These changes are all very awesome, and make Studio a more professional software – which is awesome to see!
However, I do have three comments, or rather requests, that I would love to see added:
My biggest pain-point as a game developer lies with optimizing meshes. Specifically, there’s no way to reuse the same meshid for geometrically equivalent meshes! I had to write a script which converts all meshes in our map into EditableMesh objects, and then use the vertices’ positions to create a unique hash for every geometrically unique mesh. This, however, is very cumbersome - EditableMeshes do not cache results of previously-downloaded meshes; so it takes a long time to download ~2000 meshes every time I want to optimize 10 meshes! And even then, it is not perfect; even when grabbing the vertices’ local positions, they suffer from floating point errors – I’ve added epsilon values to find approximate meshes, but again, this is still a time-consuming process given that meshes need to be redownloaded each time.
User-made plugins are lagging a fair bit behind Studio’s official plugins; there is no way to let a user export a Roblox object as a .obj automatically – they either have to manually right-click and export selection, or use a deprecated API, which there is no newer replacement for.
Beyond prompting for exporting .obj files, it’d be amazing if there was a way to prompt a user to upload an image also! For my internal plugins, I am forced to upload an image myself, and feed that asset id into the plugin before continuing on with my flow – which is a bit hard to automate without perhaps using httpservice and writing a script in another language to utilize OpenCloud’s upload API. Letting plugins have access to prompting images would be much easier!
Sorry for the packed post – these are just my issues that I’ve ran into when trying to automate a very boring and time-consuming workflow for our game.
EDIT
I would also like to note that for my second point, there’s also no way to know if/when the file was saved. I ended up having to write a python script to track the files, and poll it through HttpService to determine whether the user saved the file. It’d be awesome if an updated method for the deprecated API could be updated to yield until the user saves – or cancels – the file save!
That API is deprecated? I see no tags saying that it is. Regarding your third point, there is an API which allows plugins to import images however not upload them on behalf of the user. I believe it’s undocumented so you’ll have to do some digging to find it.
It’s great that they added this new option to import bones with minimal or no influence. Many developers will agree with me that when bringing a model with bones into Studio, bones with minimal or no influence often couldn’t be imported. This new feature is much appreciated
If I could manifest something to announce at RDC 2024 related to 3D asset management, it would be implementing a system for automatically reviewing and correcting assets. This would clearly include the ability to identify issues like incorrect geometry, missing materials, or improperly configured bones, and provide solutions or suggestions to fix them before the asset is fully imported. This would save time (I know there’s already a system like this in the 3D importer, but this would be to improve it)
It doesn’t have the tag indeed, however the way to access the class – through calling PluginManager() – is not only deprecated, but also just flat out not shown anywhere in the autocomplete. The top of the wiki page has this written:
Regarding the image uploading – yeah, it makes sense to not let plugins fully upload. Just giving a prompt to let them do so is more than sufficient I spent a while searching through APIs, but was unable to find anything about image uploading (which makes sense, given that you mentioned it being undocumented). If you are able to link to any API dump which contains information about it, I’d greatly appreciate it!
The workaround noted there works. I.e. the ‘old?’ way of importing animations has that issue fixed.
Also in general an easy way to import multiple animations would be nice. Currently they’re published to roblox in bulk. That’s nice but you still have to import them one by one in the animation editor.
" Fixed an issue where the Anchored setting was not applied correctly to some meshes and models"*
Thank you so much for fixing these guys it was driving me nuts! o.o
As a suggestion I hope that would be cool [in my opinion] to see in the future, would love to. I hope in the future we see a meshes/models panel like the materials one so we can possibly select our already uploaded meshes really fast and bring our kits into studio and so on. Would be awesome to have something like that, especially for huge maps. Thank you for what you do!
Can’t wait to see what is around the corner for Roblox! it is getting better and better for anything PBR. I love all the updates so far, great job!
The sheer number of meshes I import into my game for custom characters that are simply identical geometry but mirrored is enormous. Roblox should be able to mirror geo to reuse one mesh and save memory when importing in this situation! There should be some way we can tag these objects, or some way for studio to infer them. Being able to mirror meshparts (even if just at edit-time) would be a huge productivity boost just by itself, even if this is just along one axis.
You’re right that we don’t have this function in the studio, but we can handle the skin-weight correspondence using a tool like Blender with weight paint to paint the part of the body that will be affected by that bone.
If we could have object attributes be parsed and imported alongside corresponding geometry, that would be brilliant. If I’m not mistaken, when you assign attributes to objects in Blender, export as FBX, and then import it into a game engine like Unity, those attributes get carried over in-engine. I would love it if I could assign metadata to my level assets in my 3D modeling program and have those values be setup in Roblox by the 3D importer!
Another major request of mine is if we could have the 3D importer automatically divide up large meshes into smaller chunks when they exceed the 2048 stud limit. This is a huge pain for me currently.
Excellent bug fixes! I use the 3-D importer a lot and I have noticed every single one of the things you mentioned as a recent bug. It would lag horribly when trying to rename an asset that is large, and multiple animations you had to click back and forth to get them to play. I occasionally notice compatibility issues such as lack of support for texture maps.
There’s no API for uploading unfortunately, what I was talking about was a API to allow the user to pick a file, which can be an image file, that is then given to the plugin as a image blob.
We’ve found that animation importing via the Import 3D window doesn’t work correctly - while it does work via the animation tool. Only certain elements animate (on a custom model). Importing the same FBX produces very different looking animations. Making this process simpler would be great. We can provide an FBX that reproduces this if that helps.
look good idea i have a idea ai that help u build a map that you till it how u want your map I down know if make a ai but people not help me out for new people try use Roblox studio you talk to ai it help you out on map people don’t want ask for help so u ask ai for help
THIS!! If you create levels outside of Roblox and import them into studio it will treat each mesh as a unique mesh instance, so batching will be completely disregarded here.
I had to write a custom plugin where if I want to import levels I have to import every single mesh that the level requires before hand, then from blender it stores the transform/size data and in Studio it would then assemble the level based on this data with the imported props, the performance gain is massive, the draw call amount went down by MILES.