Extending Open Graph for Sharable 3D Objects

3D objects should be as easy to share as articles, images, songs, and video.

- Ben Houston

"rich objects" that is on par with the existing video, audio, book, song, and album Open Graph object types. This proposal has the support of the following companies in the online 3D space: Clara.io (us!), 3Dshap.es, Yobi3D.com and Pinshape.com.

Motivation

We run Clara.io, a popular online 3D modeling & rendering webapp built upon Three.JS. Lately, we added a large publicly accessible library of free 3D models created by our users, for our users. This has proved to be very popular.

But this new 3D models library, and the related ability to easily share 3D models online, hasn't come without issues. Let's look at the two primary issues that have arisen:

Problem #1. Sharing is Not Rich.

Our users have run into issues when trying to share their published 3D models with others via Twitter, G+ and Facebook. Each 3D model has a unique page in our library (such as this Cornell Box test), but when these page URLs are shared via Facebook, Twitter and G+, at best they show up as a static non-interactive image in their social feeds. While this is better than nothing, it pales in comparison to how songs, and videos are experienced and shared. It is time for 3D to be shared as as a first class rich object in a similar fashion to these other forms of media.

And we are not the only website aiming to make sharing rich 3D content easy, there is also our peers in the 3D model publishing space.

Related to this issue is one our partner Pinshape.com (Dribbble for 3D printing!) ran into. They allows users to reference Clara.io scenes to enable customized 3D previews of user's models on their website. But it has required a bunch of custom code on Pinshape.com to enable this type of sharing because there wasn't a standard for how to convert a view page of our library into a clean embeddable version of that 3D object, and asking users to do it themselves isn't realistic -- of course this was solved by custom code, but that isn't a scalable solution.

Wouldn't it be great to have a rich and interactive embed like this show up in your news feeds rather than just a static image:

Problem #2. Automated Indexing isn't Possible.

There is an ever expanding list of website that want to understand 3D content at a deep level in an automated fashion. This is going to increase as our phones get built in 3D scanners and 3D printing continues to rise in popularity.

There is also a few emerging 3D model search engines, such as Yobi3D.com, 3Dshap.es, and Yeggi.com. For these 3d model search engines to crawl our site and extract deep content presents a challenge, which is right now solved again by costly ad-hoc and often incomplete solutions.

We are in an era where 3D model search engines are going to increase in importance. Not having a standard for crawlable 3D model metadata is no longer acceptable.

Solution: Extend Open Graph with 3D Object information

But there is a solution to these two related problems, and it is a pretty obvious one. There is already an open standard for achieving easy interoperability of so called "rich objects" on the web. It is the Open Graph protocol developed primarily by Facebook, but now widely adopted on popular sites like IMDb, Microsoft, NHL, Posterous, Rotten Tomatoes, TIME, and Yelp.

It is through the Open Graph protocol that we already tell these social websites what thumbnail and description to use when embedding our content in a news feed. But a thumbnail isn't a rich object for us, and thus we need to extent the Open Graph protocol to allow for 3D model sharing, and this is what we now propose.

In discussions with Yobi3D and 3DShap.es, we have come upon a new object type called '3dobject'. We debated the name of this top level type, and finally decided upon the name "3dobject". We chose "3dobject" name instead of potential alternatives of "scene", "geometry" and "model" because the name "3d object" is more generic and has more flexible applications. While being general, the name "3d object" isn't so general that it can cover things like games, as they clearly are not 3D objects. We did debate much more general name "3d", but this seemed much too general as it does inclued things like games, which really should be a separate category.

You must specify this in the 'og:type' meta data property included in the webpage header:

meta property="og:type" content="3dobject"

Once you have defined your page as being an 'og.type' of "3dobject", you can then define the following properties of the 3dobject, all of which are optional, but the more defined the better the sharing experience:

og:3dobject:name - string - the name of this 3D object without author name
og:3dobject:author - profile - The creator of this 3D object.
og:3dobject:tag - string array - Tag words associated with this 3D object.
og:3dobject:modified_time - datetime - When the 3D object was last changed.
og:3dobject:published_time - datetime - The date the 3D object was created.
og:3dobject:viewer - URL - URL of the barebones embeddable viewer for this 3D object.

If the 3D object is downloadable rather than just sharable, these fields are available:

og:3dobject:license - string - The short form of the 3D object license.
og:3dobject:format - string array - The extensions of the download formats available.
og:3dobject:format:[extension] - URL - URL of the downloadable format specified by the [extension].

The "format" field does partially duplicate the "format:[extension]" (they both define the available extensions), but this is intentional in case the URLS for the downloads are not intended to be discoverable such as they require user login prior to downloads (which is very common on websites that distribute 3D models.)

We recommend for a complete description of a 3D object that one make use of the following already established Open Graph protocol fields for these purposes:

og:title - string - The title of the 3D object (usually includes author affilation.)
og:description - string - The description of the 3D object.
og:image - URL - The URL of a thumbnail of the 3D object.
og:type - string - The object type, is "object" for 3D object objects.

We view this page as an evolvable specification. If you would like to make suggestions, please contact me at ben@exocortex.com. If you have adopted this new standard on your webpage, please get in contact as well as I will mention you here.

We have updated Clara.io today to use this new standard on all of our 40,000+ 3D objects in our 3D model library. Have a look at the source of the Cornell Box 3D object in our library to see this new 3D object extension to Open Graph protocol in action.

Exocortex Blog

This is the blog of Exocortex, passionate CG software professionals creating tools for top artists, developers and studios.

View all our blog entries.

Browse our products.