implicit kernels for solid modeling - matt keeter · 2018. 4. 30. · implicit kernels for solid...

56
Implicit kernels for solid modeling Matt Keeter [email protected] 2018–01–19 mattkeeter.com

Upload: others

Post on 15-Mar-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Implicit kernels for solid modeling

Matt Keeter [email protected]–01–19 mattkeeter.com

Page 2: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

A Brief* History of CAD*and probably inaccurate

Page 3: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Drafting tables

Page 4: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Computer-aided drafting

AutoCAD 2.18 (1985)

AutoCAD 2.18 (1985)

Page 5: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Into the 3rd Dimension

“While all drafting is 2D, and almost all

users will spend all their time with AutoCAD working in 2D mode, 3D is important more from a marketing perception standpoint than a technical one.”

John Walker, 1983

Page 6: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

The path of least resistance

Boundary representationsNatural extension from 2DEasy to renderFragile representationGeometric operations are hard!

Page 7: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Solid Modeling

“I have seen solids modeling, and it is the

future. For years the skeptics have

criticized solids as impractical, compute

intensive, and inflexible. ‘You can't cut

chips with solids,’ they'd say, or ‘sure

they're fun, but what can you do with

the model when you're done’?”

Eric Lyons, 1986

Page 8: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

How would you make...

Page 9: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Menger Sponges

Page 10: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Family of gear pairs

Page 11: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Möbius strip

Page 12: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Mandelbrot Vase

Page 13: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Fundamentals offunctional representations

Page 14: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Functional representations

f : R3 → R

f(x, y, z) → Distance

Distance < 0: inside

Distance = 0: boundary

Distance > 0: outside

f(x, y, z) = x2 + y2 + z2 - r2

f(x, y, z) = x2 + y2 + z2 - r2

Page 15: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Upsides & downsides

➕ CSG (union / intersection / difference) becomes trivial

➕ Unusual transforms become possible➖ Rendering is harder

(but computers are fast, and it parallelizes well)

➖ Features are implicit➖ Hard to interface with existing b-rep

ecosystem (meshes, NURBS, etc.)

Page 16: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Previous work

Page 17: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Hyperfun (SIGGRAPH 1999)

hyperfun.org

Page 18: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Kokopelli (2012)

github.com/mkeeter/kokopelli

Page 19: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

“ImplicitCAD is a project dedicated to using the power of math and computer science to get stupid design problems out of the way of the 3D printing revolution.”

ImplicitCad (2012)

implicitcad.org

Page 20: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Symvol (2012)

uformia.com

Page 21: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Antimony (2013)

github.com/mkeeter/antimony

Page 22: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Ao(2016)

github.com/mkeeter/ao-guile-repl

Page 23: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

libfive + Studio (2018)

libfive.com

Page 24: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Implicit kernel design

Page 25: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Representation vs. Evaluation

Page 26: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Shape representation

● Lightweight manipulation of math trees● De-duplication of clauses● Arithmetic identities + constant folding● Balancing of commutative operations

Page 27: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Deduplication

Page 28: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Arithmetic identities

square square

Page 29: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Tree balancing

max

max

max

a

b

c d

max

max max

a b c d

Page 30: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Representing a clause /* This is where tree data is actually stored */ struct Tree_ { /* * Destructor erases this Tree * from the global Cache */ ~Tree_();

const Opcode::Opcode op; const uint8_t flags; const unsigned rank;

/* Only populated for constants */ const float value;

/* Only populated for operations */ const std::shared_ptr<Tree_> lhs; const std::shared_ptr<Tree_> rhs; };

Page 31: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Representing a clause/* Lightweight, passable-by-value handle */class Tree { /* Overload arithmetic here! */

/* Here's the actual Tree data */ std::shared_ptr<Tree_> ptr;};

/* This is where tree data is actually stored */ struct Tree_ { /* * Destructor erases this Tree * from the global Cache */ ~Tree_();

const Opcode::Opcode op; const uint8_t flags; const unsigned rank;

/* Only populated for constants */ const float value;

/* Only populated for operations */ const std::shared_ptr<Tree_> lhs; const std::shared_ptr<Tree_> rhs; };

Page 32: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Representing a clause/* Lightweight, passable-by-value handle */class Tree { /* Overload arithmetic here! */

/* Here's the actual Tree data */ std::shared_ptr<Tree_> ptr;};

class Cache { /* Functions to handle identities here! */

typedef std::tuple<Opcode::Opcode, const Tree_*, /* lhs */ const Tree_* /* rhs */ > Key; std::map<Key, std::weak_ptr<Tree::Tree_>> ops; std::map<float, std::weak_ptr<Tree::Tree_>> constants;};

/* This is where tree data is actually stored */ struct Tree_ { /* * Destructor erases this Tree * from the global Cache */ ~Tree_();

const Opcode::Opcode op; const uint8_t flags; const unsigned rank;

/* Only populated for constants */ const float value;

/* Only populated for operations */ const std::shared_ptr<Tree_> lhs; const std::shared_ptr<Tree_> rhs; };

Page 33: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Representation vs. Evaluation

Page 34: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

General form of algorithms

● If at minimum size, perform operations on voxel● Otherwise, evaluate interval

○ If filled or empty, return early

● Subdivide and recurse● After recursion is done, collapse branches if possible

Page 35: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com
Page 36: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com
Page 37: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com
Page 38: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Flat tapes are faster than chasing pointers!

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tape

Memory

0 1 2 3 4 5 6 7 8 9 10index

X Y 1 0.5 outvalue

Page 39: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Flat tapes are faster than chasing pointers!

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tape

Memory

0 1 2 3 4 5 6 7 8 9 10index

X Y 1 0.5 outvalue

Page 40: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Flat tapes are faster than chasing pointers!

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tape

Memory

0 1 2 3 4 5 6 7 8 9 10index

X Y 1 0.5 X2 outvalue

Page 41: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Flat tapes are faster than chasing pointers!

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tape

Memory

0 1 2 3 4 5 6 7 8 9 10index

X Y 1 0.5 X2 outvalue

Page 42: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Flat tapes are faster than chasing pointers!

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tape

Memory

0 1 2 3 4 5 6 7 8 9 10index

X Y 1 0.5 X2 Y2 outvalue

Page 43: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Floating-point values

Value types

f(1, 0, 0) = 0

Page 44: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

f(1, 0, 0) = 0

f({...}, {...}, {...}) = {...}

Floating-point values

Arrays of floats

(optimization for speed)

Value types

Page 45: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Value types

Floating-point values

Arrays of floats

(optimization for speed)

Interval ranges

f(1, 0, 0) = 0

f({...}, {...}, {...}) = {...}

f([0, 1], [1, 2], [0, 0]) = [0, 4]

Page 46: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Value types

Floating-point values

Arrays of floats

(optimization for speed)

Interval ranges

Derivatives

(automatic differentiation)

f(1, 0, 0) = 0

f({...}, {...}, {...}) = {...}

f([0, 1], [1, 2], [0, 0]) = [0, 4]

(df/dx)(1, 0, 0) = 2(df/dy)(1, 0, 0) = 0(df/dz)(1, 0, 0) = 0

Page 47: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Tree pruning with intervals

square square

Page 48: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Tree pruning with intervals

square square

[1,2] [-1,0]

Page 49: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Tree pruning with intervals

square square square square

[1,2] [-1,0]

Page 50: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

square square

square square + – – – maxopcode

0 1 4 6 6 8 7lhs

5 2 3 9 rhs

4 5 6 7 8 9 10 out

Tree pruning with intervals

Page 51: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Outputs

Page 52: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Voxel output: heightmaps

Brightness = z-heightUseful for 2.5D machining

Page 53: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Voxel output: shaded

Normals are based on derivatives(df/dx, df/dy, df/dz)

Page 54: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Normals are used to position vertices on sharp edges and corners.

B-rep output: meshes

Page 55: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Curtain rail bracketsPaul Meyer

Real things!

Creepy Crawly CutterSam Calisch

Rotary encoderMatt Keeter

Page 56: Implicit kernels for solid modeling - Matt Keeter · 2018. 4. 30. · Implicit kernels for solid modeling Matt Keeter matt.j.keeter@gmail.com 2018–01–19 mattkeeter.com

Unsolved problems

● GPU acceleration● Feature-based design● Interacting with meshes● Constraint systems