Improving Viewer Performance

In theory, there's no limit to the complexity of models that can be displayed. However, WebGL is hardware-accelerated, so the viewer's performance depends greatly on the machine displaying it. This is even more important to consider for mobile users. Many different factors can affect how long a model takes to load and how well it performs after it's loaded.

Download Time

Before a model or scene can be rendered, the viewer needs to download and prepare all the required assets. This is what happens during the Loading 3D Model screen as well as the first moments of rendering when higher-resolution textures are loaded (the blue loading bar across the top of the viewer - if you want to avoid this step and only display the model when the full resolution textures are ready, try the preloadembed parameter).

Textures

All the texture images need to be downloaded, so using many high-resolution textures can greatly affect download time. We optimize texture file size after you upload a model or make changes to materials, and we will never use a texture larger than 8192×8192 pixels. However, you should minimize the number of textures and the size of textures as much as possible.

Scene Optimization

While not technically part of the "download", several scene optimization processes take place before the scene is rendered. This can greatly improve viewer performance. It usually does not take much time, but the more complex the scene, the longer this will take. The following things happen during scene optimization:

Scene optimization is disabled by default in the 3D Settings editor and when using the Viewer API. Texture packing is always enabled. Geometries are not merged for animated objects or transparent objects, up to a maximum of 100 geometries per material.

Rendering Performance

If you're having trouble with slow model viewing, bad frame rates, or browser crashes, the scene is probably too complex for your device or browser. There are many complexity factors that affect performance.

Materials

A large number of materials is a significant bottleneck in rendering performance. Instead, you can use a single texture instead of many material colors. Sketchfab supports a maximum of 100 materials in a scene.

Textures

Textures require a lot of VRAM to render, so the fewer textures you can use, the better. A 4096×4096 (4k) texture, for instance, can require ~50MB (50 MiB, actually) of memory. It adds up quickly with lots of meshes and big textures.

Keep in mind the size of a texture versus the final screen size of the object in question. It's unnecessary to use a large texture on an object that will appear very small on the screen. Rather than use many separate textures, you can use a texture atlas to pack the textures for different objects together. This also allows you to have fewer materials. Check out the Polycount Wiki on the subject.

Textures above 8k will never be rendered in the viewer. If you need higher resolution, use multiple textures instead. Non "power of two" textures will never be rendered in the viewer. See Materials and Textures.

While there's no strict rule here, we've found that 4k resolution is a good limit for performance and compatibility. It's better to use a 4k texture than several 2k textures, but it could be better to use a few 4k textures rather than an 8k texture.

Meshes

The more separate meshes/objects/geometries in your scene, the worse the model will perform. Ideally, there would be only one mesh for each material. This is a common issue with SketchUp models and CAD models. During processing, we also split large meshes into 65,536-vertex chunks, in order to support all graphics cards.

Polygons / Vertices

Decimating your models to reduce polygon count can be a good way to improve performance. In most cases, it's unnecessary to have a polycount in the millions. It's also possible to 'fake' a higher polycount with normal mapping. Here are some related tutorials:

If you expect your model to be viewed on mobile devices, you should consider, as a rule of thumb, a maximum 1–1.5 million polygons.

Bones

The more bones you use in an animated skeleton, the more expensive it is to render the animation.

Nodes

The total number of nodes in the scene graph roughly represents the overall complexity of the model, and includes common objects like nodes, transforms, meshes, and bones.

Transparency

Rendering transparency is very expensive, depending on the type of transparency you use. From fastest to slowest: Mask, Dithered, Additive, Blending, Refraction. The more objects with transparency and the more polygons a transparent object has, the slower rendering becomes.

Shadows / Lighting

Rendering real time shadows from dynamic lights is expensive. Lights Attached to camera are problematic because they must be rendered every single frame as the camera moves. It's best to avoid Directional and Hemi lights casting shadows and attached to camera whenever possible.

Post-Processing Filters

Conclusion

All of these different complexity factors interact to influence the complexity of the scene and affect the viewer's performance. It's not an exact science, but here are some recommendations for model performance:

As few materials as possible

50 geometries/meshes or less

10 textures or less, especially when they are 4k+

500,000 polygons or less

Fewer than 35 bones per geometry

Low scene complexity

Avoid expensive transparency methods

Avoid lights casting shadows when attached to the camera

Consider using Shadeless mode when appropriate

Obviously, different models will have different requirements, but it's important to keep these points in mind, especially for large and complex scenes. Check out Unity's Performance Tips for more details.

Other common problems

Shaky model with cracks and seams

This shaking problem is caused by having very large (or very small) numbers as vertex coordinates. A solution is to reduce (or increase) the scale of the model before uploading. It can also be caused by overly precise vertex coordinates (floating point error), which can be fixed by rounding off coordinate values to a lower degree of accuracy. This can be particularly problematic for georeferenced models. It's best to change from a global coordinate system (like WGS84) to a localcoordinate system.

A good solution is to recenter the model in its bounding box, which can be done in software like MeshLab.

STL-files can´t be coloured,- You must use a file format which is able to include color information. I.e DAE / Obj or blend.
In this case I just loaded the file into "Blender", coloured the part and used the already integrated sketchfab uploader

Thank you, it's a good workaround to know. Makes it less convenient for someone to download and print the model.
Is there a way to upload two files for the same model: one for rendering and another for downloading?

Not much you can do about that, especially for STL, which contains no normal data and we smooth with default settings. Every software has different features (and worst of all, uses different words to describe them). But I can, for example, use "completely unwelded vertices" in Rhino, and export as OBJ: https://skfb.ly/ExKE

In that model, you avoid the weird shading, but don't get the nice smoothing on the curved parts (you can see every polygon). Ideally, I could go through and unweld only the edges that are causing problems.

Over-aggressive smoothing is a promising hypothesis. If someone is going to be fine tuning "the default settings", I can supply more examples. In fact, every model that I uploaded last night came across grotesquely distorted. A few weeks ago I uploaded a very similar model and don't remember there being a problem with rendering. And Blender doesn't have a problem with the model.

At some point we may allow users to recalculate normals in 3D Settings with a choice of crease angles. But no ETA on that yet. We've tweaked the smoothing quite a bit already, but it will never meet every possible need. The best option right now is to explicitly set your own normals/smoothing. That said, please do send me samples, we'd love to take a look.

James
I have been utilizing Sketchup #8 for three years and now I utilize sketchup 2015. I have had no problem with the pgn files whatsoever in the past and now the company I sent my pgn.files to requires that I utilize sketchfab!? Why do I all of a sudden have to become familiar with manipulating the number of polygons, meshes, and textures! This only happens when a CEO has no experience with rendering so of course he would recommend a website that is not user friendly. Most of us do not have the opportunity to learn all the facets of this platform you're not dealing with a demographic that is only 35 years old! Not all of the users have the ability to become literate with an abstract method of achieving an accurate portrayal of our renderings! Since I was not given the option not to use this website Why are certain types of rendering software not compatible with this platform! My intention is to achieve a cohesive and coherent rendering without the well's and but's hassle that are associated with this website!.

@images--j_l_b.
I'm not really sure what you're asking here. 3D assets should be shared in 3D, not 2D. We do our best to support all kinds of 3D software, including SketchUp. Thousands of users have SketchUp models successfully rendered on Sketchfab, and I'm happy to help you do the same. I will follow up via email.

I have a problem that is not addressed. I uploaded my model and it completely uploaded and it switched to processing. It has been more than an hour now, the model only has 700 tris, and it says "pending" on my uploads page. I have tried a few other models as well, with the same result. Are the servers down or something? :(

Hi! Really strange behavior i have with sketchfab. I've uploaded model with diffuse map. Share it via share button. Use link.
If i watch my model with Xperia Z tablet in Chrome or Firefox browser it doesn't shows diffuse map, black colored model instead in HD mode. In LD is fine. Diffuse texture size is 4096 square.
If i do the same things on my personal computer under Windows 7 everything works fine.
Could it be some RAM limits problem on tablet or else?

@exeshe4ki - If you're seeing a black model instead of the diffuse texture, yes, it usually indicates a lack of memory. Sometimes simply refreshing the page, switching HD → SD → HD, and/or reducing memory usage from other tabs/apps does the trick. This tablet probably does have the memory to render that texture, it may just have hiccuped.