Rest3d BOF presentation at SigGraph 2013
- 2. 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
– http://www.slideshare.net/remi_arnaud/6-10presentation
– http://www.slideshare.net/remi_arnaud/collada-webgl
– SigGraph BOF gathering
• Resources:
– http://rest3d.org
– Mailing list: (join
us!)https://groups.google.com/forum/#!forum/3d-rest
- 3. Recap 2012
• 2012 – prototyping rest3d, COLLADA2json
– http://www.slideshare.net/remi_arnaud/rest-3-
dupdatewebglmeetup11072012
– http://www.scribd.com/doc/102183295/Siggraph
2012-Pamphlet
– http://www.youtube.com/watch?v=Dja5achkgZc
– SigGraph BOF
• Use case discussion
• Group said – lets focus on WebGL viewer APP
- 4. Status for SigGraph 2013 BOF
• COLLADA2JSON became Khronos glTF
– http://gltf.gl/
– https://github.com/KhronosGroup/glTF
– Fabrice Robinet, Patrick Cozzi, Tony Parisi, Rémi
Arnaud
• rest3d prototype recently open-sourced
– https://github.com/amd/rest3d
– Rémi Arnaud, Khaled Mamou
- 8. 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
- 10. 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
- 12. 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
- 14. 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)
- 16. 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
- 18. 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
- 19. 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
- 22. 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
- 23. 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]http://sketchup.google.com/3dwarehouse/download?mid:20093
34a95ee8f4c4038ed23c800b042
- 24. 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)
https://github.com/amd/rest3d
- 28. (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’
- 30. 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
https://github.com/amd/rest3d/tree/master/server/o3dgc
- 31. 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
- 32. 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
- 33. 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
- 35. Demo & deep dive
• Running rest3d local
– Debugging
• Running on server
• Database vs. node.js vs. cache
– Socket vs. http
• API details
- 36. Let’s talk
• Roadmap ?
– More work on the viewer / UI
– More work on the server
– Where is the spec ?
• Contribute ?
– Join the email list
https://groups.google.com/forum/#!forum/3d-rest
• See also:
– COLLADA/glTF BOF !
Editor's Notes
- 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