glTF graphics library Transmission https://github.com/KhronosGroup/glTFFormat

Fabrice Robinet / Montage Studio COLLADA Working Group Chair

1 Menu • Inter-exchange and runtime formats • Motivations: • Transmission Format for 3D Assets • Designed for GL • Asset Pipeline • glTF: • Birds eye view • RAW datas for straight GL Code • Features • Organized for efficiency • Compression: • As part of glTF via extensions • Open3DGC • Next steps • Demos • QA

2 Inter-exchange and runtime formats • There isn’t anything such as a silver bullet for 3D formats • Different formats for different pipeline stages: • Inter-exchange: 3D assets exchange between tools (COLLADA & FBX). • Runtime & delivery format: provide a compact and efficient representation to be directly consumed by the low level graphic API.

3 Motivation : Transmission Format for 3D assets • Content is king • 3D is the last media without delivery format • For easy adoption, needs to be royalty-free

Audio Video Images 3D MP3 H.264 JPEG ?

4 Motivation : Designed for GL • Inter-exchange formats are not suited for real-time • Data has to be transformed to be passed to GL • Especially on mobile, offload processing from runtime • Unify indices • Split meshes due to indexing restrictions (OpenGL ES 2.0) • Split meshes due to maximum uniforms (For Skinning) • … • Reduce duplicated efforts in content pipeline • A common format for content providers

5 Asset Pipeline

Author Interchange Converter Delivery API

Maya OpenGL/ES Command Line COLLAD Blende Tool glTF WebGL A r FB or .. X Rest API OpenGL …

Note: COLLADA is the open standards-based flow but other tool flows are possible

6 glTF : Birds eye view • JSON to properties declarations and refer to external files (buffers, images..) • Binary for heavy datas , vertices and indices, animations…

scene

light node camera

morph mesh material

animation accessors technique pass

skin bufferView program texture sampler

buffer shader image

7 glTF : RAW Datas for straight GL code • Buffers and BufferViews are fundamental building blocks • used to hold datas for vertices, indices, animations and more… • Buffer and bufferView properties match typed array specification • BufferViews may have a ELEMENT_ARRAY_BUFFER or ARRAY_BUFFER target property • Accessors refer to bufferViews, specify its type and support interleaving • Straight GL matching for program, texture, sampler, shader properties • No client behavior is mandated, apps can process glTF as they wish • one may prefer to load data progressively and possibly create multiple VBOs • or, all datas for an asset could be loaded at once to maximize buffers size.

8 glTF : Features • Version 0.6 • Specified & Implemented • Node • Mesh • Animation (TRS) • Technique, Pass, Program, Shader • Skinning • Camera • Light

9 glTF : Organized for efficiency

material material material

materials share techniques technique technique

pass set states and program pass pass

set states and program once per pass states program states program render primitives sharing same material

10 Compression : extension mechanism • Extensions implemented outside of the core specification • Similar to the way texture compression is supported with GL • Scope is mesh and animation compression • Work-in progress: • https://github.com/KhronosGroup/glTF/issues/230 • https://github.com/KhronosGroup/glTF/issues/61

11 Compression : Open3DGC •Khronos and MPEG collaboration •Royalty free •https://github.com/KhronosGroup/glTF/wiki/Open-3D-Graphics-Compression •Open3DGC Binary is an implementation of the MPEG-SC3DMC (Scalable Compression 3D Mesh Compression) • 2 modes: binary and ascii. • Open3DGC Binary exploits an adaptive arithmetic-based encoding to exploit statistical properties of the encoded data • Open3DGC ASCII exploits a 7-bit ASCII encoding adapted for GZip compression • Open3DGC ASCII is a slightly modified version of SC3DMC to exploit GZip compression

12 Compression : Open3DGC •Features • Generic Attributes, POSITION, NORMAL, TEXCOORD, WEIGHTS… all supporting multiple sets… • Animation compression • Virtual City test scene (from 3DRT.com).

13 Compression : Open3DGC

Excerpt from Khaled Mammou contribution on glTF WIKI

14 glTF : Next steps • Morphing • Video • Compression extension • Multi-pass still considered for v1.0

15 glTF : Adoption •In Three.js dev Branch. Contribution from Tony Parisi - http://threejs.org/ •Cesium globe engine - http://cesiumjs.org/ • http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=3D%20Models.htm l&label=Showcases •Montage Studio - http://www.montagestudio.com/ •AMD Rest3D Project - https://github.com/amd/rest3d

16 Thank you

17 QA

18