Download - 3D + MongoDB = 3D Repo

Transcript
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