IOS Development

How the USDZ permits new experiments for ARKit

Throughout WWDC 2018, Apple introduced numerous enhancements to its assist for augmented actuality experiences, together with assist for a brand new file format, the USDZ. The USDZ permits for brand spanking new experiences and provides new methods for customers to work together with augmented actuality content material.

I’ve written extra about WWDC 2018 right here.

On this article, I'm going to dispel some myths in regards to the USD (Z) format, clarify the way it works in relation to ARKit, and spotlight a number of the variations I've discovered by working with this format and writing conversion instruments. We are going to slowly dissect one of many USDZ examples offered by Apple to grasp the format utilized to ARKit and QuickLook.

There’s a lot to cowl, too, in future articles on this sequence I’ll clarify the interior workings of the USD specification and the file format from a extra generic viewpoint. So you may work with it and create USD scenes programmatically through Python or C ++ from any platform, not essentially a Mac.

Would you like me to implement customized USDZ tasks for you? Click on right here to go away me an e mail.

What’s the USD (Z)?

Ucommon Scene reescriptor (a.ok.a. USD) is:

an environment friendly and scalable system for creating, studying and streaming a time-sampled scene description for the trade between graphics purposes.

Let's translate that into English.

In easy phrases, USD is what you’d name a 3D asset file format with particular additions. One in every of them is the flexibility to bundle a USDC file with its textures in a USDZ file to be used by ARKit and QuickLook.

What does all this imply for the RA and ARKit sector?

USDZ information can, for instance, be shared through iMessage or you may open them immediately from an internet web page with Safari:

You possibly can go to this web page from Safari on iOS to strive it your self.

The good factor about these two examples is that they present how QuickLook permits customers to get pleasure from AR content material with out putting in a brand new utility.

It's enormous: think about having the ability to see any product in 3D, in the true world, before you purchase it at your favourite on-line retailer with out having to put in a brand new app! This could not be potential with out the help of USDZ from the USDZ.

One other use I'm testing is to simply current / share 3D medical fashions: ship them to your folks with an iOS machine and so they'll be capable of instantly view your work, no apps wanted too. There are a lot of extra use circumstances for USDZ and QuickLook.

USD is developed by Pixar and is used of their software program, from Hydra to Presto. Pixar carried out its open supply implementation just a few years in the past on Github, so that everybody can now use it to implement conversion instruments or to combine them into their engines and software program .

A single USD file might be considered representing a scene, and a USD scene is a hierarchy of what Pixar calls Prims (which, intuitively, might be thought of a node).

USD performs virtually the identical perform as, for instance, the gLTF or COLLADA file codecs, however in comparison with these different two pattern codecs, it has each extra and fewer options.

For instance, one of many main variations is that the gLTF format is beginning to be broadly supported, whereas the USDZ is at present solely formally supported on the iOS QuickLook.

Get the pattern of the USDZ asset

For the needs of this text, I assume that you’re underneath MacOS and that you’ve configured your USD Python instruments to make use of from the command line of your machine, as defined under, after downloading them from # 39; right here.

Go to this web site out of your browser, click on on the 3D guitar mannequin and reserve it in an acceptable place.

Extract a USDZ asset with out renaming it

I've learn on-line that most individuals who wish to entry information contained in a .usdz file rename it first with the .zip extension, after which extract it from the Finder .

As an alternative, we will use the unzip command-line device to immediately extract a USDZ file as such:

unzip stratocaster.usdz -d stratocaster
Archive: stratocaster.usdz
extraction: stratocaster / Stratocaster.usdc
extraction: stratocaster / StratocasterGuitar_NeckWood_Albedo.jpg
extraction: stratocaster / StratocasterGuitar_ButtonVolume_Albedo.png
extraction: stratocaster / StratocasterGuitar_ButtonTone_Albedo.png
extraction: stratocaster / StratocasterGuitar_BodyWood_Albedo.jpg
extract: stratocaster / StratocasterStand_Albedo.jpg
extraction: stratocaster / StratocasterStand_Metallic.jpg
extraction: stratocaster / StratocasterStand_Normal.jpg
extraction: stratocaster / StratocasterStand_Roughness.jpg

decompress stratocaster.usdz re stratocaster

Archive: stratocaster.usdz

extract: stratocaster/Stratocaster.USDC

extract: stratocaster/StratocasterGuitar_NeckWood_Albedo.jpg

extract: stratocaster/StratocasterGuitar_ButtonVolume_Albedo.pNG

extract: stratocaster/StratocasterGuitar_ButtonTone_Albedo.pNG

extract: stratocaster/StratocasterGuitar_BodyWood_Albedo.jpg

extract: stratocaster/StratocasterStand_Albedo.jpg

extract: stratocaster/StratocasterStand_Metallic.jpg

extract: stratocaster/StratocasterStand_Normal.jpg

extract: stratocaster/StratocasterStand_Roughness.jpg

Now you can navigate to your extracted folder and open the .usdc file immediately:

Earlier than persevering with, perceive what these completely different file codecs imply.

What’s the distinction between USD, USDC, USDA and USDZ?

Information with .usd, .usdc, and .usda extensions all signify a scene file in USD, however the best way they retailer this knowledge is completely different.

Keep in mind that a USD file might be considered representing a scene and that a USD scene is a hierarchy of nodes. More often than not, you’ll have a 1 to 1 match between a USD file and a 3D mannequin, as an alternative of a scene; that’s, you’ll have just one mesh within the file.


.Usda information are USD scenes saved in an ASCII format file. Due to this fact, these information are textual content information containing the outline of the scene in a human readable means. For instance, right here is the file .usda for the illustration of a scene in USD containing a easy dice:

# usda
def Mesh "dice"


def Mesh "dice"

As you may see, the format is kind of readable and makes it simpler to grasp the group of the scene.

Nevertheless, this format shouldn’t be efficient as a result of it takes a very long time to scan massive information in a textual content file. For that reason, Pixar additionally specifies the .usdc file format, which permits the software program to play the scenes in USD a lot quicker.


.Usdc information are the binary illustration of USD scenes. Due to this fact, they’re saved in binary type and opening them with the assistance of a textual content editor shouldn’t be a giant assist. Right here once more is the instance of the dice scene, this time after opening its .usdc equal with a textual content editor:

                      ¿¿¿? ? ? O EEEUU ÿ € úÿþþú €? €? € ¿€ ¿? € ¿¿¿? ? ¿? ¿? ? ? ? ? ¿? ¿? ? ¿¿¿¿? Ch primChildren dice specifiertypeNameMesh properties subdivisionScheme pointsextent regular faceVertexCo unts faceVertexIndices float3[]default int[]B ò 3f[]interpolation uniformq ðtoken variability none ð
    UEQþö öóöùk X) a * @ 1 @ d 1)
  1 @ 1 1 @ ¨ 2 € è! 1 @ ø 1 three @ H zero 1 @ °, @ @ ð
    EUP ÿüúø ÷
òï p


¿¿¿???OEEEUU€ úÿþþú €??€ € ¿€?€ ¿¿¿??¿?¿?????¿?¿??¿¿¿¿?¿¿Ú Ö óprimchildrendicespecifiertypeNameMeshpropertiessubdivisionSchemefactorsextentregularfaceVertexCountsfaceVertexIndicesfloat3[[[[]faultint[[[[]Bò 3f[[[[]interpolationuniformq ÐtokenvariabilitynoÐ

u eqö öóöùok X)a*@1 @re1)

1 @11 @¨2€ È! 1 @ø1three @ H zero1 @°,@ @Ð

EUPÜúø ÷


Oi p


Nevertheless, these information might be learn by software program a lot quicker than their .usda counterparts. The truth is, USDZ packages for QuickLook should use .usdc for scenes to load rapidly on cell gadgets.


.Usd information might be binary or ASCII-based information. Their extension doesn’t reveal their exterior format, however the techniques that learn them can decide their format from the primary bytes of the file. In consequence, .usd information might be each textual and binary, that means you can rename a .usdc or .usda file to .usd and they’ll work as earlier than.


QuickLook makes use of this format for rendering scenes. It may be imported and utilized in iOS tasks developed underneath Xcode.

In its present type, it is kind of a compressed folder containing at most (and not less than) a .usdc file and all of the textures that this scene makes use of.

You possibly can learn to create USDZ information from OBJ right here.

USDZ Stratocaster asset exploration

Now that you’ve extracted the Strato, you may convert its .usdc file to .usda as such:

cd stratocaster /
usdcat Stratocaster.usdc -o Stratocaster.usda

CD stratocaster/

usdcat Stratocaster.USDC o Stratocaster.usda

Open the Stratocaster.usda file along with your favourite textual content editor and growth:

We are able to now learn the contents of the file to grasp how USDZ belongings are organized to be used by QuickLook.

Open the Stratocaster.usda file that you just simply created by double-clicking it in order that the adjustments you make are displayed in actual time.


On the very prime you may see the definition of various supplies for this asset. Some use fixed properties, whereas others, like this, use a texture

To be used with QuickLook, the attribute names (for instance, materials properties) within the completely different pbrMat1 have to be precisely the identical as these proven within the instance above. Altering the title of diffuseColor to diffuse within the materials "StratocasterGuitar_SynthString_Material" (and never the one proven above) leads to the lack of albedo colour for elements utilizing this materials:

Discover the strings on the left: there is no such thing as a albedo data.

For every materials attribute that makes use of a texture as an alternative of a continuing worth, QuickLook expects a cloth comparable to this:

def Shader "color_map"

def shader "Color_map"

and you could additionally present a texture sampler:

Def Shader "Primvar"

uniform token data: id = "UsdPrimvarReader_float2"
Inputs float2: default = (zero, zero)
Token Entries: varname = "Texture_uv"
float2 outputs: consequence

def shader "Primvar"

That is what the definition of the fabric as a complete appears to be like like:

Graphic and mesh scene

Wanting on the scene graph developed for the Stratocaster mannequin, one factor is straight away noticeable: plainly the weather are repeated.

What’s the distinction between the "splitContainer" part and the gadgets ending in "Materials"?

tl; dr: They’re basically the identical factor. And the nodes with out something hooked up, those who finish in "," are merely a byproduct of how belongings in USD are analyzed by the viewer and SceneKit.

If we return to our .usda file, we will seek for the textual content "StratocasterGuitar_ButtonTone_Material", and right here it’s:

The sub-meshes are represented by GeomSubset Value in USD. They’re used to specify subsets of your entire mannequin to which to use a cloth solely.

If we attempt to seek for any of the "splitContainer" parts, we is not going to discover them within the file. It is because they’re generated mechanically from the indices of a given sub-mesh and so they use the fabric assigned to them through the relation rel materials: hyperlink.

The indices listed above for the ButtonTone factor are clues in faces, as an alternative of vertices. They discuss with the worldwide indexes of the faces for the entire mesh of the guitar, which you can find later within the file:

The "StratocasterGuitar" parameter additionally defines the weather that make up a vertex: positions, normals, texture coordinates, and so on., that are then listed through vertex indexes.

Supplies in USD

The USD specification doesn’t explicitly prohibit using non-PBR supplies, however IOS QuickLook doesn’t work with non-PBR parts. So, make certain your USDZ file makes use of PBR supplies or QuickLook is not going to render them accurately.

Why is ACB necessary?

PBR means "bodily rendering". The PBR permits numerous enhancements on the sensible means of rendering objects. One in every of them is the flexibility to make use of image-based lighting, which supplies diffuse and specular ambient reflections extra precisely.

The variations between "conventional" shading and PBR shading might be putting:

You possibly can be taught extra in regards to the ACB right here and right here.

In augmented actuality, the PBR is especially related as a result of it permits shading the 3D fashions rendered in a means that’s extra conscious of its surroundings. For instance, in the event you had been to render a USDZ mannequin of a shiny steel dice, with the PBR and QuickLook supplies, the dice would mirror the encompassing surroundings because it s'. acted of an actual:

Present points and limitations of the USDZ

Set of instruments

One of many largest issues, by far, is the shortage of excellent instruments permitting artists to export their creations from their asset creation software program in USDZ format immediately and with out having to make use of the command-line instruments. Command line instruments usually are not meant for everybody, and most of these offered solely work with a handful and out of date intermediate asset codecs, making it tough to function options of the USD format.

The interactions

Of their present type, neither USD nor USDZ specs converse of the person's skill to work together with the 3D scene described by a USDZ file. Due to this fact, all you are able to do when opening a USDZ file in QuickLook is to seek the advice of it, and nothing else. For instance, typing on it is not going to set off any motion and such actions haven’t any technique to be encoded within the format.

You possibly can create animations within the asset, however these are precooked and non-interactive.

PBR solely

You cannot use non-PBR if you mix USDZ with QuickLook. Observe that nothing prevents you from declaring Attributes (in USD) in your Prims which have names resembling the properties of the fabric you discover on a Lambert materials, for instance, however they won’t work with Pixar or Apple rendering.

It is a limitation, particularly if you wish to show 3D summary widgets / objects moderately than 3D fashions of sensible objects.

Apple merchandise solely

USDZ has not but been adopted by Android or different platforms and may solely be utilized by customers of iOS and MacOS gadgets. On different platforms, gLTF and gLB appear to be the main candidate to turn into the equal of the USDZ.

As well as, QuickLook is just accessible on iOS. Though third-party options exist, there is no such thing as a equal native resolution on Android. However you may ensure that if and when it arrives, it can use the gLTF format and show barely completely different content material from QuickLook.

My predictions

AR is essentially against the idea of purposes: you do not need to modify to a special utility every time you wish to entry a special layer or AR service, not to mention obtain and set up an utility that you do not need. use solely when at a selected place.

For that reason, the truth that the USDZ permits customers to work together with RA content material with out having to put in an utility is a step ahead in that path, even when it 's not the identical. is a small progress. To essentially transfer within the path of an AR cloud, we should not less than be capable of add interactions to experiences comparable to these supplied by the USDZ.

This requires an answer nearer to 1 Internet browser that an utility retailer; Mozilla and others are engaged on this resolution with WebXR.

On condition that the USD format is meant to signify 3D knowledge, however not the interactionsI don’t suppose Apple or Pixar will change the specs to introduce interactions and scripts.

As an alternative, Apple will both must chew the bullet and permit customers to work with one thing just like the WebXR / AR or prolong QuickLook / Safari to embed the script with accessible USDZ scenes.

Apple must regularly put in place higher instruments to create belongings in USD if it doesn’t wish to formally assist the gLTF. We might see bulletins about this at WWDC 2019.



USDZ, when mixed with ARKit and QuickLook, means that you can:

permit customers to strive sensible 3D fashions of objects with out having to put in purposes (which is nice for e-commerce purposes);
ship 3D fashions to buddies through iMessage;
bundle USD scenes in a conveyable format; and
render objects in 3D realistically because of the ACB;

By far probably the most promising use for USDZ information is the primary of the checklist: customers can strive merchandise on the precise scale and with a lighting surroundings that provides them the identical look as the ultimate product:

It is a visitor put up from Alberto Taiuti. The article was first printed on Medium.

Concerning the writer: Alberto is an knowledgeable engineer turned entrepreneur with a ardour for augmented actuality and cell experiences. He’s at present engaged on augmented actuality for the within. You possibly can attain him right here or observe him on Twitter.