Content Creation

In order for a model to be available in a ViewAR Application, it needs to be uploaded to the ViewAR System. In this section we will lead you through the process and give you some tips on performance optimisation.


Scene Setup

First and foremost: Up-Axis is the Y-Axis!

Furthermore, you can work with any unit you like but in real-life scale. Default units that we use are cm, therefore, if you are using different units, remember to apply a correct scale setting when uploading the model.

Naming Conventions

Don't use any special characters (only an underscore "_" is allowed) for mesh-, material-, texture- and filenames.

Also, try to keep naming patterns short, simple and meaningful. For your own's sake :)

File Formats

The ViewAR System accepts polygon models in 3D files formats of .fbx and .obj.


The ViewAR System can handle objects and scenes with up to 800k Tris, however, it also depends largely on the platform/device which is going to be used. An older iPhone or iPad won't be able to handle such a high polycount model, while the Web version would still have a good performance.
Refer to the following examples of well-optimised models with Tri-Count, plus a suggested maximum for similar assets:

Keep in mind that this cabinet's interior is also modelled. Simple hard surface objects, like cabinets, don't need a lot of polygons to look good. Try to keep it below 50k triangles.

For complex geometries, like the sofa above, use polygon density differentiation. Try to stay below 200k Triangles. If needed, try baking smaller into the ambient occlusion map.

Sometimes even more complex models are needed, be aware that this can cause performance problems and crashes with older platform.

Polygon Distribution and Edgeflow

Always try to keep your models optimised and avoid unnecessary subdivisions. A higher polygon density makes sense on detailed surfaces, such as folds, seams, round shapes etc, but not on flat ones. More Polygons, if they support the shape, less if they don’t the shape should be still looking good in close-up.

It makes sense to model elements like seams or stitches in such a way that you can better hide uv-cuts.

A good edgeflow can significantly improve shading and make objects easier to edit/adjust/fix/improve. Try using bevels for hard edges, as they improve shading and baking of maps, at the same time having the same performance impact as hard edges (the vertices get split up in the rendering engine either way). Furthermore, try to model with quads if possible and turn to _tris _as a last resort only. Triangulation may fix issues mentioned below, however, they may make future adjustments hardly possible. In any case, keep a copy of your quad-models before triangulation.

A chair, that is used somewhere in an architectural building, also doesn't have to be as detailed as a chair that is the main asset in the presentation.


  • no faces with more than four sides (triangles and quads only, quads preferred)

  • no concave faces

  • no faces with holes

  • no non-manifold geometry

  • no lamina faces

  • no zero length edges

  • no zero geometry area faces

All of those can, but don’t necessarily have to cause issues for the converter/app.

Hint: ( in Autodesk Maya: Select Object -> Hold Shift -> Hold Rightclick -> Clean Up )

UV Unwrapping and Layout

  • Use Checker Textures to test your models texture distribution

  • As little as possible texture distortions (patterns might be used)

  • As little as possible texture cuts (Try to hide UV Cuts in the geometry, inside folds for example)

  • We use a two uvset workflow. The first uvset (uv0) for tiled textures which can be overlapping and the second (uv1) for ambient occlusion or other maps that have to fit in the uv 0-1 space without any overlapping faces. Textures should be scaled by scaling the uvs in uv0 or later when setting up materials in our material editor.



  • Pixel Density should be consistent for tiled textures (they still need to be sharp at closeup)

  • Pixel Density should be optimized for ambient occlusion map (invisible/hard to see surfaces don’t need as much texture space)

Hint: All faces need UVs! Otherwise parts or the whole model would be invisible. Even if you don't plan on assigning any textures, make sure to map UVs. A planar map without regards to unwrap and layout would suffice in that case.

Naming Convention

Use meaningful names for the mesh-names without special characters. Underscore "_" is allowed.
Naming is also important for our converter that reacts to specific prefixes:

"SHADOW__" or "UNBOUND__" will disable collision in the app, which is useful for shadowmaps ("SHADOW__shadowmap") for example. That also means that you won't be able to touch that mesh and rotate it in the app.


  • Make sure to assign materials to surfaces which should later be set up in the Material Editor.

  • At this point, our converter only supports Phong and Lambert, therefore, if you set up different shaders, for example vray, all your settings will be lost and the conversion may fail.

  • If you want to set up Textures beforehand, read more about it in the FBX Setup Tutorial:\


  • For solid materials use a JPG file format (file extension should be .jpg, not .jpeg).
  • For transparent one: PNGs.
  • No special characters, especially "ä,ö,ü, etc".
  • Always use power-of-two resolutions (16/32/64/128/256/512/1024/2048/4096). A non-power-of-two resolution will be up-scaled to the next level and hurt performance without better quality. 4096 is the highest supported resolution.
  • Tiled textures should be no larger that 512x512 or 1024x1024, baked maps should be 1k or for more complex assets 2k. The resolution high enough for close up. A good default is a 512x512 tiled texture for 50cm², however, it largely depends on object use - an architectural building needs different pixel density than a chair.
  • Keep the data size of textures in mind. Uncompressed textures are much larger and rarely is the increased size worth the cost. The difference between a maximum quality jpg and "10" quality jpg is not visible, however, the difference in size is obvious. Especially, when multiplied by the number of used textures in the scene.

File Size

It is also important to keep in mind how many objects you want to present in your app. If it's just a few, a long download time because of a complex and detailed object may be okay, however, if you app is to use a lot of models, cutting down the download time becomes crucial. Even more, if the map is to be used on the road, where data fees may apply.

A good default is a 512x512 tiled texture for 25x25cm, but this depends largely for on the usage of the object. An architectural building needs different pixeldensity than a chair.

Final touches

  • Delete History, Freeze Transformations, set vertex normals to face and assign smoothing groups (hard, soft edges). Check for mesh issues with available clean up tools.

  • Some History, Inputs and Transformations can have an impact on how the model is converted. For that reason it is recommended to delete the history and freeze all transformations. There are exceptions, though.

    • When a model is animated, you can only delete non-deformer history or you will loose skin weights.

    • Reference cubes or other geometry that is used as a reference for translation or rotation values for the converter shouldn't be frozen or they will loose the values that are important for the Converter. (See: References/Portals/Snappoints)

  • At the end, set vertex normals to face and issue the smoothing groups (they get lost when deleting history).


File Formats

The ViewAR System accepts polygon models in 3D files formats of .fbx and .obj.

Export as an .fbx (recommended):

In the export, settings uncheck everything under Include other than “Smoothing groups”. FBX file format may be both binary or ASCII. While ASCII makes debugging easier since it is human readable, binary file would be smaller. Use the 2012 FBX version.

Export as an .obj:

This is also possible, however, not recommended, since .obj supports only one UV Set and you get better results with our two UV Sets workflow.