3D + MongoDB = 3D Repo

53
3D + MongoDB = 3D Repo Jozef Doboš

description

3D Repo (http://3drepo.org), winner of the MongoDB Innovation Award, is a non-linear version control system that enables coordinated management of large scale 3D models over the Internet. It is currently the only cloud-based architecture able to support maintenance and transmission of 3D models and associated metadata as well as rendering on the scale required by the industry. With MongoDB we can deliver significant improvements in the engineering workflow that supports collaborative design not possible otherwise. Instead of architects, engineers and constructors sharing massive files in a costly and time consuming manner, they can simply point their web browser to a shared online 3D repository. With our system, all stakeholders are able to examine their projects virtually, even on mobile devices. During the presentation, we will demonstrate the management of massive 3D models in a repository built directly atop of MongoDB. We will also demonstrate our online web-browser viewer capable of rendering 3D models directly from the DB without the need to install any plug-ins or firewall exceptions.

Transcript of 3D + MongoDB = 3D Repo

Page 1: 3D + MongoDB = 3D Repo

3D + MongoDB = 3D RepoJozef Doboš

Page 2: 3D + MongoDB = 3D Repo
Page 3: 3D + MongoDB = 3D Repo
Page 4: 3D + MongoDB = 3D Repo
Page 5: 3D + MongoDB = 3D Repo
Page 6: 3D + MongoDB = 3D Repo
Page 7: 3D + MongoDB = 3D Repo

UK construction industry worth ~£72bn

Page 8: 3D + MongoDB = 3D Repo
Page 9: 3D + MongoDB = 3D Repo

“If you do what

you’ve always done,

you’ll always get

what you’ve always gotten”- Tony Robbins

Page 10: 3D + MongoDB = 3D Repo

Government mandate aims to save 20% cost...

Page 11: 3D + MongoDB = 3D Repo

… via a common data environment

Page 12: 3D + MongoDB = 3D Repo

Why ?

Page 13: 3D + MongoDB = 3D Repo

Because it’s polymorphic,

Page 14: 3D + MongoDB = 3D Repo

scalable

Page 15: 3D + MongoDB = 3D Repo

and binary

Page 16: 3D + MongoDB = 3D Repo

Engineering Creative Industries Manufacturing

Page 17: 3D + MongoDB = 3D Repo
Page 18: 3D + MongoDB = 3D Repo

App level version control

Page 19: 3D + MongoDB = 3D Repo

Plain vanilla1) Scene graph of components

2) Non-linear revision history

3) Streamable 3D geometry

Page 20: 3D + MongoDB = 3D Repo
Page 21: 3D + MongoDB = 3D Repo
Page 22: 3D + MongoDB = 3D Repo

Schemaless schema?

Page 23: 3D + MongoDB = 3D Repo

Each component is a logical unit

Page 24: 3D + MongoDB = 3D Repo

Properties are key-value pairs

Page 25: 3D + MongoDB = 3D Repo

BSON is limited to 16MB

Page 26: 3D + MongoDB = 3D Repo

Mesh

Page 27: 3D + MongoDB = 3D Repo

Mesh

1 {

2 _id : BinData(3,"1OXvtFihRm6aH+nh+cioGw==" ), // Unique UUID

3 api : 1, // API level

4 bounding_box : [[-1.0, -1.0, -1.0], // Min xyz

5 [ 1.0, 1.0, 1.0]] // Max xyz

6 faces : BinData(0,"AwAAAAAAAAABAAAAAgAAAAAAA... " ), // Faces array

7 faces_byte_cout : 192,

8 faces_count : 12,

9 normals : BinData(0,"AAAAAAAAgL8AAAAAAAAAAAA... " ), // Normals array

10 outline : [[-1, -1], [1, -1], [1, 1], [-1, 1]],

11 paths : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Paths from root

12 shared_id : BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" ), // Shared UUID

13 type : "mesh",

14 name : "cube",

15 vertices : BinData(0,"AACAPwAAgL8AAIC/AACAPw... " ), // Vertices array

16 vertices_byte_count : 288,

17 vertices_count : 36,

18 }

Page 28: 3D + MongoDB = 3D Repo

Mesh

1 {

2 _id : BinData(3,"1OXvtFihRm6aH+nh+cioGw==" ), // Unique UUID

3 api : 1, // API level

4 bounding_box : [[-1.0, -1.0, -1.0], // Min xyz

5 [ 1.0, 1.0, 1.0]] // Max xyz

6 faces : BinData(0,"AwAAAAAAAAABAAAAAgAAAAAAA... " ), // Faces array

7 faces_byte_cout : 192,

8 faces_count : 12,

9 normals : BinData(0,"AAAAAAAAgL8AAAAAAAAAAAA... " ), // Normals array

10 outline : [[-1, -1], [1, -1], [1, 1], [-1, 1]],

11 paths : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Paths from root

12 shared_id : BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" ), // Shared UUID

13 type : "mesh",

14 name : "cube",

15 vertices : BinData(0,"AACAPwAAgL8AAIC/AACAPw... " ), // Vertices array

16 vertices_byte_count : 288,

17 vertices_count : 36,

18 }

Page 29: 3D + MongoDB = 3D Repo

Vertices

1 [

2 [ 1.0,1.0,1.0], [ 1.0,1.0,-1.0], [ 1.0,-1.0,1.0], [ 1.0,-1.0,-1.0],

3 [-1.0,1.0,1.0], [-1.0,1.0,-1.0], [-1.0,-1.0,1.0], [-1.0,-1.0,-1.0]

4 ]

1 {

2 0 :

3 {

4 0 : 1.0,

5 1 : 1.0,

6 2 : 1.0,

7 },

8 1 :

9 {

10 0 : 1.0,

11 1 : 1.0,

...

Page 30: 3D + MongoDB = 3D Repo

Vertices

Massive overhead

1 [

2 [ 1.0,1.0,1.0], [ 1.0,1.0,-1.0], [ 1.0,-1.0,1.0], [ 1.0,-1.0,-1.0],

3 [-1.0,1.0,1.0], [-1.0,1.0,-1.0], [-1.0,-1.0,1.0], [-1.0,-1.0,-1.0]

4 ]

1 {

2 0 :

3 {

4 0 : 1.0,

5 1 : 1.0,

6 2 : 1.0,

7 },

8 1 :

9 {

10 0 : 1.0,

11 1 : 1.0,

...

Page 31: 3D + MongoDB = 3D Repo

Material

Page 32: 3D + MongoDB = 3D Repo

Material

1 {

2 _id : BinData(3,"YUHQ09687daqQ+nh+cioGw==" ), // Unique UUID

3 ambient : [0, 0, 0],

4 api : 1, // API level

5 diffuse : [0.28, 0.12, 0.06],

6 name : "Material",

7 opacity : 1,

8 paths : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Paths from root

9 shared_id : BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" ), // Shared UUID

10 shininess : 384.313,

11 specular : [ 0.98, 0.98, 0.98],

12 two_sided : true,

13 type : "material",

14 wireframe : true,

15 }

Page 33: 3D + MongoDB = 3D Repo

Texture

Page 34: 3D + MongoDB = 3D Repo

Texture

1 {

2 _id : BinData(3,"HWQOIJDDF775GQnh+cioGw==" ), // Unique UUID

3 api : 1, // API level

4 data : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Texture bytes

5 data_byte_cout : 190622,

6 height : 894,

7 mime : "image/jpeg",

8 name : "crate diffuse",

9 paths : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Paths from root

10 shared_id : BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" ), // Shared UUID

11 type : "texture",

12 width : 894,

13 }

Page 35: 3D + MongoDB = 3D Repo

Unique _id (UID) vs shared_id (SID)

Page 36: 3D + MongoDB = 3D Repo

Unique _id (UID) vs shared_id (SID)

Page 37: 3D + MongoDB = 3D Repo

Revision

1 {

2 _id : BinData(3,"YUHQ09687daqQ+nh+cioGw==" ), // Unique UUID

3 added : [[BinData(3,"1OXvtFihRm6aH+nh+cioGw==" )], ...],

4 api : 1, // API level

5 author : "jozef",

6 current : [[BinData(3,"1OXvtFihRm6aH+nh+cioGw==" )], ...],

7 name : "master",

8 message : "My very first commit.",

8 paths : [[BinData(3,"MAU5l5mEVIlCQAAAAAAACA==" )]], // Paths from root

10 shared_id : BinData(3,"AAAAAAAAAAAAAAAAAAAAAA" ), // Shared UUID

11 timestamp : ISODate("2014-11-06T10:02:09Z" ),

12 type : "revision",

13 }

Page 38: 3D + MongoDB = 3D Repo
Page 39: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 40: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 41: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 42: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 43: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 44: 3D + MongoDB = 3D Repo

Clie

nt

Serv

er

Page 45: 3D + MongoDB = 3D Repo

What about the security?

Page 46: 3D + MongoDB = 3D Repo

Public/private keys

Page 47: 3D + MongoDB = 3D Repo

User roles at the application level

Page 48: 3D + MongoDB = 3D Repo

What about the future?

Page 49: 3D + MongoDB = 3D Repo

Streaming of geometry from cache

Page 51: 3D + MongoDB = 3D Repo

repo.cache.chunksrepo.cache.files

Page 52: 3D + MongoDB = 3D Repo

Scene graph as a BSON wrapper

Page 53: 3D + MongoDB = 3D Repo

Contact us

3D Repo Ltd℅ EIT ICT LabsCentre House Block C56 Wood LaneLondon W12 7SBUnited Kingdom

Company registered in England No. 9014101

Email: [email protected]: http://3drepo.orgYoutube: http://youtu.be/YIo96mYelio