Rest3d BOF presentation at SigGraph 2013
Upcoming SlideShare
Loading in...5

Rest3d BOF presentation at SigGraph 2013






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment
  • All this content need to get in the game, somehow
  • Typical content toolchain – it is a pipeline. Each stage has its own tools its own format.
  • It’s really hard….
  • 6 years later, we are still doing the same things

Rest3d BOF presentation at SigGraph 2013 Rest3d BOF presentation at SigGraph 2013 Presentation Transcript

  • rest3d SigGraph 2013
  • Recap 2011 • 2011 – forming the idea and brainstorming – GDC: small group discussed the idea for a rest based API to simplify usage of 3D content in the web – – – SigGraph BOF gathering • Resources: – – Mailing list: (join us!)!forum/3d-rest
  • Recap 2012 • 2012 – prototyping rest3d, COLLADA2json – dupdatewebglmeetup11072012 – 2012-Pamphlet – – SigGraph BOF • Use case discussion • Group said – lets focus on WebGL viewer APP
  • Status for SigGraph 2013 BOF • COLLADA2JSON became Khronos glTF – – – Fabrice Robinet, Patrick Cozzi, Tony Parisi, Rémi Arnaud • rest3d prototype recently open-sourced – – Rémi Arnaud, Khaled Mamou
  • Where in the world is rest3d
  • Content creation 3Dapp3D model Images Animations Physics Audio Script …
  • Content ‘Pipeline’ Packaging Optimization Physics Textures, Shaders Animations Modeler Object files Animation files + skins/bones Shader files + psd Physics files Binary files package file Multiple indexes, Quads Clips, bézier, complex Transformation graph Vertex / Fragment shaders Convex Mesh, colliders Single index, triangles DXTs, simplified scene Compressed folder
  • 3D loader? Packaging Optimization A Physics A Textures, Shaders A Animations A Modeler A My game Polygons multiple indexes image format mesh optimization, split complex transform hierarchy no shader programs no collision volumes verbose text (xml) parsing
  • COLLADA Refinery (2007) LADA_Refinery COLLADA Refinery 2.0.3 conditioners Axisconverter Compress Transforms Stripper Image conversion Axis transform Coherencytest ** Use this !! Copyrighter De-indexer Triangulate Vertex cache optimization Optimizer Packager
  • Integrated pipeline – Unity Editor Packaging IOS, Android, PC, Web (plugin), Flash Optimization Built-in Physics PhysX Textures, Shaders Shader Factory Animations Mecanim Modeler Max Maya Blender Modo Cinema4D XSI Fbx or simple COLLADA (e.g. no physics, morphing, shaders..) Unity Engine C o n t e n t p i p e l i n e
  • cloud (rest3d) pipelineModeler Max Maya Blender Databank Editor Desktop Or web app Assets Database Queries Upload/download Processing Conversion (glTF) Compression Image conversion WebApp Turbulenz Three.js Cesium …WebGL… Desktop Browser Cloud REST3D REST3D REST3D
  • Use case: viewer • Assets are stored in the cloud • App query / search for assets • App ask for ‘compiled’ assets for specific target • Need geometry, Shaders, textures, animations, lights, cameras… • Compress data for bandwidth use and potentially HW decode • Cache!! – client and server cache are very important
  • glTF as a command line tool Modeler Max Maya Blender … Exporter COLLADA converter COLLADA2GLTF WebGL Turbulenz Three.js ... Converter flags (or profile) to control conversion for specific target (e.g. shader generation, animation, transparency control, image format)
  • Three main components XML Database • BaseX server • (sockets or http interface) • Xquery http server • Node.js + rest modules • Javascript Html client • Html/Javascript • WebGL viewer • UI framework
  • Hacking it together
  • Local Scene • Single asset only – Viewer simple API only allows for 1 model view – click on model in scene send load even in viewer – Viewer loads json scene description… [GET] /rest3d/assets/Dog/models/model.json – .. then pages [partial http requests] data • Issues – Partial content non cacheable by database – Node.js server caching implemented – not ideal – Client side does not cache 206
  • Database assets browser • Browse asset database – Tree UI – Hierarchical JSON from XML query – Typed assets [model, image, other] – Converted assets [collada2json, glsl shaders] – Should implement lazy tree evaluation – Show asset info in right viewport, direct URL access [GET] /rest3d/assets • Drag/drop into scene – Local operation .. • Considering shared scene through websockets
  • Sketchup warehouse proxy • Browse – Dynamic tree MV UI – Node.js html scraping with cheerio and request – Warehouse collection browsing issue: leads to unavailable content (protected or not converted) – QooxDoo complex view system and dynamic update issues [GET] /rest3d/warehouse/ • Search – Simple text box UI – [enter] / search button linked – Warehouse search can filter specific available format – Search return is a list, not a tree… [GET] /rest3d/warehouse/search/search_string
  • Sketchup warehouse proxy • Fetch & Convert (most complex API so far) – Drag/drop UI (from warehouse tree to asset tree) – http get zip file to rest3d server – Node.js multi-file zip archive to file system decompress – Datase file upload / store – asset.xml management through xquery – COLLADA2json server side conversion • Could not get nodejs module to work in Ubuntu cloud • Need to spawn async process ! [PUT] /rest3d/assets/dog [body] 34a95ee8f4c4038ed23c800b042
  • Rewrite – and open source • ~4000 lines of new JavaScript code brand new AMD client code – glTF loader – COLLADA loader – WebGL rendering – Simpler UI framework (based on jquery, jquery-UI, jquery- layout) • ~450,000 lines removed ! (qooxdoo, Khronos glTF viewer sample)
  • samples Tested in Chrome, Firefox, Safari
  •  (new) free and paying service from RedHat – 3 small ‘gears’ for free – Could not fit database and node server in a small gear – Deploy directly from github • Provided the github project contains the .openshift configuration files – Scalability • ‘cartridge’ can spread over multiple ‘gears’
  • Online converter
  • Open 3D Graphics Compression (Open3DGC) • Efficient cross platform implementation of patent free MPEG graphics compression tools – 3D Meshes with multiple attributes per vertex • Positions, normals and texture coordinates • Float attributes (e.g., skinning animation weights) • Integer attributes (e.g., bone ID, material ID) – Bone based animations (coming soon) • Time varying transforms (e.g., rotation, scale, translation) • C/C++ Implementation under MIT License
  • Open3DGC Mesh Compression • Triangle Fan-based Compression [Mammou’09] [Mammou’09] K. Mammou, T. Zaharia, F. Prêteux, “TFAN: A low complexity 3D mesh compression algorithm” Computer Animation and Virtual Worlds, Vol. 20(2-3), pp. 343–354, 2009
  • Open3DGC Mesh Compression • Compression Efficiency  160 models from different sources (e.g., CAD, 3D scans, modeling tools)  Various topologies (i.e., open/closed, manifold/non-manifold, arbitrary genus)  WebGL-Loader and Open3DGC: 14 bits for positions et 10 bits for normals/texture coord.  OpenCTM: default parameters (not fair) Open3DGC is 7.3 times more efficient than Gzip and 1.6-1.8 times more efficient than WebGL Loader and OpenCTM
  • Open3DGC Mesh Compression • Speed  Non-optimized C++ implementation, single thread (rooms for parallelization)  Intel i7-2600 CPU @ 3.4 GHz, Win7 x64, RAM 10 GB
  • Open3DGC Mesh Decompression • Decoder
  • Demo & deep dive • Running rest3d local – Debugging • Running on server • Database vs. node.js vs. cache – Socket vs. http • API details
  • Let’s talk • Roadmap ? – More work on the viewer / UI – More work on the server – Where is the spec ? • Contribute ? – Join the email list!forum/3d-rest • See also: – COLLADA/glTF BOF !
  • Thank you !!