3D Importer Support for glTF Files [Beta]

Hello Developers,

Throughout all of Roblox’s history, there were two mesh import options: OBJ or FBX. Today we are excited to present you with a new option: glTF! This is a simple but powerful 3D scene format that’s been gaining popularity as an interchange format, especially in web applications and 3D marketplaces.

A glTF file can come in one of two flavors: a JSON format (.gltf) with binary data buffers and optional external files, or a pure binary format (.glb) packed into a smaller byte array. The latter is especially powerful as it allows you to pass around entire scenes in a single file (no more zipping and unzipping multiple files or dealing with incorrect texture paths)!

In this beta release, we are supporting 3D mesh models and PBR textures. Support for rigged models, skinning, and animations will come in a future update.

To enable this beta, go to File > Beta Features and select 3D Import glTF Support. Please restart Studio to enable these changes.

That’s it! You are all set to use the 3D importer as you would normally do, but now with a .gltf or .glb file!

Known Issues

In this Beta release, the relative paths for texture files will fail to be found. The workaround for now is to use full paths to your texture files, or embedded files. We will address this limitation soon after this launch.


We hope glTF can make your import process easier and would love to hear any feedback you have. We’re still very much developing this feature and are excited to hear your use cases and needs.

Finally a big thanks to the engineers who worked (and continue to work) on this project! @sonlytheonetime1 @OriginalSleepyHead, and an additional thank you to everyone else who helped make this feature a reality! @bruxisma @tasavix, and the many others who helped us test.

Happy importing!

133 Likes

This topic was automatically opened after 9 minutes.

Genuinely fantastic update, glad to have a format with a feature set exceeding that of FBX, while not needing to use the nasty Autodesk SDK to create models in that format! Nice work.

14 Likes

This is the single best news I’ve heard in a while.
Thank you so much to whoever came up with the idea for the new update.

Question

Is the Tris count limited to 20K or something else because I’m hoping it gets increased in the future especially so I don’t have constantly lose my mind over some things I prefer not to say.

8 Likes

The triangle limit is still 20k. In the importer we try and auto simplify meshes so they fit, but you could still get some funky results. Unfortunately the 20k limit is an hardware/engine limitation right now.

5 Likes

That’s kinda true…I had some instances where the importer either bugged or didn’t even import properly.

I am glad to hear you say that it’s limitation for right now
I sincerely hope you(in the future)are able to increase the tris count

6 Likes

Great update but, that’s disappointing. I just want to clarify- please don’t have auto-simplifying our assets as the long-term goal for importing >20K assets. I understand it’s an engine issue, but it would be vastly preferable on our end if we could have this raised more. (Or better yet automatically split it into multiple meshes instead?)
Anyway, thanks for supporting more import types!

2 Likes

Don’t worry, auto-simplifying is definitely not a replacement for higher triangle counts, and we’re not thinking of it as such.

We actually did have some conversations about splitting into multiple meshes, but ultimately we ended up deciding that simplifying was a better fit. One of the tricky things about splitting a mesh up is choosing where to split it (Do you just take random triangles? Split the model vertically? What if you need to split multiple times?). The right answer almost always depends on the context, and we figured it was best to not guess and let folks chop it up themselves if they wanted.

Simplification was a nice solution because (for the most part :stuck_out_tongue_winking_eye:) you’ll always get something out that still looks pretty close to what you put in.

10 Likes

Are there plans to look into increasing the tri limit at least? also, are you able to specify on engine limitation? If it’s performance-related, does that mean singular meshes that hit the limit have worse performance than multiple small meshes?

2 Likes

Does the Open Cloud Assets API plan to support glTF files as well?

1 Like

I’m not super familiar with gLTF; anyone have examples where it’s better to use over fbx format?

3 Likes

Okay, now how about raising the polygon limit? I had a MeshPart with 19,800 polygons (When the limit is 20K) and ROBLOX said it had to simplify it.

2 Likes

Yes! I’m not sure on the timeline but the goal is to have pairty between the regular importer and the API!

5 Likes

It’s mostly up to what you like using! They’re both capable of the same thing, it really just depends on what your tools support exporting or what the file you have is.

6 Likes

@felipe2008si @1Arenio @ffrostfall @Beloathed

Re: Triangle limit

First off quick caveat, our team works on the importer, but we do not work on the rendering, and the triangle limit is a hard rendering limitation.

This is my best-effort attempt at trying to provide a little bit more clarity as to the reasoning for the limit from someone who doesn’t work on rendering code.

The TLDR is: Roblox runs on so many devices, a large amount of which are very low-powered devices (e.g. old phones). Because of this, our rendering code has to be able to work reliably on all these devices which in turn imposes limits across the platform.

I believe one of those limits is that we cannot assume that 32-bit indices are available which forces us to work with 16-bit indices. Not all meshes are equal, and if you do the math, it is possible that you could construct a mesh that has >20k triangles with 16bit indices… Yes, but our limit is in triangles and not vertices, so we must have a triangle limit where no mesh with that triangle count can exceed the vertex limit. And this is how we end up with 20K triangles (It’s actually 21K I think).

It might be confusing if we switched to a vertex count limit, because the vertex count in your editor may be under the limit, but when you import you find you are above the limit. This is because editors and game engines usually count vertices differently. E.g. a 3D editor may say a cube has 8 vertices, but Roblox says it has 24 vertices, because each face has a different normal and thus cannot share any vertices with neighboring faces.

Note: I am not a rendering engineer, but I did discuss this with folks who have experience on this topic

As for what we are doing about it, this is something that is getting actively looked at. We are not satisfied with the current state; an arbitrary bit-width operating-system limitation should not restrict your ability to express and create. I unfortunately can’t provide more details than this (both because of lacking information and also because no decisions have been finalized at this time).

Hope this satisfies you a little bit more than other answer we have given on the topic in the past. In the meantime we will continue to try to make the importer as useful as possible :slight_smile:

48 Likes

Godot made an excellent article in 2017 explaining why gLTF is a superior format to other model files formats. Many developers don’t understand that waveform & FBX are outdated and incredibly basic; .obj doesn’t even support object transforms!

This file format is explicitly defined in a JSON format, supports modern features (such as PBR), has well-written documentation, and is (and continues to be) developed by some of the most prominent members of large corporations.

Good move on supporting this format :dizzy:

19 Likes

The fact that it’s actively being looked at is at least a somewhat re-assuring.

2 Likes

does this mean the file format allows for importing multiple meshes that have their own textures? and as long as each mesh isnt over 20k tris it should import all at once just fine right?

3 Likes

Beautiful explanation. Thank you so much- this is exactly the sort of thing that I want to hear.

3 Likes

Is there any significant load time difference when using gLTF/GLB as opposed to OBJ/FBX on a large scale?

2 Likes