Smart3D Episode #14 — Jason and the Golden Teapot
Whoever sez that he/she has fully implemented 3DS, OBJ, FBX import… is lying!
Proprietary 3D file formats were defined in the context of complex applications and did grow up with them. Over the decades, they became real monsters with unlimited functionality, incompatible versions and inofficial specifications. They even did break out of their original applications and became widely accepted exchange formats. Using them is some love-hate relationship ‘though… they surely provide some benefit but one never knows what’s inside such black boxes and full implementation is hard to achieve — if not impossible at all.
Meanwhile, in computer science, generic syntax concepts have been created to reduce the effort of file reading and writing, format validation, etc., and to focus on the specific content instead. The most famous format here is XML, but as the whole XML universe became more and more complex, maybe even kinda selfish; a fat-free XML alternative named JSON was created. The generic syntax was then used to define generic, i.e. application-independent 3D description and exchange formats like Collada, X3D, X3DOM, XML3D, Dec3D, and so on. But even those formats are pretty complex and maybe not efficient enough for 3D client-server scenarios!?
In Smart3D, we follow an approach where we use a declarative structure definition, typically — but not necessarily — in JSON, which however does not even try to embed the heavy-weight content in the same way. Instead, proprietary formats are used for the efficient description of the real data: the geometries and the textures/maps. On the geometry side, such formats could be for instance: OBJ, 3DS, OpenCTM, glTF, BinGeo, Blast. On the texture side, well, JPEG and PNG, usually. So, our exchange format is flexible when it comes to the representation of the low-level entities!
This has a few advantages… the low-level formats themselves can be part of the initial client-server negotiation along with other quality-of-service parameters (high poly vs. low poly). The assets as such can be shared across various models, cached by standard or proprietary caching mechanisms. Also, delayed loading is naturally possible, allowing for fast feedback. Server-side cross-format creation is another part of the game…
By using the generic JSON structure combined with a flexible low-level format, integration of our data-providing services into external clients becomes a no-brainer, and we did so for Blender, SketchUp, Unity-3D, Three/X3DOM, SceneKit feat. Metal, etc.!