Thread: [Algorithms] mesh to 3D texture?
Brought to you by:
vexxed72
From: Jeff R. <je...@8m...> - 2011-08-25 17:05:26
|
So, suppose that I wanted to voxelize a mesh into a regular 3D grid (a 3D texture on the GPU, fairly low res, something like 64^3). At each point I'd like to have access to color, a (rough) surface normal, and some kind of indicator of whether the space is "empty" or "filled". Is there some clever way I can use GPU rasterization to fill it (ideally keeping the whole process on the GPU)? I thought about rendering the mesh in slices with very narrow front and back clip planes, once for each slice of the 3D texture, but it seems like there could be issues with polygons perpendicular to my z axis not showing up, creating holes... Any advice? -- Jeff Russell Engineer, 8monkey Labs www.8monkeylabs.com |
From: Michael H. <mh...@gm...> - 2011-08-25 17:43:54
|
I've not personally done this work but do recall a few papers I've read on the topic. The following paper should be particularly germane. It details an approach for one pass solid voxelization. It also describes a method for determining a density field from which you can derive normal data. I imagine depending on your buffer width you could record encoded normal and color samples in the first pass, though this data only really is meaningful for the isosurface itself. http://artis.imag.fr/Publications/2008/ED08a/solidvoxelizationAuthorVersion.pdf Some more reading, though I've not read this paper in depth. http://www.mpi-inf.mpg.de/~mschwarz/papers/vox-siga10.pdf -Michael On Thu, Aug 25, 2011 at 10:04 AM, Jeff Russell <je...@8m...>wrote: > So, suppose that I wanted to voxelize a mesh into a regular 3D grid (a 3D > texture on the GPU, fairly low res, something like 64^3). At each point I'd > like to have access to color, a (rough) surface normal, and some kind of > indicator of whether the space is "empty" or "filled". > > Is there some clever way I can use GPU rasterization to fill it (ideally > keeping the whole process on the GPU)? I thought about rendering the mesh in > slices with very narrow front and back clip planes, once for each slice of > the 3D texture, but it seems like there could be issues with polygons > perpendicular to my z axis not showing up, creating holes... > > Any advice? > > -- > Jeff Russell > Engineer, 8monkey Labs > www.8monkeylabs.com > > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_name=gdalgorithms-list > |
From: Francis B. <fra...@ub...> - 2011-08-25 17:52:48
|
That's pretty much how d3d10+ implementation of Light Propagation Volumes work. This example, for instance http://blog.blackhc.net/wp-content/uploads/2010/07/LPVPrototype.zip, handles all volume texture data (writing and reading) on the gpu. The magic lies in the use of Draw with a NULL vertex buffer and a geometry shader that correctly selects the slice of volume to render into. From: Jeff Russell [mailto:je...@8m...] Sent: August-25-11 1:05 PM To: Game Development Algorithms Subject: [Algorithms] mesh to 3D texture? So, suppose that I wanted to voxelize a mesh into a regular 3D grid (a 3D texture on the GPU, fairly low res, something like 64^3). At each point I'd like to have access to color, a (rough) surface normal, and some kind of indicator of whether the space is "empty" or "filled". Is there some clever way I can use GPU rasterization to fill it (ideally keeping the whole process on the GPU)? I thought about rendering the mesh in slices with very narrow front and back clip planes, once for each slice of the 3D texture, but it seems like there could be issues with polygons perpendicular to my z axis not showing up, creating holes... Any advice? -- Jeff Russell Engineer, 8monkey Labs www.8monkeylabs.com<http://www.8monkeylabs.com> |
From: Jan A. <her...@gm...> - 2011-08-25 18:50:43
|
This paper from this year's HPG sounds like what you're looking for: http://research.nvidia.com/publication/voxelpipe-programmable-pipeline-3d-voxelization -- Sent from my Android phone with K-9 Mail. Please excuse my brevity. Jeff Russell <je...@8m...> wrote: So, suppose that I wanted to voxelize a mesh into a regular 3D grid (a 3D texture on the GPU, fairly low res, something like 64^3). At each point I'd like to have access to color, a (rough) surface normal, and some kind of indicator of whether the space is "empty" or "filled". Is there some clever way I can use GPU rasterization to fill it (ideally keeping the whole process on the GPU)? I thought about rendering the mesh in slices with very narrow front and back clip planes, once for each slice of the 3D texture, but it seems like there could be issues with polygons perpendicular to my z axis not showing up, creating holes... Any advice? -- Jeff Russell Engineer, 8monkey Labs www.8monkeylabs.com |
From: Christian H. <c....@qu...> - 2011-08-26 10:42:05
|
Hi Jeff, recently did some research myself, haven't yet come to the implementation side of things, so can't say much about real-world applicability: These are IMHO the most promising results, when it comes to non-exlusively-binary voxelization: Real-time GPU-based Voxelization and Applications (March 2011) http://www.cs.wisc.edu/techreports/viewreport.php?report=1688 Two Simple Single-pass GPU methods for Multi-channel Surface Voxelization of Dynamic Scenes (Pacific Graphics 2011) http://graphics.cs.aueb.gr/graphics/docs/papers/PG-2011optimized.pdf They both give a nice wrap-up of previous work (especially Eisemann) and discuss the kind of problems you are worried about. I will go for the second paper as basis for my implementation, not completely sure about performance though. @all: if anyone has experience with those two papers, I'd be glad to know :) Chris > So, suppose that I wanted to voxelize a mesh into a regular 3D grid (a > 3D texture on the GPU, fairly low res, something like 64^3). At each > point I'd like to have access to color, a (rough) surface normal, and > some kind of indicator of whether the space is "empty" or "filled". > > Is there some clever way I can use GPU rasterization to fill it > (ideally keeping the whole process on the GPU)? I thought about > rendering the mesh in slices with very narrow front and back clip > planes, once for each slice of the 3D texture, but it seems like there > could be issues with polygons perpendicular to my z axis not showing > up, creating holes... > > Any advice? > > -- > Jeff Russell > Engineer, 8monkey Labs > www.8monkeylabs.com <http://www.8monkeylabs.com> > > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > > > _______________________________________________ > GDAlgorithms-list mailing list > GDA...@li... > https://lists.sourceforge.net/lists/listinfo/gdalgorithms-list > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_name=gdalgorithms-list |