If you store a narrower and narrower band around the surface don't you get a mesh?
bepis
I'm a bit confused about how this works. How do you know identify and update the region to store, especially for something like the example on the last slide?
Isaaz
How to only store the narrow band? In my understanding, we still need a voxel grid as big as the bounding box. Do we utilize some sparse data structures to build a hierarchy to adapt voxel size?
keenan
@ceviri Not quite, because you're still just storing a subset of values in a grid. To make a 2D analogy: a 1 pixel-thick drawing of a curve on a pixel grid is still different from the input polyline in an SVG file. A mesh is more like an SVG file (it's a "vector graphics" representation); a level set is more like a rasterized image (it's a "bitmap graphics" representation). People also sometimes call these "Eulerian" representations (for grids) and "Lagrangian" representations (for meshes).
keenan
@bepis It can be tricky to keep things updated, but the key idea is that, fundamentally, you only care about the place where the level set goes through zero. So, you just need to keep a few cells around this zero set---enough so that when you interpolate (bilinearly, say) you can still "see" where the zero set is. If the zero set moves a little bit, you can update the distance function by just computing, for each pixel that you care about, the closest point on the zero set. (How to compute that is a whole other story, and will be subject of our lecture on spatial data structures.)
keenan
@Isaaz Exactly, you use a sparse data structure. Some people also use adaptive data structures like octrees. Here's a cool paper on simulating smoke and water with octrees.
If you store a narrower and narrower band around the surface don't you get a mesh?
I'm a bit confused about how this works. How do you know identify and update the region to store, especially for something like the example on the last slide?
How to only store the narrow band? In my understanding, we still need a voxel grid as big as the bounding box. Do we utilize some sparse data structures to build a hierarchy to adapt voxel size?
@ceviri Not quite, because you're still just storing a subset of values in a grid. To make a 2D analogy: a 1 pixel-thick drawing of a curve on a pixel grid is still different from the input polyline in an SVG file. A mesh is more like an SVG file (it's a "vector graphics" representation); a level set is more like a rasterized image (it's a "bitmap graphics" representation). People also sometimes call these "Eulerian" representations (for grids) and "Lagrangian" representations (for meshes).
@bepis It can be tricky to keep things updated, but the key idea is that, fundamentally, you only care about the place where the level set goes through zero. So, you just need to keep a few cells around this zero set---enough so that when you interpolate (bilinearly, say) you can still "see" where the zero set is. If the zero set moves a little bit, you can update the distance function by just computing, for each pixel that you care about, the closest point on the zero set. (How to compute that is a whole other story, and will be subject of our lecture on spatial data structures.)
@Isaaz Exactly, you use a sparse data structure. Some people also use adaptive data structures like octrees. Here's a cool paper on simulating smoke and water with octrees.