Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenFab A Programmable Pipline for Multi-Material Fabrication Kiril Vidimce Presented By: Mira Shalah Szu-Po Wang Jonathan Ragan-Kelley Wojciech Matusik.

Similar presentations


Presentation on theme: "OpenFab A Programmable Pipline for Multi-Material Fabrication Kiril Vidimce Presented By: Mira Shalah Szu-Po Wang Jonathan Ragan-Kelley Wojciech Matusik."— Presentation transcript:

1

2 OpenFab A Programmable Pipline for Multi-Material Fabrication Kiril Vidimce Presented By: Mira Shalah Szu-Po Wang Jonathan Ragan-Kelley Wojciech Matusik Computational Fabrication Group M I T 1

3 State of The Art of Multi-Material Fabrication 2

4 Multi-Material 3D Printers Object 260 Connex1Object 350 Connex3Object 1000 3

5 Large Build Volume 4

6 Multi-Material 3D Printers 5

7 Large Material Library 6

8 7

9 High-Resolution: 600 DPI 8

10 Current Industry Use 9

11 One Material Per Part 10

12 Why One Material Per Part? Traditional constraints of manufacturing. Poor specification methods. Lack of scalable software architectures. Expensive hardware and materials Limited material library No material design tools 11

13 Related Work Multiple materials are supported by statistically assigning a single material to each mesh Various companies have created proprietary formats to support their specific equipment Current open-source effort (e.g. RepRap, Fab@home) target FDM printing processes. The recent AMF standard allows description of object composition and color. Colors and materials can be specified with little proceduralism, using simple expressions from voxel coordinates to material choices. These have limited power and no architecture has been proposed to efficiently implement it. 12

14 Functionally Graded Material (FGM) Functionally graded materials are heterogeneous materials whose material composition varies over the volume of a given object. Prior work describes the difficulty of modelling FGM objects, and proposes a variety of volumetric representations based of tetrahedra and voxels [Jackson 2000]. MIT’s three-dimensional printing group describes a system that defines the material composition by a composition function [Liu et al. 2004; Zhou et al. 2004]. 13

15 Improve Specification Methods Functional Specification Spec2Fab Direct Specification OpenFab 14

16 Software Architecture Challenges Large high-resolution prints comprise trillions of voxels. Giga voxels/inch 3, Tera voxels/foot 3 Continuous gradation between materials Reusable material definitions Resolution and printer independence 15

17 OpenFab First Programmable and Scalable Fabrication Pipeline 16

18 OpenFab Inspired by rendering pipelines Fixed stages and programmable stages Procedural surface and material definitions Resolution independence Streaming architecture Decouples material definition from geometry 17

19 Outline OpenFab programming model OpenFL and fablets Architecture Results 18

20 The OpenFab programming Model 19

21 The OpenFab Programming Model input tessellate surface stage voxelize volume stage dither output textures materials 20

22 Input input tessellate surface stage voxelize volume stage dither output textures materials 21

23 Fixed-Function Stages input tessellate surface stage voxelize volume stage dither output textures materials 22

24 Programmable Stages input tessellate surface stage voxelize volume stage dither output textures materials 23

25 External Resources input tessellate surface stage voxelize volume stage dither output textures materials 24

26 Output input tessellate surface stage voxelize volume stage dither output textures materials 25

27 input tessellate surface stage voxelize volume stage dither output Fab world, a scene graph-like description: Shapes (boundary representation) Shape priorities Fablets Resources Textures Materials 26

28 tessellate surface stage voxelize volume stage dither output input 27

29 tessellate surface stage voxelize volume stage dither output input 28

30 surface stage voxelize volume stage dither output input tessellate 29

31 surface stage voxelize volume stage dither output input tessellate 30

32 surface stage voxelize volume stage dither output input tessellate 31

33 surface stage voxelize volume stage dither output input tessellate 1 voxel 50% A 25% B 25% C 32

34 surface stage voxelize volume stage dither output input tessellate 4 voxels BC A A 33

35 surface stage voxelize volume stage dither output input tessellate 34

36 OpenFL and Fablets 35

37 Programmable Stages input tessellate surface stage voxelize volume stage dither output textures materials fablets 36

38 OpenFL: Domain Specific Language C/C++-like programming language Built-in vector, matrix, texture, material types Modest OO features Pointwise (kernel) programming model Includes a standard library of math functions Global queries Flexible toolset that supports many common material specification tasks. 37

39 OpenFL: Domain Specific Language When defining materials volumetrically, it is useful to be able to determine the distance of a given voxel to the nearest point on the surface. For example, when printing a textured object, we cannot simply assign colors to the outer layer of the surface. In order to achieve a particular color, reflectance, and scattering behavior, the printer needs to deposit a certain amount of layered material to achieve the desired appearance properties. 38

40 fablet MyFablet { @uniform Material red, blue, yellow; @surface(…) { return double3(0,0,0); // no displacement } @volume(@varying double3 voxelCenter) { MaterialComposition mc; const double layerThickness = 1; double dist = distance(); if (dist <= layerThickness) { mc.Set(red, 1); } else if (dist <= layerThickness * 2) { mc.Set(blue, 1); } else { mc.Set(Yellow,1); } return mc; } Volume Fablets: Global Quesries 39

41 40 front face back face result The Magic Postcard

42 fablet MagicPostcard { @uniform { float2 border; float textureDepth, maxThickness; ImageTexture2D fg, bg; Material white, black; } const int CARD_FRONT = 0, CARD_BACK = 1; @surface(@varying { SurfaceAttributes attr; float2 uv, int face; out float2 uvOut, out int faceOut; }) { // pass through attributes uvOut = uv; faceOut = face; if (face == CARD_BACK) { // back face float L = bg.Sample1(uv[0], uv[1], 0); float thickness; if (uv[0] 1 – border[0] || uv[1] 1 – border[1]) { thickness = maxThickness; } else { // material approximation: transmission // has quadratic falloff with thickness thickness = sqrt(1 – L) * maxThickness; } 41

43 return attr.n * thickness; } else { // no displacement on the front and sides return 0; } @volume(@varying { VolumeAttributes attr, @nearest float2 uv, @nearest int face }) { MaterialComposition mc; if (face == CARD_FRONT && // front face abs(distance(attr.voxelCenter)) <= textureDepth) { // surface texture float L = fg.Sample1(uv[0], uv[1], 0); mc.Set(white, L); mc.Set(black, 1 – L); } else { // background/border mc.Set(white, 1); } return mc; } 42

44 Why DSL? Full control over programming model Analysis opportunities Optimizations Retargetting Sand-boxing 43

45 The OpenFab Architecture 44

46 Scalable Architecture Fast start-up Streaming Fixed memory 45

47 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 46

48 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 47

49 done quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab Build coarse octree On query, build second-level octree Evaluate surface stage of fablet Cache result in the LRU cache 48

50 done quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab Depth Buffer Object Volume Support 49

51 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 50

52 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 51

53 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 52

54 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 53

55 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 54

56 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 55

57 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 56

58 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 57

59 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 58

60 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 59

61 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 60

62 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 61

63 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 62

64 infer bounds coarse acceleration structures Precalculate support structures foreach slab find objects in slab quit priority sort foreach object tesselate object surface fablet stage voxelize object volume fablet stage dither output done 63

65 Results 64

66 3D Prints 65

67 Material Decoupling 66

68 Material Decoupling 67

69 Material Decoupling 68

70 Procedural Surfaces 69

71 Procedural Volumes 70

72 Shape Priorities 71

73 Performance 12 inches6 inches3 inches Models 9.32 secs / 6.63 secs / 249 mins (14.2B voxels) 4.44 secs / 1.75 secs / 33 mins (1.8B voxels) 3.18 secs / 0.48 secs / 5 mins (0.22B voxels) butterfly 7.80 secs / 6.99 secs / 417 mins (7.5B voxels) 2.70 secs / 1.89 secs / 56 mins (0.94B voxels) 1.26 secs / 0.46 secs / 7 mins (0.12B voxels) rhino (center) 20.52 secs / 12.79 secs / 187 mins (9.6B voxels) 2.99 secs / 1.25 secs / 25 mins (1.2B voxels) 2.44 secs / 0.70 secs / 4 mins (0.15B voxels) marble table 72 (time to first slice delivery / computation time per slice / total time) Total number of synthesized voxels

74 Conclusion First programmable pipeline for fabrication New programming model Domain specific language Scalable architecture 73

75 External Resources: links to the images used in the presentation 74 Slide 1: http://openfab.mit.edu/pdf/openfab.pdfhttp://openfab.mit.edu/pdf/openfab.pdf Slide 2: Object 260 http://www.stratasys.com/~/media/en/3D%20Printers/Design%20Series/Precis ion/Objet260%20Connex/objet260_connex_closed.ashx Object 350 http://www.stratasys.com/3d-printers/design- series/~/media/Image%20Gallery/objet350_connex_3d_printer.png Object 1000 http://www.stratasys.com/~/media/en/3D%20Printers/Design%20Series/Precis ion/Objet1000/objet1000_closed_v03_low.ashx Slide 5: http://www.sae.org/dlymagazineimages/web/516/11885_15918.jpg http://www.sae.org/dlymagazineimages/web/516/11885_15918.jpg

76 Cont. 75 Slides 6,7: http://www.stratasys.com/materials/polyjet/digital-abshttp://www.stratasys.com/materials/polyjet/digital-abs http://www.stratasys.com/materials/polyjet/high-temperature http://www.stratasys.com/materials/polyjet/transparent http://www.stratasys.com/materials/polyjet/rubber-like http://www.stratasys.com/materials/polyjet/rigid-opaque http://www.stratasys.com/materials/polyjet/dental-material Slide 8: http://blog.stratasys.com/2012/05/30/craziest-3d-printed- part-ever/http://blog.stratasys.com/2012/05/30/craziest-3d-printed- part-ever/ Slides 12: http://www.fabathome.org/wiki/uploads/e/e8/IMG_0110.jpg Slides 10, 26-33: openfab.mit.edu/pdf/OpenFabSIGGRAPH2013Slides.pdf Slides 34, 40-42, 49, 66-71: http://openfab.mit.edu/pdf/openfab.pdfhttp://openfab.mit.edu/pdf/openfab.pdf


Download ppt "OpenFab A Programmable Pipline for Multi-Material Fabrication Kiril Vidimce Presented By: Mira Shalah Szu-Po Wang Jonathan Ragan-Kelley Wojciech Matusik."

Similar presentations


Ads by Google