SlideShare a Scribd company logo
3D + MongoDB = 3D Repo 
Jozef Doboš
3D + MongoDB = 3D Repo
3D + MongoDB = 3D Repo
3D + MongoDB = 3D Repo
3D + MongoDB = 3D Repo
3D + MongoDB = 3D Repo
UK construction industry worth ~£72bn
3D + MongoDB = 3D Repo
“If you do what 
you’ve always done, 
you’ll always get 
what you’ve always gotten” 
- Tony Robbins
Government mandate aims to save 20% cost...
… via a common data environment
Why ?
Because it’s polymorphic,
scalable
and binary
Engineering Creative Industries Manufacturing
3D + MongoDB = 3D Repo
App level version control
Plain vanilla 
1) Scene graph of components 
2) Non-linear revision history 
3) Streamable 3D geometry
3D + MongoDB = 3D Repo
3D + MongoDB = 3D Repo
Schemaless schema?
Each component is a logical unit
Properties are key-value pairs
BSON is limited to 16MB
Mesh
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 }
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 }
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, 
...
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 ] 
Massive overhead 
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, 
...
Material
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 }
Texture
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 }
Unique _id (UID) vs shared_id (SID)
Unique _id (UID) vs shared_id (SID)
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 }
3D + MongoDB = 3D Repo
Server Client
Server Client
Server Client
Server Client
Server Client
Server Client
What about the security?
Public/private keys
User roles at the application level
What about the future?
Streaming of geometry from cache
http://x3dom.org/src/files/Web3d2014_SRC.pdf
repo.cache.chunks 
repo.cache.files
Scene graph as a BSON wrapper
Contact us 
3D Repo Ltd 
℅ EIT ICT Labs 
Centre House Block C 
56 Wood Lane 
London W12 7SB 
United Kingdom 
Company registered in England No. 9014101 
Email: support@3drepo.org 
Website: http://3drepo.org 
Youtube: http://youtu.be/YIo96mYelio

More Related Content

ODP
Gemoda
PDF
indian evidence act.pdf.......very helpful for law student
PDF
Types of Solar Power Station
PDF
3DRepo
PPTX
High Dimensional Indexing using MongoDB (MongoSV 2012)
PPTX
RTree Spatial Indexing with MongoDB - MongoDC
PPTX
Approaching zero driver overhead
PPTX
Rest3d BOF presentation at SigGraph 2013
Gemoda
indian evidence act.pdf.......very helpful for law student
Types of Solar Power Station
3DRepo
High Dimensional Indexing using MongoDB (MongoSV 2012)
RTree Spatial Indexing with MongoDB - MongoDC
Approaching zero driver overhead
Rest3d BOF presentation at SigGraph 2013

Similar to 3D + MongoDB = 3D Repo (20)

PDF
Kernel Architecture
PPTX
6 10-presentation
PPTX
COLLADA & WebGL
PPT
Object based image analysis tools for opticks
PPTX
Rendering of Complex 3D Treemaps (GRAPP 2013)
KEY
openFrameworks 007 - 3D
PDF
Om (Cont.)
PDF
3D Web Services And Models For The Web: Where Do We Stand?
PPTX
2010-08-26-mongodb-step-by-step-by-hexnova
PDF
Workshop Ontology Modelling 2011, Session 3 - Ontologies in architecture, eng...
DOCX
ITS 630 – Residency Project Circuit City was an American c.docx
PDF
S. Pena Serna - Enriching
PDF
Where2009 - Hacking Map APIs
PDF
Hacking Map API's Workshop - Where2.0 2009
PPT
GTC 2012: NVIDIA OpenGL in 2012
PDF
04 - Geometric Modelling para el diseño ...
PPTX
OpenStreetMap in 3D - current developments
PPTX
Vector data model
PDF
Efficient Storage of Heterogeneous IoT data in a Blockchain using an Indexing...
PPT
COST Madrid
Kernel Architecture
6 10-presentation
COLLADA & WebGL
Object based image analysis tools for opticks
Rendering of Complex 3D Treemaps (GRAPP 2013)
openFrameworks 007 - 3D
Om (Cont.)
3D Web Services And Models For The Web: Where Do We Stand?
2010-08-26-mongodb-step-by-step-by-hexnova
Workshop Ontology Modelling 2011, Session 3 - Ontologies in architecture, eng...
ITS 630 – Residency Project Circuit City was an American c.docx
S. Pena Serna - Enriching
Where2009 - Hacking Map APIs
Hacking Map API's Workshop - Where2.0 2009
GTC 2012: NVIDIA OpenGL in 2012
04 - Geometric Modelling para el diseño ...
OpenStreetMap in 3D - current developments
Vector data model
Efficient Storage of Heterogeneous IoT data in a Blockchain using an Indexing...
COST Madrid
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
Ad

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
KodekX | Application Modernization Development
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Big Data Technologies - Introduction.pptx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
cuic standard and advanced reporting.pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Electronic commerce courselecture one. Pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The AUB Centre for AI in Media Proposal.docx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Review of recent advances in non-invasive hemoglobin estimation
MIND Revenue Release Quarter 2 2025 Press Release
KodekX | Application Modernization Development
Encapsulation_ Review paper, used for researhc scholars
Big Data Technologies - Introduction.pptx
NewMind AI Weekly Chronicles - August'25 Week I
Network Security Unit 5.pdf for BCA BBA.
Unlocking AI with Model Context Protocol (MCP)
20250228 LYD VKU AI Blended-Learning.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
cuic standard and advanced reporting.pdf
Empathic Computing: Creating Shared Understanding
Digital-Transformation-Roadmap-for-Companies.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Electronic commerce courselecture one. Pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

3D + MongoDB = 3D Repo

  • 1. 3D + MongoDB = 3D Repo Jozef Doboš
  • 7. UK construction industry worth ~£72bn
  • 9. “If you do what you’ve always done, you’ll always get what you’ve always gotten” - Tony Robbins
  • 10. Government mandate aims to save 20% cost...
  • 11. … via a common data environment
  • 12. Why ?
  • 18. App level version control
  • 19. Plain vanilla 1) Scene graph of components 2) Non-linear revision history 3) Streamable 3D geometry
  • 23. Each component is a logical unit
  • 25. BSON is limited to 16MB
  • 26. Mesh
  • 27. 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 }
  • 28. 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 }
  • 29. 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, ...
  • 30. 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 ] Massive overhead 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, ...
  • 32. 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 }
  • 34. 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 }
  • 35. Unique _id (UID) vs shared_id (SID)
  • 36. Unique _id (UID) vs shared_id (SID)
  • 37. 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 }
  • 45. What about the security?
  • 47. User roles at the application level
  • 48. What about the future?
  • 49. Streaming of geometry from cache
  • 52. Scene graph as a BSON wrapper
  • 53. Contact us 3D Repo Ltd ℅ EIT ICT Labs Centre House Block C 56 Wood Lane London W12 7SB United Kingdom Company registered in England No. 9014101 Email: support@3drepo.org Website: http://3drepo.org Youtube: http://youtu.be/YIo96mYelio